o
    rBh                     @   s8  d dl Zd dlZd dlZd dlZd dlmZ d dlZd dlZd dlZd dl	Z
d dlm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mZ dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"d d! Z#d"d# Z$d$d% Z%d&d' Z&d(d) Z'd*d+ Z(d,d- Z)d.d/ Z*dS )0    N)datetime)PATH_UBUNTU)jsonify)MIMEText)MIMEMultipart)Pool	cpu_countc                 C   sZ   ddddddddd	d
d
}t ||   }tj|dtd}|j }|dd d }td |S )NIBData0940NoResults.csvIBData1030NoResults.csvIBData1100NoResults.csvIBData1130NoResults.csvIBData0932NoResults.csvIBData0933NoResults.csvICData0932NoResults.csvICData1030NoResults.csvICData0933NoResults.csvICData1031NoResults.csv
12345678910r   )headerdtype   ztodo ok)r   pdread_csvstrcolumnstolistprint)estrategiaNumberestrategia_archivo_maparchivo_csvdfdfListasolo_Fechas r-   7/var/www/html/opcionsigma.spxbutterflies/funcionesV2.pyobtener_Dias   s"   
r/   c              	   C   s  d}|dks
|dkr@t | d}|d}d}|dkr%t| d | d }|dkr3t| d	 | d }td
| tj|dd d}ddddddddd}d}	t||  }	d}
| dd} tj|	dd}|j	 }|dd d }| |v rw|
| }
|jd d |
f  }|jd ||
|
d f }|jd | }|jd d df dd |jd d df< ||jd d df  |d< |jd d df | |d < |jd d d!f d" |d#< ||fS )$N r   r   z%m-%d-%Y%Y-%m-%d	Intraday_IC0932_.csvIC1030_zarchivo Intraday:    nrowsr   r	   r
   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   -/F
low_memoryr    r   r6   c                 S      t | dkr
d|  S | S N   0lenxr-   r-   r.   <lambda>Y       z"listaParaGrafico.<locals>.<lambda>P/LP/L%   d   zVIX%)r   strptimestrftimer   r&   r!   r"   replacer$   r%   indexiloccountapply)	fecha_strr'   offset
dfCabecerafecha_objetofecha_str_icpreNombreArchivoarchivo_csv_ICr(   r)   indice_fecha_especificar*   r+   r,   cantidad_filasonlyDF	elprimeror-   r-   r.   listaParaGrafico+   sR   





r^   c                 C   s  g }ddddddddddd	dd
dddddddddddddddddd
}| |}t|d  }	|d }
tj|	dd}|j }|dd d }d}|D ]}|jd d |f  }|jd|||d f }tj	t
|d   }t|}|jd | }||jd d df  |d< |jd d df | |d< t| |||
||\}}}}}}}}dt|| d}||||||||||d d |g}|| |d7 }qS|S )!Nr	   09:40:00r)   HoraComienzor
   10:30:00r   11:00:00r   11:30:00r   09:31:00r   r   r   r   r   r   r)   ra   Fr;   r   r    rJ   %m/%d/%Yr=   r6   rH   rI   $ .2fr0   )getr   r!   r"   r$   r%   rP   rQ   calendarday_namer   rL   dateweekdayverificarFeriadosgoodOrBadDayfloatappend)tpsl	contractsr'   rT   dollarOrPercdataestrategia_info
estrategiar)   ra   r*   r+   r,   columna_indicefechar[   r\   	diaSemanaholidayr]   TPTimeSLTime	BadOrGoodcredito	TPMinutes	SLMinutesProfitOrLossNoContractsocurrenciasProfitOrLossnuevos_datosr-   r-   r.   obtener_Datosc   sR   




r   c                 C   s4  |dkrdnd}| |9 } ||9 }|dkr"|j d d df | k }n|j d d df | k }|j |df }|dkrH|j d d df |k  }	n|j d d df |k  }	|j |	df }
tt|j d d	| }d
t|d}|	dkrvd}	|dkr|d}|dkr|j d d df | k }|j ||	df | k }n|j d d df | k }|j ||	df | k }t|d t| }t||}t|
|}||	k rd}|dkr||  }n| }nd}|dkr|| }n|}|	dkrd}d}
|dkr||  }n| }|dkrd}d}|dkr|| }n|}||
||||||fS )NDrK   r6   Pr    rJ   r   r=      rg   rh   ?B r:   GOODBADr9   )rP   idxmaxroundrp   sumr#   calcular_diferencia_horas)
takeProfitstopLossonlydf1ra   ru   rT   
multiplierfila_indiceTPHoraTPfila_indiceSLHoraSLr   credito_formattedcountMayorATakeProfitcountParcialATakeProfiftoccurrenciasr   r   r   r   r-   r-   r.   ro      sj   







