o
    ZT2hW5                     @   s   d dl Z d dlZd dlmZmZmZ d dlmZ d dlZede	ddZ
dZdd	 Zd
d Zdd Zdd Zdd Ze
jddgddd Zdd ZdS )    N)	Blueprintjsonifyrequest)datetimebacktestingIdea	templates)template_folderz/var/www/html/flask_project/c                 C   s6  zt j| tdd}t |d |d< ||d |k }|jr!W dS ||d ||g }|dkr7|g d }n
|dkrA|g d	 }||d |k jd
 }||d |k jd
 }	|dkrp|d |d  d }
|	d |	d  d }n|dkr|d |d  d }
|	d |	d  d }|
| }|d }||fW S    Y dS )N	   )usecols	timestamp)r   NstrikePUT)r   bid_putask_putunderlying_priceCALL)r   bid_callask_callr   r   r   r      r   r   r   )pdread_csvrangeto_datetimeemptyisiniloc)archivo_option_chainstrike1strike2option_typetimeHouroption_chain_dffiltered_chainstrikes_datastrike1_datastrike2_datastrike1_avgstrike2_avgcredit_receivedr    r)   :/var/www/html/backtestingmarket/backtestingIdeaOriginal.py/calcular_credito_y_underlying_desde_archivo_csv   s0   
r+   c                    s   g }| d j d }t| d | d< | | d t|k| d t|k@   } | j fdddd| d< | j fd	ddd| d
< |  D ]\}}t|d d}	|d }
|d }|d
 }|d }|dkrnt||nt||}|dkr|t||nt||}t|d  d|
 }| d| d|	 d}t	|||||\}}t
|}t|| }|d ur|d ur|dkr||kr|| d }n9||k r|d }n0|| d }|d | }n#||k r|| d }n||kr|d }n|| d }|d | }nd }|d ur,|dkr||krd}n ||k rd}nd}n||k r!d}n||kr)d}nd}nd}||	|
| d| |t|ttfrHt|d dnd |||d urUt|dnd |r`t|| dnd |d
 qFt|}|d jdd}||d dk jd }||d dk  jd }||||fS )NSymbolr   Dayc                    $   | d dkr| d   S | d   S )NOption_Typer   Strike1r)   rowdesplazamientor)   r*   <lambda>7      $ z-calcular_precios_verticales.<locals>.<lambda>   )axisStrike1_Desplazadoc                    r.   )Nr/   r   Strike2r)   r1   r3   r)   r*   r5   :   r6   Strike2_Desplazado%Y-%m-%dHourr/   r    chains/optionChain_$_.csvd   ITMOTMITM PERROR/r   )
r-   TimeStrikesOptionCreditPriceCloseP/LDiffitmOtmrN   Tskipna)r   r   r   copyapplyiterrowsstrftimeminmaxr+   obtener_ultimo_underlying_priceabsappend
isinstanceintfloatround	DataFramesumshape)vertical_strikes_dfpath_csv_baser4   desdehasta
resultadossymbolr@   r2   fechahorar   r   r   strike_ventastrike_compraspecific_timer   credit_resultunderlying_price_specific_timeunderlying_price_16
spreadDiffganancia_dia	valor_itmrP   df_resultadosprofit_total	positivos	negativosr)   r3   r*   calcular_precios_verticales-   s   












 

rx   c                 C   sJ  t | }t |d |d< ||d |k }|jrdS ||d |d |d |d |d g }i }| D ]@\}}||d |k }	|dr_|	jsZ|	d	 jd
 |	d jd
  d nd ||< q6|	jsr|	d jd
 |	d jd
  d nd ||< q6tdd |	 D rdS |d |d  }
|d |d  }|
| }|d jd
 }|||
|fS )Nr   )zNo data foundNNNr   Call_Strike1Call_Strike2Put_Strike1Put_Strike2Callr   r   r   r   r   r   c                 s   s    | ]}|d u V  qd S )Nr)   ).0vr)   r)   r*   	<genexpr>   s    z<calcular_credito_y_underlying_iron_condor.<locals>.<genexpr>)zMissing dataNNNr   )
r   r   r   r   r   items
startswithr   anyvalues)r   strikesr    r!   r"   r#   strike_valueskeyr   
strike_rowcredit_callscredit_putsr(   r   r)   r)   r*   )calcular_credito_y_underlying_iron_condor   s*   


00r   c                 C   s   |d u s| d u r
d S |d |d  }|d |d  }||d k s&||d kr/| t || d S |d |  kr@|d krA| d S  |d |  krO|d k r^n n| t|d | | d S |d |  k rl|d kr|n d S | t||d  | d S d S )Nr{   r|   rz   ry   rB   )rX   rW   )rn   rp   r   diff_put	diff_callr)   r)   r*   )calcular_ganancia_perdida_dia_iron_condor   s    r   c                 C   s  g }| d j d }t| d | d< | | d t|k| d t|k@   } |  D ]\}}t|d d}	|d }
|d | |d | |d | |d	 | d
}|d	  d|d  d|d  d|d  }t|d  d|
 }| d| d|	 d}zt|||\}}}}W n   d\}}Y zt|}W n   d }Y t|||}|d ur||d	 k s||d krd}n|d |  kr|d krn nd}nd}nd}|pd|d  d}|pd|d  d}|	|	|
|||t
|ttfrt|d dnd t
|ttfrt|dnd | d| d|d	 q,t|}|d jdd}||d dk jd }||d dk  jd }||||fS )Nr,   r   r-   r<   r=   ry   rz   r{   r|   )ry   rz   r{   r|   rG   r>   r?   r@   rA   )NNrC   rD   rE   zN/Az.2frB   r   z(P) / z(C))	r-   rH   rI   rL   rM   rK   rN   DifrP   rN   TrQ   )r   r   r   rS   rU   rV   r   rY   r   r[   r\   r]   r^   r_   r`   ra   rb   )dfrd   r4   re   rf   rg   rh   r@   r2   ri   rj   r   strikes_formateadosrm   archivorn   r   rp   rr   rP   dif_calldif_putrt   ru   rv   rw   r)   r)   r*   calcular_precios_iron_condor   sb   ,



*
 

r   z/get_backtesting_ideaGET)methodsc               	   C   s*  t jd} t jd}t jdd}t jdd}t jdd}t jd	d
 }ddddd|d}d| d| d| d| d	}tj|sRtddidfS t	|}|
 dkrjt|t|| |\}	}
}}n|
 dkr}t|t|| |\}	}
}}ntddidfS t|	jddt|
d||dS ) Nre   rf   rh   SPX
estrategiaVerticalrj   1340risk
Intermedior   ii)conservador
intermedioagresivoultra_agresivoz7/var/www/html/backtestingmarket/predictor_data/makekos/rG   r@   	_strikes_rA   errorz Archivo de strikes no encontradoi  VERTICAL
IRONCONDORzEstrategia no reconocidai  records)orientr   )dataru   winslosses)r   argsgetlowerospathexistsr   r   r   upperrx   PATH_UBUNTUr   to_dictr_   )re   rf   rh   r   r    r   r4   r   
df_strikes	df_resulttotalr   r   r)   r)   r*   get_backtesting_idea  s8   	

r   c                 C   sV   z$t | }t |d |d< |jdd}d|jv r"|d jd W S d W S    Y d S )Nr   )byr   )r   r   r   sort_valuescolumnsr   )r   r!   r)   r)   r*   rY   2  s   
 rY   )r   pandasr   flaskr   r   r   r   math__name__backtestingIdea_bpr   r+   rx   r   r   r   router   rY   r)   r)   r)   r*   <module>   s    `I
+