Skip to main content

rust_okx/api/account/responses/
risk.rs

1use serde::Deserialize;
2
3use crate::model::NumberString;
4
5/// Account risk state.
6#[derive(Debug, Clone, Deserialize)]
7#[serde(rename_all = "camelCase")]
8#[non_exhaustive]
9pub struct RiskState {
10    /// Whether the account is currently at risk, as represented by OKX.
11    #[serde(default)]
12    pub at_risk: String,
13    /// Timestamp (Unix milliseconds).
14    #[serde(default)]
15    pub ts: NumberString,
16}
17
18/// Simulated margin calculation result.
19#[derive(Debug, Clone, Deserialize)]
20#[serde(rename_all = "camelCase")]
21#[non_exhaustive]
22pub struct SimulatedMargin {
23    /// Initial margin requirement.
24    #[serde(default)]
25    pub imr: NumberString,
26    /// Maintenance margin requirement.
27    #[serde(default)]
28    pub mmr: NumberString,
29    /// Margin ratio.
30    #[serde(default)]
31    pub mr: NumberString,
32    /// Notional value in USD.
33    #[serde(default)]
34    pub notional_usd: NumberString,
35    /// Per-instrument details returned by OKX.
36    #[serde(default)]
37    pub details: Vec<SimulatedMarginDetail>,
38}
39
40/// Per-instrument detail in a simulated margin response.
41#[derive(Debug, Clone, Deserialize)]
42#[serde(rename_all = "camelCase")]
43#[non_exhaustive]
44pub struct SimulatedMarginDetail {
45    /// Instrument ID.
46    #[serde(default)]
47    pub inst_id: String,
48    /// Position size.
49    #[serde(default)]
50    pub pos: NumberString,
51    /// Initial margin requirement.
52    #[serde(default)]
53    pub imr: NumberString,
54    /// Maintenance margin requirement.
55    #[serde(default)]
56    pub mmr: NumberString,
57    /// Unrealized PnL.
58    #[serde(default)]
59    pub upl: NumberString,
60}
61
62/// Account greeks row.
63#[derive(Debug, Clone, Deserialize)]
64#[serde(rename_all = "camelCase")]
65#[non_exhaustive]
66pub struct Greek {
67    /// Currency.
68    #[serde(default)]
69    pub ccy: String,
70    /// Black-Scholes delta.
71    #[serde(rename = "deltaBS", default)]
72    pub delta_bs: NumberString,
73    /// Portfolio-adjusted delta.
74    #[serde(rename = "deltaPA", default)]
75    pub delta_pa: NumberString,
76    /// Black-Scholes gamma.
77    #[serde(rename = "gammaBS", default)]
78    pub gamma_bs: NumberString,
79    /// Black-Scholes theta.
80    #[serde(rename = "thetaBS", default)]
81    pub theta_bs: NumberString,
82    /// Black-Scholes vega.
83    #[serde(rename = "vegaBS", default)]
84    pub vega_bs: NumberString,
85}
86
87/// Account position-tier row.
88#[derive(Debug, Clone, Deserialize)]
89#[serde(rename_all = "camelCase")]
90#[non_exhaustive]
91pub struct AccountPositionTier {
92    /// Instrument type.
93    #[serde(default)]
94    pub inst_type: String,
95    /// Underlying.
96    #[serde(default)]
97    pub uly: String,
98    /// Instrument family.
99    #[serde(default)]
100    pub inst_family: String,
101    /// Position type.
102    #[serde(default)]
103    pub pos_type: String,
104    /// Minimum size in the tier.
105    #[serde(default)]
106    pub min_sz: NumberString,
107    /// Maximum size in the tier.
108    #[serde(default)]
109    pub max_sz: NumberString,
110}
111
112/// Position-builder result.
113#[derive(Debug, Clone, Deserialize)]
114#[serde(rename_all = "camelCase")]
115#[non_exhaustive]
116pub struct PositionBuilderResult {
117    /// Account level used for the calculation.
118    #[serde(default)]
119    pub acct_lv: String,
120    /// Adjusted / effective equity.
121    #[serde(default)]
122    pub adj_eq: NumberString,
123    /// Initial margin requirement.
124    #[serde(default)]
125    pub imr: NumberString,
126    /// Maintenance margin requirement.
127    #[serde(default)]
128    pub mmr: NumberString,
129    /// Margin ratio.
130    #[serde(default)]
131    pub mr: NumberString,
132    /// Simulated or real position data.
133    #[serde(default)]
134    pub pos_data: Vec<PositionBuilderPosition>,
135    /// Simulated or real asset data.
136    #[serde(default)]
137    pub asset_data: Vec<PositionBuilderAsset>,
138}
139
140/// Position row returned by position builder.
141#[derive(Debug, Clone, Deserialize)]
142#[serde(rename_all = "camelCase")]
143#[non_exhaustive]
144pub struct PositionBuilderPosition {
145    /// Instrument type.
146    #[serde(default)]
147    pub inst_type: String,
148    /// Instrument ID.
149    #[serde(default)]
150    pub inst_id: String,
151    /// Position size.
152    #[serde(default)]
153    pub pos: NumberString,
154    /// Average price.
155    #[serde(default)]
156    pub avg_px: NumberString,
157    /// Unrealized PnL.
158    #[serde(default)]
159    pub upl: NumberString,
160}
161
162/// Asset row returned by position builder.
163#[derive(Debug, Clone, Deserialize)]
164#[serde(rename_all = "camelCase")]
165#[non_exhaustive]
166pub struct PositionBuilderAsset {
167    /// Currency.
168    #[serde(default)]
169    pub ccy: String,
170    /// Equity.
171    #[serde(default)]
172    pub eq: NumberString,
173}