ro   c                 C   sT   t | d}t |d}|| }|jd }|jd d }d||}|dkr(d}|S )Nz%H:%M:%Si  <   z{:02d}:{:02d}z00:00r9   )r   rL   secondsformat)	hora1_str	hora2_strhora1hora2
diferenciadiferencia_horasdiferencia_minutosdiferencia_strr-   r-   r.   r      s   
r   c                 C   sX   t d }tj|d d}t|d |d< |d | k}| r*|j|df jd }|S dS )Nholidays.csvr   r   r6   zNo News)r   r!   r"   to_datetimeanylocvalues)fecha_verificarr)   df1maskvalor_columna_2r-   r-   r.   rn      s   rn   c           	      C   s  d}t  }|d}d}| dkrt| d | d }| dkr)t| d | d }| d	kr7t| d
 | d }| dkrEt| d | d }| dkrSt| d | d }| dkrat| d | d }| dkrot| d | d }| dkr}t| d | d }tj|dd d}tj|dd d}|d jdd  |d< |jd t| }|jd d df 	dd |jd d df< ||jd d df  |d< |jd d df | |d< ||fS ) Nr2   r1   r0   r   IB0940_r4   r   IB1030_r   IB1100_r   IB1130_r   IB0932_r   IB0933_r   r3   r   r5   r6   )skiprowsr   r7   r   r=   c                 S   r>   r?   rB   rD   r-   r-   r.   rF   /  rG   z(listaParaGraficoDiario.<locals>.<lambda>rH      rI   )
r   nowrM   r   r!   r"   r#   rP   rp   rR   )	r'   rT   rX   fecha_actualpostNombreArchivor)   dfDatosrU   r]   r-   r-   r.   listaParaGraficoDiario  s<   
r   c           $      C   s   t |d | |||	|
|\}}}}t |d ||||	|
|\}}}}t |d ||||	|
|\}}}}t |d ||||	|
|\}}}}td }|
dkrTtj|ddtdd	}ntj|ddd
}|j }|dd d } g }!td }| D ]}"t|"}#|!|# qp| |!||||||||||||||||fS )Nr   r6   r   rJ   r   trueFrK   r8   r<   usecols)r8   r<   r    r   )	listaComparativaPorEstrategiar   r!   r"   ranger$   r%   rn   rq   )$takeProfit1takeProfit2takeProfit3takeProfit4	stopLoss1	stopLoss2	stopLoss3	stopLoss4rT   rt   miniComparativeIBListdollarOrPercenlistaParcial1listaCreditos1TPMinutesParcial1profitOrLoss1listaParcial2listaCreditos2TPMinutesParcial2profitOrLoss2listaParcial3listaCreditos3TPMinutesParcial3profitOrLoss3listaParcial4listaCreditos4TPMinutesParcial4profitOrLoss4r)   r*   r+   listaFechas	listaNewsrz   r|   r-   r-   r.   listaComparativa7  s0   
(r   c                 C   s  ddddddddddd	dd
dddddd}| | }t|d  }	|d }
|dkr9tj|	dtdd}ntj|	dd}g }g }g }|j }|dd d }|jddd df | t	 }d}|D ]}|jd d |f 
 }|jd|||d f }|jd | }||jd d df  |d< |jd d df | |d< |d7 }|dkr|j|d |k  }n|j|d |k  }t|rd}|dkr|j|d |k   }n|j|d |k   }t|rd}||k r |d |j|df }t||
}|| |dkr|t| | }n|| }|d| qg|d  |d! |dkr8|t| | }n|| }|d| qg||||fS )"Nr	   r_   r`   r
   rb   r   rc   r   rd   r   re   r   r   r   r   r   r   r   r)   ra   r   FrK   r<   r   r;   r   r    r6   rJ   r=   rH   rI   r   韆 Gz{:.2f}Br0   )ri   r   r!   r"   r   r$   r%   rP   astypeintrQ   rO   minnpisnanrq   r   rp   r   )r'   r   r   rT   rt   r   r   rw   rx   r)   ra   r*   listaparcialTPMinutesParcialprofitOrLossParcialr+   r,   creditoParcialry   rz   r[   r\   r]   indice_fila_TPindice_fila_SLr   r   profitOrLossr-   r-   r.   r   V  sj   

