o
    e:                     @   s  d dl mZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlZd dlZd dlmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d d	lmZ d d
lm Z  d dlm!Z! d dl"m#Z# d dl$Z$d dl%Z%d dl&m'Z' d dl(m)Z) dd Z*ee+Z,e#e, e!j-e,_.ee,Z/ee,Z0ee,Z1e1j2dd Z3e,4ddd Z5e,4ddd Z6e,4ddd Z7e,4ddd Z8e,4dd d! Z9e,j4d"d#d$gd%d&d' Z:e,j4d(d#d$gd%d)d* Z;e,4d+ed,d- Z<e,4d.ed/d0 Z=e,4d1ed2d3 Z>e,4d4ed5d6 Z?e,4d7ed8d9 Z@e,4d:ed;d< ZAd=d> ZBe,j4d?d#gd%ed@dA ZCe,j4dBdCdDidEedFdG ZDe,j4dHd#gd%edIdJ ZEe,j4dKd$gd%edLdM ZFe,j4dNd$gd%edOdP ZGe,j4dQd$gd%dRdS ZHe,4dTedUdV ZIe,j4dWd$gd%edXdY ZJe,4dZd[d\ ZKe,4d]d^d_ ZLe,4d`dadb ZMdcdd ZNdedf ZOdgdh ZPe+dikre,QdjeN e,QdkeO e,jRdldm dS dS )n    N)Flaskrender_templaterequesturl_forredirectflashsession)	Bootstrap)datetime)zip_longest)config)MySQL)LoginManager
login_userlogout_userlogin_required)CSRFProtect)jsonify)Config)Compress)	ModelUser)Userc                 C   s^   g }t | d}t|}t| |D ]	}|||  qW d    |S 1 s(w   Y  |S )Nr)opencsvreadernextappend)filenamecolumn_indexdata_filer   row r#   #/var/www/html/spxbutterflies/app.pyread_csv_file   s   

r%   c                 C   s   t t| S N)r   	get_by_iddb)idr#   r#   r$   	load_user1      r*   z/borrarc                   C      t dS )Nzborrar.htmlr   r#   r#   r#   r$   borrar6      r.   z/pruebac                   C   r,   )Nz
index.htmlr-   r#   r#   r#   r$   prueba:   r/   r0   z/aboutc                   C   r,   )Nz
about.htmlr-   r#   r#   r#   r$   about>   r/   r1   z/contactc                   C   r,   )Nzcontact.htmlr-   r#   r#   r#   r$   contactB   r/   r2   /c                   C      t tdS Nloginr   r   r#   r#   r#   r$   indexG   r+   r8   z	/registerGETPOST)methodsc                  C   sR  t jdkr	tdS t jd} t jd}t jd}t jd}t| dks-t| dkr;td	 | td
< tt	dS t|dk sGt|dkrUtd | td
< tt	dS ||krgtd | td
< tt	dS t|dk sst|dkr}td tt	dS t
d| d}tt|}|d krtt| || td tt	dS td tt	dS )Nr9   z/auth/register.htmlusernamenamepassword	password1r   (   z*An email is required to create an account.stored_usernameregister       z+The password must be at least 8 characters.zPasswords do not match.   2   zPlease enter a valid name. z.User created successfully. You can log in now.r6   zUser already exist.)r   methodr   formgetlenr   r   r   r   r   r   r6   r(   create)r<   r=   r>   r?   userlogged_userr#   r#   r$   rB   M   s:   
rB   z/loginc               
   C   s   t jdkratdt jd t jd } tt| }|d krY|jrQt| |j	t
d< z	tt
d  W n tyJ } ztdt|iW  Y d }~S d }~ww ttdS td td	S td
 td	S td	S )Nr:   r   r<   r>   userIDerror	dashboardzInvalid passwordz/auth/login.htmlzUser not found)r   rH   r   rI   r   r6   r(   r>   r   r)   r   funcionesV2registrar_log	Exceptionr   strr   r   r   r   )rM   rN   er#   r#   r$   r6   y   s&   

