bulk_client/msgs/risk.rs
1use crate::transaction::ActionMeta;
2use serde::{Deserialize, Serialize};
3
4
5/// Risk configuration
6/// - target maximum dollar loss
7/// - minimum eloss bps
8/// - maximum p(liquidation) allowed
9///
10/// We determine the E[loss] threshold as:
11/// ```
12/// let eloss_notional = max_loss / notional * 1e4;
13/// let eloss_max = (4.0 * max_loss) / notional * 1e4;
14/// let eloss_target = f64::max(eloss_notional, eloss_floor).min(eloss_max)
15/// ```
16#[derive(Clone, Debug, Serialize, Deserialize)]
17pub struct RiskConfigChange {
18 // Settlement currency
19 pub settle_ccy: String,
20 // Maximum expected dollar loss below collateral allowed (for example 15k$)
21 pub max_loss: f64,
22 // Expected loss floor in bps (for example 500bps)
23 pub eloss_floor: f64,
24 // Maximum p(liquidation) allowed (for example 90%)
25 pub max_pliq: f64,
26 // margin buffer (5% = 0.05)
27 pub margin_buffer: f64,
28 // correlation discount [0-1], lower value reduces portfolio correlations -> higher risk
29 pub corr_discount: f64,
30
31 #[serde(skip)]
32 pub meta: ActionMeta,
33}