"









r   c           
      C   s   |dkr|| k  }||k   }n|| k  }||k   }|dkr#d}|dkr)d}||k r:d}|dkr7||  n| }	nd}|dkrD|| n|}	|dkrVd}|dkrT||  n| }	|dkrfd}|dkrd|| n|}	|	|fS )u  
    Recibe:
        takeProfit, stopLoss: valores numéricos (ya convertidos según corresponda a D ó P).
        credito_inicial: float con el crédito inicial (elprimero - offset).
        pl_array: Series o array con la columna 'P/L' (ya calculada).
        plpct_array: Series o array con la columna 'P/L%' (ya calculada).
        dollarOrPerc: 'D' ó 'P'.

    Devuelve:
        (ProfitOrLoss, goodOrBad)
    r   r   r   r   r   )r   )
r   r   credito_inicialpl_arrayplpct_arrayru   r   r   	goodOrBadr   r-   r-   r.   	getTotals  s*   r   c	           7   
   C   s  ddddddd}	t |	|   }
|dkrg d	}g d
}ng d}g d}t d }tj|d d}t|jd d df  }t|d}t|d}tj|
dd}|j dd d }g }t	|D ]\}}t|d}||  krs|ksun q_|dkr|
 |d krq_||v }|s|rq_|d }|d }|jd d |f  }|dkrq_|jd |||d f  }zt|jd | }W n   Y q_d|  k rdk sn q_||jd d df  |d< |jd d df | |d< t|d}|d }|d } ||||| d q_g }!g }"g }#|dkr'|D ]
}$|"|$d  q|D ]
}%|#|%d  qn|}"|}#|"D ]}&|#D ]}'d}(d})d}*d}+g },|D ]7}-|-d }|-d }|-d  } t|&|'||| |\}.}/|/d!krf|(d7 }(|*|.7 }*n|)d7 })|+|.7 }+|,|.|  q?|d"krd}0|(|) }1|1dkr|(|1 }2|)|1 }3|(dkr|*|( nd}4|)dkrt|+|) nd}5|5dkr|4|5 nd}6|6|2 |3 }0|!|&|'|0f q1|!|&|'t|,f q1q-|!S )#Nr	   r
   r   r   r   r   r   r   )r      r@      	   
                              )iir   iiiiiiiiiii)(   r   P   rK   x                     i  i  i,  i@  )iiiii~ijiViBi.iiiiiir   r   r   rf   Fr;   r    r6   rJ   r=   r   rH   rI   r   )rS   r   r   r   g{Gz?g        r   r   r   r   EV)r   r!   r"   setrP   r%   r   rL   r$   	enumeraterm   rQ   copyrp   r   rq   r   absr   )7rx   ru   newsDays	resultsInrt   rT   	sinceDate	untilDate	dayFilterr(   r)   listaTPlistaSLarchivo_holidaysdf_holidaysset_de_fechas_holidayfecha_begin_objfecha_end_objr*   r,   dias_validos_dataifecha_col_name	fecha_objesta_en_holiday	start_colend_colfilas_validasday_dfr]   r   r   r   resultsListlistaTP_convertidalistaSL_convertidarr   rs   tp1sl1
totalGOODs	totalBADssumGOODssumBADsdataIBday_infor   r   expectationValue	totalDiasaciertosPercenterroresPercent
mediaGOODs	mediaBADsratior-   r-   r.   obtenerBestPair  s   








9r=  c                  C   sl   d} zt | }W n ty   tddi Y S w tj| }t|	d}|j
dd}||d}t|S )Nz+/var/www/html/spxbutterflies/resultados.csverrorzArchivo CSV no encontradorf   records)orient)fecha_creaciondatos)r!   r"   FileNotFoundErrorr   ospathgetctimer   fromtimestamprM   to_dict)r)   r*   rA  fecha_formateadarB  r-   r-   r.   obtener_datos_best_pair  s   
rJ  c                 C   sb   t  d}| |g}d}t|ddd}t|}|| W d    d S 1 s*w   Y  d S )Nz%Y-%m-%d %H:%M:%Sz5/var/www/html/spxbutterflies/static/data/ingresos.csvar0   newline)r   r   rM   opencsvwriterwriterow)user_id	timestamplog_datar)   csvfile
csv_writerr-   r-   r.   registrar_log  s   
"rW  c                 C   s   d}d}d}d}d}	d}
|}t  }|	 d|
 d|d< ||d	< | |d
