
    pjg	                    x    d Z ddlmZ ddlmZ ddlZddlmZ dddd		 	 	 	 	 	 	 	 	 	 	 dd
Z	dd	 	 	 	 	 	 	 ddZ
y)zBHistorical daily bars from IBKR for live sleeve signal generation.    )annotations)AnyN) _compute_daily_backtest_featuresz2 YSMARTUSD)duration_strexchangecurrencyc          	       K   ddl m}  |t        |      j                         t        |      t        |            }| j	                  |       d{   }|st        d|      | j                  |dt        |      dddd	
       d{   }t        |      dk  r | j                  |dddddd	
       d{   }|st        d|      t        j                  |D 	cg c]7  }	t        j                  |	j                        t        |	j                        d9 c}	      }
|
j                  d      j                         }
t!        |
      S 7 7 7 c c}	w w)ze
    Return panel with ``close``, ``ret``, ``sma_200``, ``aqr_mom`` (same as backtest features).
    r   )StockNz"IB could not qualify contract for  z1 dayTRADEST   )endDateTimedurationStrbarSizeSetting
whatToShowuseRTH
formatDate   z1 YzNo historical bars for )datecloser   )	ib_insyncr   strupperqualifyContractsAsyncRuntimeErrorreqHistoricalDataAsynclenpd	DataFrame	Timestampr   floatr   	set_index
sort_indexr   )ibsymbolr   r	   r
   r   contract	qualifiedbarsbdfs              9/opt/rentech/trading_bot/RenTech/live/ibkr_market_data.pyfetch_daily_barsr.      s_      S[&&(#h-XGH..x88I?zJKK**% +  D 4y3.." / 
 
 4VJ?@@	 	

  QVV,qww	

B 
f		(	(	*B+B//I 9
	
sH   AEE8E	E
-E7E8'E<E2EEEEr   c          
       K   i }g }|D ]<  }	 t        | ||       d{   ||<   t        d| dt        ||          dd       > |rDt        |      t        d
t        |      dz        k  r t        ddj                  |dd       z         |S 7 q# t        $ r4}|j	                  | d|        t        d| d| d	d       Y d}~d}~ww xY ww)z4Fetch each symbol sequentially (IB pacing-friendly).r/   Nz  [IB bars] z: z	 sessionsT)flushz
: FAILED ()r      zToo many IB bar failures: z;    )r.   printr   	Exceptionappendmaxr   join)r&   symbolsr   outerrorssymes          r-   fetch_daily_panelr?   A   s      $&CF B	B-b#LQQCHLRCHi@MB #c(SCLA$5667$))F2AJ:OOPPJ R 	BMMSEA3-(LZs!4DAA	Bs?   
CBB'BA
CB	C*C
C
CC)r&   r   r'   r   r   r   r	   r   r
   r   returnzpd.DataFrame)r&   r   r:   z	list[str]r   r   r@   zdict[str, pd.DataFrame])__doc__
__future__r   typingr   pandasr    RenTech.strategy_stack.mainr   r.   r?        r-   <module>rH      s    H "   H 202020 	20
 20 20 20r 	 	
 rG   