Skip to main content

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}