Skip to main content

rust_okx/api/account/responses/
risk.rs

1use serde::Deserialize;
2
3use crate::model::NumberString;
4
5/// Per-currency loan record within an account risk-state response.
6#[derive(Debug, Clone, Deserialize)]
7#[serde(rename_all = "camelCase")]
8#[non_exhaustive]
9pub struct LoanRecord {
10    /// Available loan amount.
11    #[serde(default)]
12    pub avail_loan: String,
13    /// Average borrow rate.
14    #[serde(default)]
15    pub avg_rate: String,
16    /// Currency.
17    #[serde(default)]
18    pub ccy: String,
19    /// Accrued interest.
20    #[serde(default)]
21    pub interest: NumberString,
22    /// Total loan quota.
23    #[serde(default)]
24    pub loan_quota: NumberString,
25    /// Position loan.
26    #[serde(default)]
27    pub pos_loan: String,
28    /// Current borrow rate.
29    #[serde(default)]
30    pub rate: NumberString,
31    /// Remaining loan limit.
32    #[serde(default)]
33    pub surplus_lmt: NumberString,
34    /// Used loan limit.
35    #[serde(default)]
36    pub used_lmt: NumberString,
37    /// Used loan amount.
38    #[serde(default)]
39    pub used_loan: String,
40    /// Interest-free liability.
41    #[serde(default)]
42    pub interest_free_liab: String,
43    /// Potential borrowing amount.
44    #[serde(default)]
45    pub potential_borrowing_amt: String,
46}
47
48/// Account risk state (loan allocation summary).
49#[derive(Debug, Clone, Deserialize)]
50#[serde(rename_all = "camelCase")]
51#[non_exhaustive]
52pub struct RiskState {
53    /// Total debt.
54    #[serde(default)]
55    pub debt: NumberString,
56    /// Total accrued interest.
57    #[serde(default)]
58    pub interest: NumberString,
59    /// Loan allocation string.
60    #[serde(default)]
61    pub loan_alloc: String,
62    /// Timestamp of next discount event (Unix milliseconds).
63    #[serde(default)]
64    pub next_discount_time: NumberString,
65    /// Timestamp of next interest accrual (Unix milliseconds).
66    #[serde(default)]
67    pub next_interest_time: NumberString,
68    /// Per-currency loan records.
69    #[serde(default)]
70    pub records: Vec<LoanRecord>,
71}
72
73/// Simulated margin calculation result.
74#[derive(Debug, Clone, Deserialize)]
75#[serde(rename_all = "camelCase")]
76#[non_exhaustive]
77pub struct SimulatedMargin {
78    /// Initial margin requirement.
79    #[serde(default)]
80    pub imr: NumberString,
81    /// Maintenance margin requirement.
82    #[serde(default)]
83    pub mmr: NumberString,
84    /// Margin ratio.
85    #[serde(default)]
86    pub mr: NumberString,
87    /// Notional value in USD.
88    #[serde(default)]
89    pub notional_usd: NumberString,
90    /// Per-instrument details returned by OKX.
91    #[serde(default)]
92    pub details: Vec<SimulatedMarginDetail>,
93}
94
95/// Per-instrument detail in a simulated margin response.
96#[derive(Debug, Clone, Deserialize)]
97#[serde(rename_all = "camelCase")]
98#[non_exhaustive]
99pub struct SimulatedMarginDetail {
100    /// Instrument ID.
101    #[serde(default)]
102    pub inst_id: String,
103    /// Position size.
104    #[serde(default)]
105    pub pos: NumberString,
106    /// Initial margin requirement.
107    #[serde(default)]
108    pub imr: NumberString,
109    /// Maintenance margin requirement.
110    #[serde(default)]
111    pub mmr: NumberString,
112    /// Unrealized PnL.
113    #[serde(default)]
114    pub upl: NumberString,
115}
116
117/// Account greeks row.
118#[derive(Debug, Clone, Deserialize)]
119#[serde(rename_all = "camelCase")]
120#[non_exhaustive]
121pub struct Greek {
122    /// Currency.
123    #[serde(default)]
124    pub ccy: String,
125    /// Black-Scholes delta.
126    #[serde(rename = "deltaBS", default)]
127    pub delta_bs: NumberString,
128    /// Portfolio-adjusted delta.
129    #[serde(rename = "deltaPA", default)]
130    pub delta_pa: NumberString,
131    /// Black-Scholes gamma.
132    #[serde(rename = "gammaBS", default)]
133    pub gamma_bs: NumberString,
134    /// Black-Scholes theta.
135    #[serde(rename = "thetaBS", default)]
136    pub theta_bs: NumberString,
137    /// Black-Scholes vega.
138    #[serde(rename = "vegaBS", default)]
139    pub vega_bs: NumberString,
140}
141
142/// Account position-tier row.
143#[derive(Debug, Clone, Deserialize)]
144#[serde(rename_all = "camelCase")]
145#[non_exhaustive]
146pub struct AccountPositionTier {
147    /// Instrument type.
148    #[serde(default)]
149    pub inst_type: String,
150    /// Underlying.
151    #[serde(default)]
152    pub uly: String,
153    /// Instrument family.
154    #[serde(default)]
155    pub inst_family: String,
156    /// Position type.
157    #[serde(default)]
158    pub pos_type: String,
159    /// Minimum size in the tier.
160    #[serde(default)]
161    pub min_sz: NumberString,
162    /// Maximum size in the tier.
163    #[serde(default)]
164    pub max_sz: NumberString,
165}
166
167/// Position-builder result.
168#[derive(Debug, Clone, Deserialize)]
169#[serde(rename_all = "camelCase")]
170#[non_exhaustive]
171pub struct PositionBuilderResult {
172    /// Account level used for the calculation.
173    #[serde(default)]
174    pub acct_lv: String,
175    /// Adjusted / effective equity.
176    #[serde(default)]
177    pub adj_eq: NumberString,
178    /// Initial margin requirement.
179    #[serde(default)]
180    pub imr: NumberString,
181    /// Maintenance margin requirement.
182    #[serde(default)]
183    pub mmr: NumberString,
184    /// Margin ratio.
185    #[serde(default)]
186    pub mr: NumberString,
187    /// Simulated or real position data.
188    #[serde(default)]
189    pub pos_data: Vec<PositionBuilderPosition>,
190    /// Simulated or real asset data.
191    #[serde(default)]
192    pub asset_data: Vec<PositionBuilderAsset>,
193}
194
195/// Position row returned by position builder.
196#[derive(Debug, Clone, Deserialize)]
197#[serde(rename_all = "camelCase")]
198#[non_exhaustive]
199pub struct PositionBuilderPosition {
200    /// Instrument type.
201    #[serde(default)]
202    pub inst_type: String,
203    /// Instrument ID.
204    #[serde(default)]
205    pub inst_id: String,
206    /// Position size.
207    #[serde(default)]
208    pub pos: NumberString,
209    /// Average price.
210    #[serde(default)]
211    pub avg_px: NumberString,
212    /// Unrealized PnL.
213    #[serde(default)]
214    pub upl: NumberString,
215}
216
217/// Asset row returned by position builder.
218#[derive(Debug, Clone, Deserialize)]
219#[serde(rename_all = "camelCase")]
220#[non_exhaustive]
221pub struct PositionBuilderAsset {
222    /// Currency.
223    #[serde(default)]
224    pub ccy: String,
225    /// Equity.
226    #[serde(default)]
227    pub eq: NumberString,
228}