r6   z/get_modal_datac                  C   s   t ttd } i d| jd| jd| jd| jd| jd| j	d| j
d	| jd
| jd| jd| jd| jd| jd| jd| jd| jd| jd| ji}t|S )NrO   takeProfit1_PercenstopLoss1_PercentakeProfit2_PercenstopLoss2_PercentakeProfit3_PercenstopLoss3_PercentakeProfit4_PercenstopLoss4_PercentakeProfit1_DollarstopLoss1_DollartakeProfit2_DollarstopLoss2_DollartakeProfit3_DollarstopLoss3_DollartakeProfit4_DollarstopLoss4_Dollaroffset	contracts)r   r'   r(   r   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   r   )settingDatadatar#   r#   r$   get_modal_data   sN   	
rk   z
/dashboardc                   C   r,   )Nz/dashboard.htmlr-   r#   r#   r#   r$   rQ         rQ   z/getBestPairc                   C   r,   )Nz/get_best_pair.htmlr-   r#   r#   r#   r$   getBestPair   rl   rm   z/statisticsc                   C   r,   )Nz/statistics.htmlr-   r#   r#   r#   r$   
statistics   rl   rn   z)/get_label_data/<string:EstrategiaNumber>c                 C   s   t | }td|iS )NdiasHabilitados)rR   obtener_Diasr   EstrategiaNumberro   r#   r#   r$   get_label_data   s   
rs   z/chart_livec                   C   r,   )Nz/chart_live.htmlr-   r#   r#   r#   r$   
chart_live   rl   rt   c                 C   sz   t | |}|jd d df  }|jd d df  }d|jd }d|jd d }d|jd }|||||fS )Nr      {:.2f}rE   rx   ru   d   rx      )rR   listaParaGraficoDiarioiloctolistformat)
estrategiarg   rj   x_datay_dataultimoPrecioSPXprofitLossPercentageprofitLossDollarr#   r#   r$   calcular_datos_grafico   s   r   zH/chart_live/<estrategia>/<takeProfit>/<stopLoss>/<offset>/<dollarOrPerc>c                 C   sH  g }g }t | |}|jd d df  }|dkr%|jd d df  }n|jd d df  }d|jd }d|jd d }	d|jd	 }
t|jd
 t| }|jd }|d }t|| }|dkrot|d }nt|}dt|d  }dt| }dt| }dt|d  }|||||||||	|
|d}t	|}|S )Nr   Pru   r|   rv   rw   ry   rz   r{   r      r   rE            @	BTO CALL r@   	STO CALL STO PUT BTO PUT )r   r   	strikeSPXwing1wing2wing3wing4r   r   r   credit)
rR   r}   r~   r   r   floatintrU   jsondumps)r   
takeProfitstopLossrg   dollarOrPercr   r   rj   r   r   r   r   	primerSPXModDif
creditLessr   r   r   r   r   response_datajson_responser#   r#   r$   mostrar_chart_live   sF   

r   z/chart_historicalrr   1)defaultsc                 C   s   t | }td|| dS )Nz/chart_historical.html)ro   rr   )rR   rp   r   rq   r#   r#   r$   chart  s   
r   zV/chart_historical/<fecha>/<estrategia>/<takeProfit>/<stopLoss>/<offset>/<dollarOrPerc>c              
   C   s   g }g }t | |t|}|jd d df  }|dkr(|jd d df  }n|jd d df  }t | }	|jd }
t|jd t| }|
d }t|
| }|dkr]t|d }nt|}d	t|d
  }dt| }dt| }dt|d
  }|||||||||	d	}t	|}|S )Nr   r   ru   r|   r   r   r   r   r   r@   r   r   r   )	r   r   r   r   r   r   r   r   hayNoticias)
rR   listaParaGraficor   r~   r   verificarFeriadosr   rU   r   r   )fechar   r   r   rg   r   r   r   rj   r   r   r   r   r   r   r   r   r   r   r   r   r#   r#   r$   mostrar_chart  s>   


