
    T>qjB                     T   d Z ddlZddlmZmZ ddlmZmZm	Z	 ddl
mZ e G d d             Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z G d# d$e      Ze G d% d&             Ze G d' d(             Z G d) d*e      Ze G d+ d,             Ze G d- d.             Z e G d/ d0             Z!y)1z7Financial instrument types used by Interactive Brokers.    N)	dataclassfield)List
NamedTupleOptionalc                   x   e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<    ee      Zed   ed<   dZe d   ed<   e!d$d       Z"defd Z#d! Z$d" Z%d# Z&e&Z'y)%Contracta.  
    ``Contract(**kwargs)`` can create any contract using keyword
    arguments. To simplify working with contracts, there are also more
    specialized contracts that take optional positional arguments.
    Some examples::

        Contract(conId=270639)
        Stock('AMD', 'SMART', 'USD')
        Stock('INTC', 'SMART', 'USD', primaryExchange='NASDAQ')
        Forex('EURUSD')
        CFD('IBUS30')
        Future('ES', '20180921', 'GLOBEX')
        Option('SPY', '20170721', 240, 'C', 'SMART')
        Bond(secIdType='ISIN', secId='US03076KAA60')
        Crypto('BTC', 'PAXOS', 'USD')

    Args:
        conId (int): The unique IB contract identifier.
        symbol (str): The contract (or its underlying) symbol.
        secType (str): The security type:

            * 'STK' = Stock (or ETF)
            * 'OPT' = Option
            * 'FUT' = Future
            * 'IND' = Index
            * 'FOP' = Futures option
            * 'CASH' = Forex pair
            * 'CFD' = CFD
            * 'BAG' = Combo
            * 'WAR' = Warrant
            * 'BOND' = Bond
            * 'CMDTY' = Commodity
            * 'NEWS' = News
            * 'FUND' = Mutual fund
            * 'CRYPTO' = Crypto currency
            * 'EVENT' = Bet on an event
        lastTradeDateOrContractMonth (str): The contract's last trading
            day or contract month (for Options and Futures).
            Strings with format YYYYMM will be interpreted as the
            Contract Month whereas YYYYMMDD will be interpreted as
            Last Trading Day.
        strike (float): The option's strike price.
        right (str): Put or Call.
            Valid values are 'P', 'PUT', 'C', 'CALL', or '' for non-options.
        multiplier (str): The instrument's multiplier (i.e. options, futures).
        exchange (str): The destination exchange.
        currency (str): The underlying's currency.
        localSymbol (str): The contract's symbol within its primary exchange.
            For options, this will be the OCC symbol.
        primaryExchange (str): The contract's primary exchange.
            For smart routed contracts, used to define contract in case
            of ambiguity. Should be defined as native exchange of contract,
            e.g. ISLAND for MSFT. For exchanges which contain a period in name,
            will only be part of exchange name prior to period, i.e. ENEXT
            for ENEXT.BE.
        tradingClass (str): The trading class name for this contract.
            Available in TWS contract description window as well.
            For example, GBL Dec '13 future's trading class is "FGBL".
        includeExpired (bool): If set to true, contract details requests
            and historical data queries can be performed pertaining to
            expired futures contracts. Expired options or other instrument
            types are not available.
        secIdType (str): Security identifier type. Examples for Apple:

                * secIdType='ISIN', secId='US0378331005'
                * secIdType='CUSIP', secId='037833100'
        secId (str): Security identifier.
        comboLegsDescription (str): Description of the combo legs.
        comboLegs (List[ComboLeg]): The legs of a combined contract definition.
        deltaNeutralContract (DeltaNeutralContract): Delta and underlying
            price for Delta-Neutral combo orders.
     secTyper   conIdsymbollastTradeDateOrContractMonth        strikeright
multiplierexchangeprimaryExchangecurrencylocalSymboltradingClassFincludeExpired	secIdTypesecIddescriptionissuerIdcomboLegsDescripdefault_factoryComboLeg	comboLegsNDeltaNeutralContractdeltaNeutralContractreturnc                     | j                  dd      }i dt        dt        dt        dt        dt
        dt        dt        d	t        d
