hypercall_margin/standard/
params.rs1use rust_decimal::Decimal;
2use rust_decimal_macros::dec;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct StandardMarginParams {
7 pub perp_im_pct: Decimal,
8 pub perp_mm_pct: Decimal,
9 pub short_option_spot_pct: Decimal,
10 pub short_call_im_floor_pct: Decimal,
11 pub short_put_im_floor_pct: Decimal,
12 pub short_call_mm_pct: Decimal,
13 pub short_put_mm_pct: Decimal,
14}
15
16impl Default for StandardMarginParams {
17 fn default() -> Self {
18 Self {
19 perp_im_pct: dec!(0.10),
20 perp_mm_pct: dec!(0.05),
21 short_option_spot_pct: dec!(0.15),
22 short_call_im_floor_pct: dec!(0.10),
23 short_put_im_floor_pct: dec!(0.10),
24 short_call_mm_pct: dec!(0.06),
25 short_put_mm_pct: dec!(0.06),
26 }
27 }
28}
29
30impl StandardMarginParams {
31 pub fn short_im_floor_pct(&self, is_call: bool) -> Decimal {
32 if is_call {
33 self.short_call_im_floor_pct
34 } else {
35 self.short_put_im_floor_pct
36 }
37 }
38
39 pub fn short_mm_pct(&self, is_call: bool) -> Decimal {
40 if is_call {
41 self.short_call_mm_pct
42 } else {
43 self.short_put_mm_pct
44 }
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_default_params() {
54 let params = StandardMarginParams::default();
55 assert_eq!(params.perp_im_pct, dec!(0.10));
56 assert_eq!(params.perp_mm_pct, dec!(0.05));
57 assert_eq!(params.short_option_spot_pct, dec!(0.15));
58 assert_eq!(params.short_call_im_floor_pct, dec!(0.10));
59 assert_eq!(params.short_put_im_floor_pct, dec!(0.10));
60 assert_eq!(params.short_call_mm_pct, dec!(0.06));
61 assert_eq!(params.short_put_mm_pct, dec!(0.06));
62 }
63
64 #[test]
65 fn test_short_im_floor_pct() {
66 let params = StandardMarginParams::default();
67 assert_eq!(params.short_im_floor_pct(true), dec!(0.10));
68 assert_eq!(params.short_im_floor_pct(false), dec!(0.10));
69 }
70
71 #[test]
72 fn test_short_mm_pct() {
73 let params = StandardMarginParams::default();
74 assert_eq!(params.short_mm_pct(true), dec!(0.06));
75 assert_eq!(params.short_mm_pct(false), dec!(0.06));
76 }
77}