
    Vj                    l    d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	 e G d d                      Z
dS )    )annotationsN)	dataclassfield)Path)Anyc                      e Zd ZU ded<    ee          Zded<    ee          Zded<    ee          Z	ded	<   d#dZ
d#dZd#dZed$d            Zd%dZd&d'dZd(d!Zd)d"ZdS )*PaperExchanger   
state_path)default_factoryzdict[str, dict[str, Any]]	positionslist[dict[str, Any]]orderszdict[str, float]leveragereturnNonec                    t          | j                                                  | _        |                                  d S )N)r   r
   
expanduser_loadselfs    paper_trading.py__post_init__zPaperExchange.__post_init__   s0    t//::<<

    c                8   | j                                         sd S t          j        | j                             d                    }|                    di           | _        |                    dg           | _        |                    di           | _        d S )Nutf-8encodingr   r   r   )	r
   existsjsonloads	read_textgetr   r   r   )r   datas     r   r   zPaperExchange._load   s    %%'' 	Fz$/33W3EEFF+r22hhx,,R00r   c                    | j         j                            dd           | j                             t	          j        | j        | j        | j        ddd          d           d S )NT)parentsexist_ok)r   r   r      )indent	sort_keysr   r   )	r
   parentmkdir
write_textr   dumpsr   r   r   r   s    r   _savezPaperExchange._save   s    $$TD$AAA""4:k/
 /
 t	$% $% $% 07	 	# 	8 	8 	8 	8 	8r   symbolstrc                8    |                      d          d         S )N/r   )split)r/   s    r   _coinzPaperExchange._coin$   s    ||C  ##r   int | floatdict[str, Any]c                h    t          |          | j        |<   |                                  ddd||dS )NokTset_leverage)statuspaperactionr/   r   )floatr   r.   )r   r   r/   s      r   r9   zPaperExchange.set_leverage(   s7     %hf

SYgopppr   N
order_typesideamountr=   pricefloat | Noneparamsdict[str, Any] | Nonec           	        |t          d          |pi }|                     |          }|dk    rt          |          nt          |           }| j                            |dddd          }	t          |	                    dd                    }
|
|z   }t          |          dk     rd}|dk    rd}d}n|
dk    s|
dk    |dk    k    rt          |          }|dk    rdnd	}nmt          |	                    d
|                    t          |
          z  t          |          t          |          z  z   t          |          z  }|dk    rdnd	}t          |          |||d|dk    ri n#t          |                    d          pi           | j        |<   dd|||t          |          t          |          |d}| j                            |           | 	                                 |S )Nu.   PaperExchange benötigt einen expliziten Preisbuy        long)	contracts
entryPricer?   rI   g-q=r   shortrJ   )rI   rJ   r?   r/   paper_position_stater8   T)r:   r;   r/   typer?   r@   rA   rC   )

ValueErrorr4   r=   r   r"   absdictr   appendr.   )r   r/   r>   r?   r@   rA   rC   coinsigned_amountcurrentold_contractsnew_contractsentry_pricepos_sideorders                  r   create_orderzPaperExchange.create_order-   sN   =MNNN2zz&!!)-fU6]]N.$$TCY_+`+`aagkk+s;;<<%5}%%MCKHHc!!ma&7]Q=N%O%O,,K!.!2!2vvHH!'++lE"B"BCCc-FXFXX]bch]i]ilop}l~l~]~  DG  HU  DV  DV  VK!.!2!2vvH ]++%	 
  

 #c))rrtFJJ?U4V4V4\Z\/]/] 
t  $&*^bnstzn{n{  GL  MR  GS  GS  _e  f  f5!!!

r   rR   metadatac                   |                                 }|| j        v rht          | j        |                             dd                    dk    r8| j        |                             |           |                                  d S d S d S )NrI   rG   r   )upperr   r=   r"   updater.   )r   rR   r[   s      r   update_position_statez#PaperExchange.update_position_stateN   s    zz||4>!!eDN4,@,D,D[RU,V,V&W&WZ[&[&[N4 ''111JJLLLLL "!&[&[r   c           
        g }t          | j                                                  D ]\  }}t          |                    dd                    }|dk    r/|                    d          p| d}||t          |                    dd                    t          | j                            |d                    |                    dd          d	}d
D ]}||v r||         ||<   |                    |           |S )NrI   rG   r/   z
/USDC:USDCrJ      r?   rH   )r/   rI   rJ   r   r?   )entryTs	highPriceatrSlPxbeActivetrailingActive)sortedr   itemsr=   r"   intr   rQ   )r   r   rR   posrI   r/   rowkeys           r   fetch_positionszPaperExchange.fetch_positionsT   s   	 4 4 6 677 	" 	"ID#cggk37788ICWWX&&=T*=*=*=F &#CGGL#$>$>?? 1 1&! < <==// C Y ( (#::"3xCHS!!!!r   )r   r   )r/   r0   r   r0   )r   r5   r/   r0   r   r6   )NN)r/   r0   r>   r0   r?   r0   r@   r=   rA   rB   rC   rD   r   r6   )rR   r0   r[   r6   r   r   )r   r   )__name__
__module____qualname____annotations__r   rP   r   listr   r   r   r   r.   staticmethodr4   r9   rZ   r_   rm    r   r   r	   r	   	   s2        +05+F+F+FIFFFF#(5#>#>#>F>>>>!&t!<!<!<H<<<<   1 1 1 18 8 8 8 $ $ $ \$q q q q
    B        r   r	   )
__future__r   r   dataclassesr   r   pathlibr   typingr   r	   rt   r   r   <module>ry      s    " " " " " "  ( ( ( ( ( ( ( (             \ \ \ \ \ \ \ \ \ \r   