t        dt        dt        dt        dt        dt        dt        dt        dt        dt        ij                  |t              }|t        ur| j!                  dd        |di | S )z
        Create and a return a specialized contract based on the given secType,
        or a general Contract if secType is not given.
        r   r
   STKOPTFUTCONTFUTCASHINDCFDBONDCMDTYFOPFUNDWARIOPTBAGCRYPTONEWSEVENT )getr	   StockOptionFuture
ContFutureForexIndexr,   Bond	CommodityFuturesOption
MutualFundWarrantBagCryptopop)kwargsr   clss      Q/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/ib_insync/contract.pycreatezContract.createj   s$    **Y+

5
 6
 6	

 z
 E
 5
 3
 D
 Y
 =
 J
 7
 G
 3
  f!
" H#
$ X%
& #gx
 ' 	( hJJy"%}V}    c                 p    t        | j                  xr  | j                  dk7  xr | j                  dk7        S )z
        See if this contract can be hashed by conId.

        Note: Bag contracts always get conId=28812380, so they're not hashable.
        i\r3   )boolr   r   selfs    rI   
isHashablezContract.isHashable   s9     JJ &4::1 &%' 	'rK   c                     t        |t              xrT | j                  xr | j                  |j                  k(  xs+ t        j                  |       t        j                  |      k(  S N)
isinstancer	   r   utildataclassAsDict)rO   others     rI   __eq__zContract.__eq__   sU    uh' N

8tzzU[[8 M''-1E1Ee1LL		OrK   c                     | j                         st        d|  d      | j                  dk(  r| j                   }|S | j                  }|S )Nz	Contract z can't be hashedr)   )rP   
ValueErrorr   r   )rO   hs     rI   __hash__zContract.__hash__   sO     y.?@AA<<9$A  

ArK   c                     t        j                  |       }| j                  t        ur|j	                  dd       | j                  j
                  }dj                  d |j                         D              }| d| dS )Nr   r
   , c              3   0   K   | ]  \  }}| d |  yw=Nr7   .0kvs      rI   	<genexpr>z$Contract.__repr__.<locals>.<genexpr>   s     BDAqaS!<B   ())rT   dataclassNonDefaults	__class__r	   rF   __qualname__joinitems)rO   attrsclsNamerG   s       rI   __repr__zContract.__repr__   sh    ))$/>>)IIi$..--BEKKMBB!F81%%rK   )r$   r	   )(__name__
__module__rk   __doc__r   str__annotations__r   intr   r   r   floatr   r   r   r   r   r   r   r   rM   r   r   r   r   r   r   listr!   r   r#   r   staticmethodrJ   rP   rW   r[   rp   __str__r7   rK   rI   r	   r	   
   s   GR GSE3NFC(* #*FEE3OJHcOSHcKL# ND IsE3OKHcc"'"=ItJ==A(#9:A <'D 'O& GrK   r	   c                   $    e Zd Z	 ddededefdZy)r9   r   r   r   c                 :    t        j                  | fd|||d| y)z
        Stock contract.

        Args:
            symbol: Symbol name.
            exchange: Destination exchange.
            currency: Underlying currency.
        r&   r   r   r   r   Nr	   __init__rO   r   r   r   rG   s        rI   r   zStock.__init__   s,     		<	<4:	<rK   Nr
   r
   r
   rq   rr   rk   rt   r   r7   rK   rI   r9   r9      &     IK<<.1<BE<rK   r9   c                   8    e Zd Z	 	 	 d
dededededededefdZy	)r:   r   r   r   r   r   r   r   c                 B    t        j                  | df|||||||d| y)aN  
        Option contract.

        Args:
            symbol: Symbol name.
            lastTradeDateOrContractMonth: The option's last trading day
                or contract month.

                * YYYYMM format: To specify last month
                * YYYYMMDD format: To specify last trading day
            strike: The option's strike price.
            right: Put or call option.
                Valid values are 'P', 'PUT', 'C' or 'CALL'.
            exchange: Destination exchange.
            multiplier: The contract multiplier.
            currency: Underlying currency.
        r'   r   r   r   r   r   r   r   Nr~   	rO   r   r   r   r   r   r   r   rG   s	            rI   r   zOption.__init__   ;    * 	%	@ &)E!H		@ 9?		@rK   Nr
   r
   r   r
   r
   r
   r
   rq   rr   rk   rt   rw   r   r7   rK   rI   r:   r:      X     IKBD24@@BE@@(+@<?@ @ -0@rK   r:   c                   4    e Zd Z	 	 	 d	dedededededefdZy)
