a
    $Fwj.  ã                   @  sT   d dl mZ d dlmZ d dlmZ ddlmZ eG dd„ dƒƒZG dd	„ d	ƒZd
S )é    )Úannotations)Ú	dataclass)Údatetimeé   )ÚTickc                   @  sr   e Zd ZU ded< ded< ded< ded< ded< dZd	ed
< dZd	ed< dZd	ed< dZded< dZded< dS )Ú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__Ú__annotations__r   r   r   r   r   © r   r   ú:/home/opc/hanz-radar/runtime/src/hanz_realtime/guardian.pyr   	   s   
r   c                   @  s:   e Zd Zddœdd„Zdddœdd„Zd	d
dœdd„ZdS )ÚPortfolioGuardianÚNone)Úreturnc                 C  s
   i | _ d S )N)Ú	positions)Úselfr   r   r   Ú__init__   s    zPortfolioGuardian.__init__r   )Úpositionr   c                 C  s:   |j dkrtdƒ‚|jdkr$tdƒ‚|| j|j|jf< d S )Nr   zentry_price must be positivezquantity must be positive)r   Ú
ValueErrorr   r   r
   r	   )r   r!   r   r   r   Úadd_position   s
    

zPortfolioGuardian.add_positionr   z
str | None)Útickr   c                 C  sÌ   | j  |j|jf¡}|d u r d S |j|_t|jp4|j|jƒ|_|j	d urp|jrp|jd|j	d   }t|j
|ƒ|_
|j|j
kr„d|_nB|jd ur¢|j|jkr¢d|_n$|jrÀ|j|jd k rÀd|_nd|_|jS )Ng      ð?g      Y@ÚJUALÚLEPASg…ëQ¸…ï?r   )r   Úgetr
   r	   Ú	timestampr   Úmaxr   Úpricer   r   r   r   r   )r   r$   r!   Zdynamic_stopr   r   r   Úon_tick"   s     zPortfolioGuardian.on_tickN)r   r   r   r    r#   r+   r   r   r   r   r      s   r   N)	Ú
__future__r   Údataclassesr   r   Úmodelsr   r   r   r   r   r   r   Ú<module>   s   