
    pjZ                    p    d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZ  e	d      Zd	Zdd
Zy)z?Build a normalized portfolio snapshot from Interactive Brokers.    )annotations)defaultdict)datetime)Any)ZoneInfo)PortfolioSnapshotPositionLegzAmerica/New_York)NetLiquidationAvailableFundsExcessLiquidityMaintMarginReqUnrealizedPnLRealizedPnLc                &  K   i }| j                          d {   }|D ]G  }|j                  dvr|j                  t        v s%	 t	        |j
                        ||j                  <   I |j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }	|d	k  rt        d
      g }
| j                         D ]H  }|j                  }t        t        |dd      xs d      }t        t        |dd      xs d      }t        t        |dd      xs d      }t	        t        |dd	      xs d	      }t        t        |dd      xs d      }t	        |j                        }t        |      dk  rt	        |j                   xs d	      }t	        t        |dd	      xs d	      }t	        t        |dd	      xs t        |dd	      xs d	      }|
j#                  t%        t'        |j(                        |||||||||
             K t+        t,              }|
D ]   }||j.                     j#                  |       " |d	kD  r
|d	kD  r||z  nd}t1        t3        j4                  t6              ||||||	t	        |      t9        |
      |j;                         D ci c]  \  }}|t9        |       c}}|      S 7 # t        t        f$ r Y w xY wc c}}w w)N)USDBASEr
   g        r   r   r   r   r   r   zDNetLiquidation (USD) missing or non-positive from IB account summarysymbol secTypelastTradeDateOrContractMonthstrikerightg&.>marketValueunrealizedPNLunrealizedPnL)
con_idr   sec_typeexpiryr   r   positionavg_costmarket_valueunrealized_pnl)as_ofnet_liquidation_usdavailable_funds_usdexcess_liquidity_usdmaintenance_margin_usdunrealized_pnl_usdrealized_pnl_today_usdmargin_utilization	positionspositions_by_symbolraw_account_tags)accountSummaryAsynccurrencytag_ACCOUNT_TAGSfloatvalue	TypeError
ValueErrorgetRuntimeErrorr+   contractstrgetattrr   absavgCostappendr	   intconIdr   listr   r   r   nowNYtupleitems)ibtagsvalsavnetavailexcessmaintupnlrpnllegspcsymsecexpr   r   posavgmvuplby_symlegmargin_utilkvs                              2/opt/rentech/trading_bot/RenTech/live/portfolio.pyfetch_portfolio_snapshotr_      s    D''))D ;;o-66]"$RXXRVV ((#S
)CHH%s+EXX'-FHH%s+E88OS)D88M3'D
axabb D\\^ 
JJ'!Xr*0b1'!Y+1r2'!;R@FBGwq(A.3!4GAw+1r2AJJs8d?AIIN#71mQ/415GA2YgaRS6TYXYZ177|"	

8 ,7t+<F 'szz!!#&' $'7uqy53;cKll2!#$# -+5;\\^DTQQa[D o * z* t Es@   LK2*L"K5'I+LL(L5LLL	LN)rE   r   returnr   )__doc__
__future__r   collectionsr   r   typingr   zoneinfor   RenTech.live.protocolsr   r	   rB   r1   r_        r^   <module>ri      s2    E " #    A !Erh   