r;   r   r   r   r   r   r   c           
      @    t        j                  | df||||||d| y)a  
        Future contract.

        Args:
            symbol: Symbol name.
            lastTradeDateOrContractMonth: The option's last trading day
                or contract month.

                * YYYYMM format: To specify last month
                * YYYYMMDD format: To specify last trading day
            exchange: Destination exchange.
            localSymbol: The contract's symbol within its primary exchange.
            multiplier: The contract multiplier.
            currency: Underlying currency.
        r(   )r   r   r   r   r   r   Nr~   )rO   r   r   r   r   r   r   rG   s           rI   r   zFuture.__init__   s9    & 	%	@ &)E;!H		@ 9?		@rK   N)r
   r
   r
   r
   r
   r
   r   r7   rK   rI   r;   r;      sM     IKIK@@BE@@-0@CF@ @rK   r;   c                   .    e Zd Z	 	 ddededededef
dZy)	r<   r   r   r   r   r   c           	      >    t        j                  | df|||||d| y)a1  
        Continuous future contract.

        Args:
            symbol: Symbol name.
            exchange: Destination exchange.
            localSymbol: The contract's symbol within its primary exchange.
            multiplier: The contract multiplier.
            currency: Underlying currency.
        r)   )r   r   r   r   r   Nr~   )rO   r   r   r   r   r   rG   s          rI   r   zContFuture.__init__   s6     	)	@$*;!H	@ 9?	@rK   N)r
   r
   r
   r
   r
   r   r7   rK   rI   r<   r<      s?     LN24@@.1@EH@@,/@rK   r<   c            	       @    e Zd Z	 	 d
dedededefdZd ZeZdefdZy	)r=   pairr   r   r   c                     |r"t        |      dk(  sJ |xs |dd }|xs |dd }t        j                  | df|||d| y)a  
        Foreign exchange currency pair.

        Args:
            pair: Shortcut for specifying symbol and currency, like 'EURUSD'.
            exchange: Destination exchange.
            symbol: Base currency.
            currency: Quote currency.
           N   r*   r   r   r   )lenr	   r   )rO   r   r   r   r   rG   s         rI   r   zForex.__init__  s_     t9>!>'tBQxF+48H&	<!'	<4:	<rK   c                 0   t        j                  |       }|j                  d       d}d|v r;d|v r7|j                  d      }||j                  d      z  }|d|z   dz   |rdndz   z  }|dj                  d |j	                         D              z  }|d	z  }|S )
Nr   zForex(r   r   'r]   r
   c              3   0   K   | ]  \  }}| d |  ywr_   r7   ra   s      rI   re   z!Forex.__repr__.<locals>.<genexpr>.  s     >1!AaU|>rf   rh   )rT   ri   rF   rl   rm   )rO   rn   sr   s       rI   rp   zForex.__repr__&  s    ))$/		)uu!499X&DEIIj))Dtc!UT;;A	TYY>>>>	SrK   r$   c                 4    | j                   | j                  z   S )zShort name of pair.)r   r   rN   s    rI   r   z
