o
    Hi                     @   s   d dl Zd dlmZmZ d dlZd dlmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ ed	Zeej G d
d	 d	ZdS )    N)datetime	timedelta)DictList   )DataFetcher)IndicatorCalculator)DivergenceDetector)StrategyEvaluatorTradingEnginec                   @   s   e Zd Zg dZejejejejdZ	dddZ
ddedee defd	d
Zddedee defddZdd ZddedefddZdedee fddZdedefddZdS )r   )5min15min30min1hday)momentumvwap_pullbackema_crossoverrsi_volume_reversalNc                 C   s   t || _|| _d S N)r   data_fetcher
db_manager)selfzerodha_clientr    r   </var/www/html/Trade-python/app/v1/services/zerodha/engine.py__init__   s   

zTradingEngine.__init__symbol
timeframesreturnc                 C   s  t d| d |d u r| j}| j||}i }| D ]#\}}t|}t|\|d< |d< |||< |dv r@t	|||< qt
||}|d}|d urUt|nd }	|d ur`t|nd }
| jj|ddd}|jst|d	  nd
}|js|d  nd
}||d |dd|d ur|d jd nd
|dd
|dr|dg d
 nd
|drt|d dkr|dg d nd
|d |	pd|
pdd|||dt  d}| jr| j| |S )N
Analyzing z with multi-timeframe strategy
supertrendsupertrend_direction)r   r   weekmonthr   im  )	days_backhighr   lowsignalstrategy_namezMulti-Timeframeclose	stop_losstargetsr   
confidenceNoneRSIMACDReady)r   decisionstrategyentry_pricer,   target_1target_2confidence_score
divergencepivotsyearly_high
yearly_lowstatus	timestamp)loggerinfo
TIMEFRAMESr   fetch_multi_timeframeitemsr   add_all_indicatorscalculate_supertrendcalculate_pivot_pointsr
   analyze_multi_timeframegetr	   detect_rsi_divergencedetect_macd_divergence
fetch_ohlcemptymaxminiloclenr   now	isoformatr   save_signal)r   r   r   timeframe_datar;   tfdfstrategy_resultdaily_dfrsi_divmacd_div	yearly_dfr<   r=   signal_datar   r   r   analyze_symbol   sN   



,
zTradingEngine.analyze_symbolc                 C   s  t d|  |du r| j}| j||}| D ]\}}t|||< q|d}|du s2|j	r?t 
d|  | |S |d jd }g }| j D ]\}	}
|
|}|	|d< || qMdd	d
}|D ]}|d |d krr|}qft|}t|}||d |dd||d|d |dr|dg d	 n|d |drt|d dkr|dg d n|d |d |pd|pdddt  d}| jr| j| |S )z*Full analysis pipeline for a single symbolr    Nr   zNo daily data for r*   r+   r)   HOLDr   )r(   r.   r.   r(   r   r,   g
ףp=
?r-   g{Gz?r   g(\?r/   r0   r3   r   r4   r5   r6   r,   r7   r8   r9   r:   r>   r?   )r@   rA   rB   r   rC   rD   r   rE   rI   rM   error_create_hold_signalrP   
STRATEGIESappendr	   rJ   rK   rQ   r   rR   rS   r   rT   )r   r   r   rU   rV   rW   rY   current_closestrategy_resultsnamer5   resultbest_signalrZ   r[   r]   r   r   r   analyze_symbol_oldU   sP   





 0
z TradingEngine.analyze_symbol_oldc                 C   s*   |dddddddddddt   dS )Nr_   z	No signalr   r/   r0   zNo datar`   )r   rR   rS   )r   r   r   r   r   rb      s   
z!TradingEngine._create_hold_signalFuser_id
auto_tradec           	      C   s   t d|  | |}g }|D ]G}z$|d }| |}|| |r6|d dv r6|d dkr6| || W q tyX } zt d|d  dt|  W Y d	}~qd	}~ww |S )
zFull daily execution pipelinez Running daily pipeline for user r   r4   )BUYSELLr9   P   zError processing z: N)	r@   rA   _get_user_portfolior^   rd   execute_order	Exceptionra   str)	r   rk   rl   	portfoliosignalsitemr   r(   er   r   r   execute_daily_pipeline   s    


*z$TradingEngine.execute_daily_pipelinec                 C   s   ddiddigS )z"Fetch user portfolio from databaser   RELIANCETCSr   )r   rk   r   r   r   rp      s   z!TradingEngine._get_user_portfolior(   c                 C   s   dS )z6Execute order through Zerodha API with risk managementNr   )r   r(   rk   r   r   r   rq      s   zTradingEngine.execute_orderr   )F)__name__
__module____qualname__rB   r
   strategy_momentumstrategy_vwap_pullbackstrategy_ema_crossoverstrategy_rsi_volume_reversalrc   r   rs   r   dictr^   rj   rb   boolrx   r   rp   rq   r   r   r   r   r      s    
;>)pandaspdr   r   loggingtypingr   r   r   r   
indicatorsr   r:   r	   
strategiesr
   	getLoggerr@   setLevelINFOr   r   r   r   r   <module>   s    
