
    tgj.                    f    S SK Jr  S SKJr  S SKJr  SSKJr  \ " S S5      5       r " S S	5      rg
)    )annotations)	dataclass)datetime   )Tickc                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rS
\S'   S	rS
\S'   S	rS
\S'   SrS\S'   S	r	S\S'   Sr
g	)PositionState	   strsymbolmarketfloatentry_pricequantity
stop_priceNzfloat | Nonetarget_pricetrailing_pcthighest_priceTAHANstatuszdatetime | None
updated_at )__name__
__module____qualname____firstlineno____annotations__r   r   r   r   r   __static_attributes__r       B/mnt/data/HANZ_v2.2_Realtime_Gateway/src/hanz_realtime/guardian.pyr	   r	   	   sO    KKO!%L,%!%L,%"&M<&FC"&J&r   r	   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
PortfolioGuardian   c                    0 U l         g )N	positions)selfs    r    __init__PortfolioGuardian.__init__   s	    ?Ar   c                    UR                   S::  a  [        S5      eUR                  S::  a  [        S5      eXR                  UR                  UR
                  4'   g )Nr   zentry_price must be positivezquantity must be positive)r   
ValueErrorr   r&   r   r   )r'   positions     r    add_positionPortfolioGuardian.add_position   sO    1$;<<!899=E9:r   c                $   U R                   R                  UR                  UR                  45      nUc  g UR                  Ul        [        UR                  =(       d    UR                  UR                  5      Ul        UR                  bK  UR                  (       a:  UR                  SUR                  S-  -
  -  n[        UR                  U5      Ul
        UR                  UR                  ::  a  SUl        UR                  $ UR                  b-  UR                  UR                  :  a  SUl        UR                  $ UR                  (       a0  UR                  UR                  S-  :  a  SUl        UR                  $ SUl        UR                  $ )Ng      ?g      Y@JUALLEPASgQ?r   )r&   getr   r   	timestampr   maxr   pricer   r   r   r   r   )r'   tickr,   dynamic_stops       r    on_tickPortfolioGuardian.on_tick"   sB   >>%%t{{DKK&@A"nn!$X%;%;%Itzz4::!V  ,1G1G#11S8;P;PSX;X5XYL"%h&9&9<"HH::,,,$HO  "".4::AVAV3V%HO  !!djj83G3G%3O&O%HO  &HOr   r%   N)returnNone)r,   r	   r:   r;   )r6   r   r:   z
str | None)r   r   r   r   r(   r-   r8   r   r   r   r    r"   r"      s    BFr   r"   N)	
__future__r   dataclassesr   r   modelsr   r	   r"   r   r   r    <module>r?      s4    " !   
' 
' 
'   r   