o
    1h                     @   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	m	Z	 ede
ddZejdd	gd
dd Zdd Zdd Zdd Zejdd	gd
dd Zejddgd
dd ZdS )    N)	Blueprintjsonifyrequest)process_backtesting_task)datetimeneutralEdge	templates)template_folderz/log_intradayPOST)methodsc               
   C   sn  t  } | d}| d}| di }| d}| d}t|ddkr+|d7 }d	}d
| d| d}tjd|}z\t|||d|d|d|d\}	}
|	d u s]|
d u rgt	ddddfW S t
|d }t||
|d|d|d|d|}dd |D }t	d||
d|dddfW S  ty } zt	dt|ddfW  Y d }~S d }~ww )NdateopeningTimestrikes	occurTimeinitialCredit:   z:00SPXzoptionChain_$_z.csvz"/var/www/html/flask_project/chainssellCallbuyCallsellPutbuyPuterroru'   No se pudo calcular el crédito inicial)statusmessagei  d   c                 S   s*   g | ]}|d   d|d |d dqS )	timestamp%Y-%m-%d %H:%M:%Screditprofit_lossr   r   r    )strftime).0rec r%   ./var/www/html/backtestingmarket/neutralEdge.py
<listcomp>/   s    z log_intraday.<locals>.<listcomp>successr   u6   Crédito inicial y evolución calculados correctamente)r   r   chosen_timestamp	evolutionr      i  )r   get_jsongetlensplitospathjoinget_initial_creditr   floatget_credit_evolutionr"   	Exceptionstr)datadate_stropening_timer   
time_occurinitial_creditsymbolcsv_filenamecsv_pathr   r)   r*   evolution_serializableer%   r%   r&   log_intraday   sT   



"rB   c                    s:  t | }t |d |d< |d jj|d< t|d  ||d  k }|jsC|d  fdd|d< ||d |d 	 k }n|d  fdd|d< ||d |d 	 k }|j
d d }	d	d
 }
|
||dd}|
||dd}|
||dd}|
||dd}d ||||fv rd|	fS || ||  d }||	fS )Nr   	only_timez%H:%M:%Sc                    s    t t j| t t j   S N)r   combinemintotal_secondsttargetr%   r&   <lambda>K   s     z$get_initial_credit.<locals>.<lambda>	time_diffc                    s$   t ttj| ttj   S rD   )absr   rE   rF   rG   rH   rJ   r%   r&   rL   N   s   $ r   c                 S   sP   | | d t |k }|jrd S t |jd | t |jd | }}|| d S )Nstriker   r   )r4   emptyiloc)df_rowsrO   bid_colask_colrowbidaskr%   r%   r&   get_midS   s
   &z#get_initial_credit.<locals>.get_midbid_callask_callbid_putask_putr   )pdread_csvto_datetimedttimer   strptimerP   applyrF   rQ   )csv_filetarget_time	sell_callbuy_callsell_putbuy_putdfdf_afterchosen_rowsr)   rX   mid_sell_callmid_buy_callmid_sell_putmid_buy_putr   r%   rJ   r&   r3   C   s(   
r3   c                 C   s   t | }t |d |d< ||d |k }g }|dD ]\}	}
t|
||||}|d ur:|| }||	||d qt |}|d jddd |d< ||d  |d< |j	dd	S )
Nr   r!   r         )windowmin_periodsr    records)orient)
r]   r^   r_   groupbycompute_credit_for_groupappend	DataFramerollingmeanto_dict)rd   start_timestamprf   rg   rh   ri   r<   rj   r*   tsgroupr   r    df_evor%   r%   r&   r5   e   s   

r5   c                 C   s  dd }zf|| | d t |k d | | d t |k d }|| | d t |k d | | d t |k d }|| | d t |k d | | d t |k d }|| | d t |k d | | d t |k d }	W n
 tyt   Y d S w || ||	  d }
|
S )	Nc                 S   s    t | jd t |jd  d S )Nr   r   )r4   rQ   )
series_bid
series_askr%   r%   r&   rX   x   s    z)compute_credit_for_group.<locals>.get_midrO   rY   rZ   r[   r\   r   )r4   
IndexError)r   rf   rg   rh   ri   rX   rm   rn   ro   rp   r   r%   r%   r&   rx   w   s   2226rx   z/process_formc                  C   s"   t  } t| }t|jddS )NzProcesando...)task_idr   )r   r,   r   delayr   id)r8   taskr%   r%   r&   process_form   s   
r   z/task_status/<task_id>GETc                 C   sB   ddl m} || }|jdkrt|j|jdS t|jd dS )Nr   )aggregate_resultsSUCCESS)stateresult)neutralEdge_tasksr   AsyncResultr   r   r   )r   r   r   r%   r%   r&   task_status   s
   

r   )r0   pandasr]   flaskr   r   r   r   r   r   __name__neutralEdge_bprouterB   r3   r5   rx   r   r   r%   r%   r%   r&   <module>   s    
6"