< |dkr,d| }|dkr8d| d| }| d| }|t|d t||}|  ||| ||
||  W d    d S 1 slw   Y  d S )Nsmtp.titan.emailK  info@spxbutterflies.comDaleriver11$szSPX Butterflies <>FromToSubjectResetPasswordz0https://spxbutterflies.com/reset_password?token=	FreeTrialz0https://spxbutterflies.com/validate_email?token=z
&username=
plain	r   attachr   smtplibSMTPstarttlsloginsendmail	as_string)subjectbodyusernametoken	tipoEmailemail_server
email_portemail_usernameemail_passwordsender_namesender_emailreceiver_emailmessagereset_password_linkbody_with_linkserverr-   r-   r.   
send_email  s,   
"r}  c                 C   s   d}d}d}d}|d | }	|}
|}t  }|	 d|
 d|d< ||d	< | |d
< |t|d t||}|  ||| ||
||  W d    d S 1 sTw   Y  d S )NrX  rY  rZ  r[   r\  r]  r^  r_  r`  rd  re  )rm  	firstNamelastNamereceiptEmailrn  rr  rs  rt  ru  rv  rw  rx  ry  r|  r-   r-   r.   send_email_general  s"   "r  c                  C   V   t d } t| ddd}t|}t|}W d    t|S 1 s"w   Y  t|S )Nz/alerts/alerts.csvrr0   rL  r   rN  rO  
DictReaderlistr   r)   file
csv_readercsv_datar-   r-   r.   get_alert_data  s   


r  c                  C   r  )Nz /heatMapCharts/heatMapCharts.csvr  r0   rL  r  r  r-   r-   r.   get_heatMapResultados  s   


r  c                  C   s\   t d } t| dddd}t|}t|}W d    n1 s w   Y  t|dddifS )	Nz"/boletinReporte/boletinReporte.csvr  r0   zutf-8)rM  encodingr  zContent-Typezapplication/json; charset=utf-8r  r  r-   r-   r.   get_boletinResultados  s   

r  c                 C   s   t d| |||	|
}t d||||	|
}t d||||	|
}t d||||	|
}td }tj|ddtdd	}|j }|d
d d }g }td }|D ]}t|}|| qG||||||fS )Nr   r   r   r   r   r6   FrK   r   r   r    r   )	#ICminiListaComparativaPorEstrategiar   r!   r"   r   r$   r%   rn   rq   )r   r   r   r   r   r   r   r   rT   rt   r   r   r   r   r   r)   r*   r+   r   r   rz   r|   r-   r-   r.   ICminiListaComparativa&  s   
r  c                 C   s  ddddddddddddd}| | }t|d	  }|d
 }	tj|dtdd}
g }|
j }|dd d }d}|D ]}|
jd d |f  }|
jd|||d f }|jd | }||jd d df  |d< |jd d df | |d< |d7 }|dkr|j	|d |k 
 }n|j	|d |k 
 }t|rd}|dkr|j	|d |k  
 }n|j	|d |k  
 }t|rd}||k r|d q>|d q>|S )Nr   re   r`   r   rb   r   r   )r   r   r   r   r)   ra   FrK   r   r   r    rJ   r=   r6   rH   rI   r   r   r   r   )ri   r   r!   r"   r   r$   r%   rP   rQ   rO   r   r   r   rq   )r'   r   r   rT   rt   r   rw   rx   r)   ra   r*   r   r+   r,   ry   rz   r[   r\   r]   r   r   r-   r-   r.   r  =  sD   



r  )+numpyr   rD  rO  secretsr   rj   pprinttimepandasr!   ubuntuFilesr   flaskr   rg  email.mime.textr   email.mime.multipartr   multiprocessingr   r   r/   r^   r   ro   r   rn   r   r   r   r   r=  rJ  rW  r}  r  r  r  r  r  r  r-   r-   r-   r.   <module>   sH    84Q)Y5 G
"