r   z/update_tablec                  C   sp   t tjd } t tjd }t tjd }tjd }t tjd }tjd }t| d |d ||||}t|S )Nr   r   rh   estrategiaNumberrg   r   rz   )r   r   rI   rR   obtener_Datosr   )take_profit	stop_loss
contracts_estrategia_Number_offset_dollarOrPerc_updated_datar#   r#   r$   update_tableA  s   

r   z/comparative_datac                  C   s:  t tjd d } t tjd d }t tjd d }t tjd d }t tjd d }t tjd d }t tjd d }t tjd	 d }t tjd
 }t tjd }	t| |||||||||	
\}
}}}}}}}}}}}}}}}}}dd |
D }|
||||||||||||||||||g}tt| }t|dS )NrW   rz   rY   r[   r]   rX   rZ   r\   r^   rg   rh   c                 S   s   g | ]}t |qS r#   )obtener_nombre_dia).0r   r#   r#   r$   
<listcomp>a  s    z process_data.<locals>.<listcomp>)rj   )r   r   rI   rR   listaComparativalistr   r   )rW   rY   r[   r]   rX   rZ   r\   r^   rg   rh   listaFechas	listaNewslista1lista2lista3lista4credito1credito2credito3credito4
TPMinutes1
TPMinutes2
TPMinutes3
TPMinutes4profitOrLoss1profitOrLoss2profitOrLoss3profitOrLoss4listaNombreDiaslistaslista_unicar#   r#   r$   process_dataP  s&   (
r   z	/saveOnDBc               
   C   sR   zt  } tt| td  W dS  ty( } zt|dfW  Y d }~S d }~ww )NrO   )zValores guardados correctamente   i  )r   get_jsonr   saveDatar(   r   rT   rU   )rj   rV   r#   r#   r$   guardar_valoresk  s   r   z/comparativec                   C   r,   )Nz/comparative.htmlr-   r#   r#   r#   r$   comparativev  rl   r   z/update_BestPairc            
   
   C   s   t  } | d}| d}| d}| d}t| d}t| d}| d}| d}t||||||||}	t|	S )	Nr   newsDaysr   	resultsInrh   rg   	sinceDate	untilDate)r   r   rJ   r   rR   obtenerBestPairr   )
rj   r   r   r   r   rh   rg   r   r   dataIB1r#   r#   r$   update_BestPair|  s   





r   z/obtener_fear_and_greedc                  C   s&   t  } | j| j| j d}t|S )N)valuedescriptionlast_update)fear_and_greedrJ   r   r   r   	isoformatr   )	fearGreedfear_greed_infor#   r#   r$   obtener_fear_and_greed  s   r   z/obtener_datos_best_pairc                  C   s   t  } | S r&   )rR   obtener_datos_best_pair)datosr#   r#   r$   r     s   r   z/logoutc                   C   s   t   ttdS r5   )r   r   r   r#   r#   r#   r$   logout  s   r   c                 C   r4   r5   r7   rP   r#   r#   r$   
status_401  s   r   c                 C   s   dS )N)z<h1>Page Not Found<h1>  r#   r   r#   r#   r$   
status_404  s   r   c                 C   s   t | d}|d}|S )Nz%m/%d/%Yz%A)r
   strptimestrftime)	fecha_strr   
nombre_diar#   r#   r$   r     s   
r   __main__i  r   T)debug)Splotly.graph_objs
graph_objsgoplotly.offlineofflinepyoflaskr   r   r   r   r   r   r   flask_bootstrapr	   r   rR   r
   r   	itertoolsr   r   flask_mysqldbr   flask_loginr   r   r   r   flask_wtf.csrfr   r   r   flask_compressr   sysr   models.ModelUserr   models.entities.Userr   r%   __name__app
SECRET_KEY
secret_key	bootstrapr(   login_manager_appuser_loaderr*   router.   r0   r1   r2   r8   rB   r6   rk   rQ   rm   rn   rs   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   register_error_handlerrunr#   r#   r#   r$   <module>   s    $







+

.+






