openpine_vm/strategy/
commission_type.rs

1use openpine_macros::Enum;
2use serde::{Deserialize, Serialize};
3
4/// Strategy commission calculation mode.
5#[derive(Debug, Copy, Clone, Eq, PartialEq, Enum, Serialize, Deserialize)]
6pub enum CommissionType {
7    /// Commission as a percentage of trade value.
8    Percent,
9    /// Fixed cash commission per contract.
10    CashPerContract,
11    /// Fixed cash commission per order.
12    CashPerOrder,
13}
14
15impl CommissionType {
16    /// Apply commission to the price and quantity.
17    #[inline]
18    pub(crate) fn apply(&self, commission_value: f64, price: f64, quantity: f64) -> f64 {
19        match self {
20            CommissionType::Percent => price * quantity * (commission_value / 100.0),
21            CommissionType::CashPerOrder => commission_value,
22            CommissionType::CashPerContract => commission_value * quantity,
23        }
24    }
25}