
    pj%                    b    d Z ddlmZ ddlZddlmZ ddlmZ ddZddZ	dd	dd
Z
ddZddZy)z6IB connection lifecycle shared by all live strategies.    )annotationsN)Any)BrokerConfigc                p  K   	 ddl m}  |       }|j                  | j                  t        | j                        t        | j                        t        | j                               d {    |j                  t        | j                               |S # t        $ r}t        d      |d }~ww xY w7 Gw)Nr   )IBz(Install ib_insync: pip install ib_insync)clientIdtimeout)	ib_insyncr   ImportErrorconnectAsynchostintport	client_idfloatconnect_timeout_secreqMarketDataTypemarket_data_type)brokerr   eibs       5/opt/rentech/trading_bot/RenTech/live/ibkr_session.py
connect_ibr      s     M  
B
//FKKV%%&f001	     V4456I  MDE1LMs4   B6B A"B6,B4-*B6	B1 B,,B11B6c                Z   K   | % t        | dd              r| j                          y y y w)NisConnectedc                      y)NF r       r   <lambda>zdisconnect_ib.<locals>.<lambda>   s    r   )getattr
disconnect)r   s    r   disconnect_ibr"      s-     	~C'"m]CE
 F~s   )+g      ?)wait_secc               F  K   	 | j                          d{    t	        j
                  t        dt        |                   d{    y7 5# t        $ rD | j                  j                          t	        j
                  t        |             d{  7   Y yw xY w7 Ww)zMRequest positions without nesting ``ib._run`` inside an already-running loop.Ng      ?)reqPositionsAsync	ExceptionclientreqPositionsasynciosleepr   min)r   r#   s     r   ensure_positions_loadedr,   !   s~     ""$$$ --D%/2
333 	% 
		 mmE(O,,,	
 4sP   B!A AA +B!BB!A ABBBB!BB!c                t   K   	 | j                          d{   }t        |      S 7 # t        $ r Y yw xY ww)z6Lightweight health check (async-safe account summary).NF)accountSummaryAsyncboolr&   )r   valss     r   ping_accountr1   -   s<     ++--Dz . s(   8) ') 8) 	5858c                    	 | j                         }|ry	 	 | j                         }|ry	 y# t        $ r Y !w xY w# t        $ r Y yw xY w)z5True if IB reports any open trades or working orders.TF)
openTradesr&   
openOrders)r   open_tradesopen_orderss      r   has_pending_ordersr7   6   sg    mmo mmo      s   , ; 	88	AA)r   r   returnr   )r   r   r8   None)r   r   r#   r   r8   r9   )r   r   r8   r/   )__doc__
__future__r   r)   typingr   RenTech.live.platform_configr   r   r"   r,   r1   r7   r   r   r   <module>r>      s4    < "   5"
 AD 	4r   