
    Bj
                    x    d dl mZ d dlmZ d dlmZ  ed           G d d                      ZddZddZdS )    )annotations)	dataclass)	BotConfigT)frozenc                  `    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   dS )PositionSizeDecisionstrcoinfloatsizenotional_usd
margin_usdrisk_usdstop_distance_pctleverage	capped_byN)__name__
__module____qualname____annotations__     position_sizing.pyr   r      sa         IIIKKKOOOOOONNNNNr   r   valuer   returnc                <    t          t          |           d          S )N   )roundr   )r   s    r   _round_moneyr      s    uq!!!r   r
   r	   current_pricer   r   cfgr   c                   |dk    rt          d          |dk    rt          d          |j                                                                        }t	          dt          |j                            }|dk    rt	          t          |j                  |          }t          | 	                                t          ||z            t          |          t          ||z            t          |t	          |d          z  dz            t          |          t          |          d          S t	          t          |          d	          }t	          dt          |j                  t          |j                  z  dz            }	|	dk    r|	|dz  z  n|}
t          |j                  t          |j                  z  dz  |z  }t          |j                  t          |j                  z  dz  }d|
fg}|dk    r|                    d
|f           |dk    r|                    d|f           t!          |d           \  }}t	          ||          }t          | 	                                t          ||z            t          |          t          ||z            t          ||z  dz            t          |          t          |          |          S )Nr   zcurrent_price must be positivezleverage must be positiveg        riskg      Y@fixed)r
   r   r   r   r   r   r   r   g{Gz?
margin_capnotional_capc                    | d         S )N   r   )items    r   <lambda>z)calculate_position_size.<locals>.<lambda>8   s
    tAw r   )key)
ValueErrorposition_sizing_modestriplowermaxr   min_order_notional_usdtrade_size_usdr   upperr   wallet_equity_usdcrisk_per_trade_pctmax_position_margin_pctmax_position_notional_pctappendmin)r
   r    r   r   r!   modemin_notionalnotionalstop_pctr   risk_notionalmargin_cap_notionalwallet_notional_capcap_candidatesr   s                  r   calculate_position_sizerB      s   9:::1}}4555#))++1133DsE#"<==>>Lv~~uS/00,??#h677%h//#Hx$788!(S1BC-H-H"H5"PQQ*+<==!(++	
 	
 	
 		
 5*++T22H3c455c>T8U8UUX]]^^H5=\\H5 011|M 677%@[:\:\\_ddgoo 677%@]:^:^^aff}-.NQ|-@ABBBQ~/BCDDDn2F2FGGGIx<**HZZ\\(]233!(++8 344h1E9::&x00h''	 	 	 	r   N)r   r   r   r   )r
   r	   r    r   r   r   r   r   r!   r   r   r   )	
__future__r   dataclassesr   configr   r   r   rB   r   r   r   <module>rF      s    " " " " " " ! ! ! ! ! !       $       " " " ", , , , , ,r   