
    g%j                    t    d dl mZ d dlmZ d dlmZmZ  ed           G d d                      ZddZdS )    )annotations)	dataclass)Decimal
ROUND_DOWNT)frozenc                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	PositionSizeDecisionr   sizenotional_usd
margin_usdrisk_usdstr	capped_byN)__name__
__module____qualname____annotations__     src/risk/position_sizer.pyr	   r	      sF         MMMNNNNNr   r	   wallet_equity_usdcr   risk_per_trade_pctstop_distance_pctleveragepricemax_position_margin_pctmax_position_notional_pctreturnc                   t          | ||||          dk    rt          d          | |z  t          d          z  }||t          d          z  z  }d}	| |z  t          d          z  |z  }
||
k    r|
}d}	| |z  t          d          z  }||k    r|}d}	||z  }||z                      t          d          t                    }t          |||||		          S )
Nr   zsizing inputs must be positive100risk
margin_capnotional_capz
0.00000001)rounding)r
   r   r   r   r   )min
ValueErrorr   quantizer   r	   )r   r   r   r   r   r   r   r   notionalr   margin_cap_notionalr#   marginr
   s                 r   calculate_risk_position_sizer+      s   
13DhPUVVZ[[[9:::!$66GH,wu~~=>HI,/FFQVWZbb%%%& 	%(AAGENNRL,"	 Fu&&w|'<'<z&RRDTV^fr{||||r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   )	
__future__r   dataclassesr   decimalr   r   r	   r+   r   r   r   <module>r/      s    " " " " " " ! ! ! ! ! ! ' ' ' ' ' ' ' ' $       } } } } } }r   