Forex.pair4  s    {{T]]**rK   N)r
   IDEALPROr
   r
   )rq   rr   rk   rt   r   rp   rz   r   r7   rK   rI   r=   r=     sG     3=.0<<,/<<(+<(
 G+c +rK   r=   c                   $    e Zd Z	 ddededefdZy)r>   r   r   r   c                 :    t        j                  | df|||d| y)z
        Index.

        Args:
            symbol: Symbol name.
            exchange: Destination exchange.
            currency: Underlying currency.
        r+   r   Nr~   r   s        rI   r   zIndex.__init__;  ,     	%	< &	<4:	<rK   Nr   r   r7   rK   rI   r>   r>   9  r   rK   r>   c                   $    e Zd Z	 ddededefdZy)r,   r   r   r   c                 :    t        j                  | df|||d| y)z
        Contract For Difference.

        Args:
            symbol: Symbol name.
            exchange: Destination exchange.
            currency: Underlying currency.
        r,   r   Nr~   r   s        rI   r   zCFD.__init__M  r   rK   Nr   r   r7   rK   rI   r,   r,   K  r   rK   r,   c                   $    e Zd Z	 ddededefdZy)r@   r   r   r   c                 :    t        j                  | df|||d| y)z
        Commodity.

        Args:
            symbol: Symbol name.
            exchange: Destination exchange.
            currency: Underlying currency.
        r.   r   Nr~   r   s        rI   r   zCommodity.__init___  s,     	'	<"(	<4:	<rK   Nr   r   r7   rK   rI   r@   r@   ]  r   rK   r@   c                       e Zd Zd Zy)r?   c                 2    t        j                  | dfi | y)zBond.r-   Nr~   rO   rG   s     rI   r   zBond.__init__q      $1&1rK   Nrq   rr   rk   r   r7   rK   rI   r?   r?   o      2rK   r?   c                   8    e Zd Z	 	 	 d
dededededededefdZy	)rA   r   r   r   r   r   r   r   c                 B    t        j                  | df|||||||d| y)a[  
        Option on a futures contract.

        Args:
            symbol: Symbol name.
            lastTradeDateOrContractMonth: The option's last trading day
                or contract month.

                * YYYYMM format: To specify last month
                * YYYYMMDD format: To specify last trading day
            strike: The option's strike price.
            right: Put or call option.
                Valid values are 'P', 'PUT', 'C' or 'CALL'.
            exchange: Destination exchange.
            multiplier: The contract multiplier.
            currency: Underlying currency.
        r/   r   Nr~   r   s	            rI   r   zFuturesOption.__init__x  r   rK   Nr   r   r7   rK   rI   rA   rA   v  r   rK   rA   c                       e Zd Zd Zy)rB   c                 2    t        j                  | dfi | y)zMutual fund.r0   Nr~   r   s     rI   r   zMutualFund.__init__  r   rK   Nr   r7   rK   rI   rB   rB     r   rK   rB   c                       e Zd Zd Zy)rC   c                 2    t        j                  | dfi | y)zWarrant option.r1   Nr~   r   s     rI   r   zWarrant.__init__      $00rK   Nr   r7   rK   rI   rC   rC         1rK   rC   c                       e Zd Zd Zy)rD   c                 2    t        j                  | dfi | y)zBag contract.r3   Nr~   r   s     rI   r   zBag.__init__  r   rK   Nr   r7   rK   rI   rD   rD     r   rK   rD   c                   $    e Zd Z	 ddededefdZy)rE   r   r   r   c                 :    t        j                  | fd|||d| y)z
        Crypto currency contract.

        Args:
            symbol: Symbol name.
            exchange: Destination exchange.
            currency: Underlying currency.
        r4   r}   Nr~   r   s        rI   r   zCrypto.__init__  s,     		<"6	<4:	<rK   Nr   r   r7   rK   rI   rE   rE     r   rK   rE   c                   "    e Zd ZU eed<   eed<   y)TagValuetagvalueN)rq   rr   rk   rt   ru   r7   rK   rI   r   r     s    	HJrK   r   c                   ~    e Zd ZU dZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed<   dZeed	<   d
Zeed<   y)r    r   r   ratior
   actionr   	openCloseshortSaleSlotdesignatedLocation
