pub struct PositionSizer { /* private fields */ }Expand description
Computes order sizes from margin + leverage + price + contract multiplier.
Returns 0 if any input is non-positive or the resulting size rounds
down to zero. Callers should treat 0 as “skip this trade — too small”.
§Example
use rustrade_risk::{PositionSizer, SizingConfig};
let sizer = PositionSizer::new(SizingConfig {
margin_per_trade: 500.0,
leverage: 5,
max_contracts: 100,
});
// 500 USDT * 5x leverage = 2500 USDT notional.
// At price 50_000 (BTC) with contract_value 0.001 BTC:
// contracts = floor(2500 / (50000 * 0.001)) = floor(50.0) = 50
assert_eq!(sizer.contracts(50_000.0, 0.001), 50);
// Capped at max_contracts when price is low enough to "afford" more.
assert_eq!(sizer.contracts(10.0, 0.001), 100);
// Zero on degenerate inputs.
assert_eq!(sizer.contracts(0.0, 0.001), 0);Implementations§
Source§impl PositionSizer
impl PositionSizer
Sourcepub fn new(config: SizingConfig) -> PositionSizer
pub fn new(config: SizingConfig) -> PositionSizer
Construct a sizer with the given SizingConfig.
Sourcepub fn contracts(&self, price: f64, contract_value: f64) -> u32
pub fn contracts(&self, price: f64, contract_value: f64) -> u32
Compute contract count for a trade.
price is the current mark or last-trade price in quote currency.
contract_value is the base-asset units per 1 contract (e.g. 0.001
for XBTUSDTM).
Sourcepub fn contracts_with_margin(
&self,
margin_usd: f64,
price: f64,
contract_value: f64,
) -> u32
pub fn contracts_with_margin( &self, margin_usd: f64, price: f64, contract_value: f64, ) -> u32
Same as Self::contracts but takes an explicit override for the
per-trade margin (used by brains that want to scale up/down based
on confidence or by the framework when honouring SizeHint::NotionalUsd).
Sourcepub fn config(&self) -> &SizingConfig
pub fn config(&self) -> &SizingConfig
Borrow the sizer’s underlying config.
Auto Trait Implementations§
impl Freeze for PositionSizer
impl RefUnwindSafe for PositionSizer
impl Send for PositionSizer
impl Sync for PositionSizer
impl Unpin for PositionSizer
impl UnsafeUnpin for PositionSizer
impl UnwindSafe for PositionSizer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more