o
    E`is                     @   sJ   d dl m Z mZ d dlZdedededededed	ed
edefddZdS )    )datetimedateNdchain_symbol
entry_timetarget_delta_abswidth	contractsslippageTPSLc	           )      C   s  zVt | d }	ddlm}
m}m}m}m}m	}m
} |
||	}|s*d|	 iW S t|}tj|d dd|d< |d t|d< |||}|||}|d	 |d
 }}|||d |d}|||d |d}||||d}||||||}||d |}t|d jd }d|jv rt|d jd nd}|ddg }|jd }|||k }d} |}!|d }"g }#|D ]A}$|||$||}%|d |% }&|#t|$tt|%dtt|&dd |%}"|$}!|dkr|&|krd}  n|dkr|&| krd}  nq|#r|#d d nd}'|	 t||||t||d |d |d |d d| t|!|!dtt|"dtt|'d||d|'dkrAdn|'dk rHd nd!|'dktt|'dd"d#W S  tyq }( zt|(| d$W  Y d}(~(S d}(~(ww )%u   
    Procesa UN solo día de backtesting.
    SIEMPRE devuelve un dict serializable.
    NUNCA levanta excepción (para no romper el chord).
    z%Y-%m-%dr   )find_parquet_for_dayfind_snapshot_by_timefind_sell_strikes_by_deltapick_wing_strikecalc_ic_credit_grosscalc_entry_credit_netcredit_for_snapshot_fast_missing	timestampcoerce)errorsstrike	call_sellput_sellcallput)r   call_buyr   put_buycredit_grossunderlying_priceNEOD
credit_net   )tscredit_now_grosspnlr   r   r&   g        credit_pointsr
   )r   r(   r   r
   r"   z%H:%M)reasonr   	time_hhmmfinal_credit_now_gross	final_pnltpslWINLOSSFLAT)labelis_positiver&   )r   filer   underlying_entrylegsentryexitresult)errorr   )r   strptimer   backtesting.enginer   r   r   r   r   r   r   	isoformatpdread_parquetto_datetimeastypefloatiloccolumns	set_index
sort_indexindexget_level_valuesuniqueappendstrroundstrftime	Exceptionrepr))r   r   r   r   r   r	   r
   r   r   d_dater   r   r   r   r   r   r   pdf
snap_entrysellsr   r   r   r   r6   entry_gross	entry_netentry_tsr5   df_idxts_allexit_reasonexit_tsfinal_credit_nowpnl_pathr$   
credit_nowr&   r,   e r`   5/var/www/html/neutralSigma/backtesting/engine_core.pyprocess_single_backtest_day   s   $






!rb   )r   r   pandasr>   rK   rB   intrb   r`   r`   r`   ra   <module>   s*   	