exemptCodeN)rq   rr   rk   r   rv   ru   r   r   rt   r   r   r   r   r   r7   rK   rI   r    r      sQ    E3NE3NFCHcIsM3  JrK   r    c                   8    e Zd ZU dZeed<   dZeed<   dZeed<   y)r"   r   r   r   deltapriceN)	rq   rr   rk   r   rv   ru   r   rw   r   r7   rK   rI   r"   r"     s    E3NE5E5rK   r"   c                   J    e Zd ZU ej                  ed<   ej                  ed<   y)TradingSessionstartendN)rq   rr   rk   dtdatetimeru   r7   rK   rI   r   r     s    ;;	rK   r   c                      e Zd ZU dZee   ed<   dZeed<   dZ	e
ed<   dZeed<   dZeed<   d	Zeed
<   d	Zeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   d	Zeed<   dZeed<   d	Zeed<   dZeed<   dZeed<   dZeed<    ee       Z!e"e#   ed<   dZ$eed<   dZ%eed<   dZ&eed <   dZ'e
ed!<   dZ(e
ed"<   dZ)e
ed#<   dZ*eed$<   dZ+eed%<   dZ,eed&<   dZ-eed'<   dZ.eed(<   d)Z/e0ed*<   d)Z1e0ed+<   d	Z2e
ed,<   d)Z3e0ed-<   dZ4eed.<   dZ5eed/<   dZ6eed0<   dZ7eed1<   d)Z8e0ed2<   dZ9eed3<   d4e"e:   fd5Z;d4e"e:   fd6Z<d7ed4e"e:   fd8Z=y)9ContractDetailsNcontractr
   
marketNamer   minTick
orderTypesvalidExchangesr   priceMagnifier
underConIdlongNamecontractMonthindustrycategorysubcategory
timeZoneIdtradingHoursliquidHoursevRuleevMultiplier   mdSizeMultiplieraggGroupunderSymbolunderSecTypemarketRuleIdsr   	secIdListrealExpirationDatelastTradeTime	stockTypeminSizesizeIncrementsuggestedSizeIncrementcusipratings
descAppendbondType
couponTypeFcallableputablecouponconvertiblematurity	issueDatenextOptionDatenextOptionTypenextOptionPartialnotesr$   c                 8    | j                  | j                        S rR   )_parseSessionsr   rN   s    rI   tradingSessionszContractDetails.tradingSessions  s    ""4#4#455rK   c                 8    | j                  | j                        S rR   )r   r   rN   s    rI   liquidSessionszContractDetails.liquidSessions  s    ""4#3#344rK   r   c                 P   t        j                  | j                        }g }|j                  d      D ]k  }|rd|v r
|j	                  t        |j                  d      D cg c]2  }t        j                  j                  |d      j                  |      4 c}        m |S c c}w )N;CLOSED-z%Y%m%d:%H%M)tzinfo)
rT   ZoneInfor   splitappendr   r   r   strptimereplace)rO   r   tzsessionssessts         rI   r   zContractDetails._parseSessions  s    ]]4??+GGCL 	,D8t+OONC-* $$Q6>>b>I-* + ,	, -*s    7B#)>rq   rr   rk   r   r   r	   ru   r   rt   r   rw   r   r   r   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   rK   rI   r   r     s   #'Hhx 'JGUJNCNCJHcM3HcHcKJL#KFCL#cHcKL#M3 %d ;ItH~;  M3IsGUM5$'E'E3OGSJHcJHdGTFEKHcIsNCNC#t#E3O6n!5 65^ 4 5	 	^(< 	rK   r   c                   D    e Zd ZU dZee   ed<    ee      Z	e
e   ed<   y)ContractDescriptionNr   r   derivativeSecTypes)rq   rr   rk   r   r   r	   ru   r   rx   r  r   rt   r7   rK   rI   r  r    s%    #'Hhx '$)$$?S	?rK   r  c                   J    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   y)ScanDatarankcontractDetailsdistance	benchmark
projectionlegsStrN)rq   rr   rk   rv   ru   r   rt   r7   rK   rI   r  r     s!    
I$$MNOLrK   r  )"rs   r   r   dataclassesr   r   typingr   r   r   ib_insync.utilrT   r	   r9   r:   r;   r<   r=   r>   r,   r@   r?   rA   rB   rC   rD   rE   r   r    r"   r   r   r  r  r7   rK   rI   <module>r     s~   =  ( - -  a a aH<H <$@X @<@X @8@ @*&+H &+R<H <$<( <$< <$28 2@H @<2 21h 11( 1<X <$z 
      Z 
 > > >B @ @ @
   rK   