Skip to main content

rust_okx/api/trade/
responses.rs

1use serde::Deserialize;
2
3use crate::{
4    NumberString,
5    model::{OrderSide, OrderState, OrderType, PositionSide, TradeMode},
6};
7
8mod advanced;
9mod algo;
10
11pub use advanced::*;
12pub use algo::*;
13
14/// The result of placing an order.
15#[derive(Debug, Clone, Deserialize)]
16#[serde(rename_all = "camelCase")]
17#[non_exhaustive]
18pub struct PlaceOrderResult {
19    /// OKX order ID.
20    #[serde(default)]
21    pub ord_id: String,
22    /// Client-supplied order ID, if any.
23    #[serde(default)]
24    pub cl_ord_id: String,
25    /// Order tag.
26    #[serde(default)]
27    pub tag: String,
28    /// Per-order status code (`"0"` on success).
29    pub s_code: String,
30    /// Per-order status message.
31    #[serde(default)]
32    pub s_msg: String,
33    /// Timestamp (Unix milliseconds).
34    #[serde(default)]
35    pub ts: NumberString,
36}
37
38/// The result of cancelling an order.
39#[derive(Debug, Clone, Deserialize)]
40#[serde(rename_all = "camelCase")]
41#[non_exhaustive]
42pub struct CancelOrderResult {
43    /// OKX order ID.
44    #[serde(default)]
45    pub ord_id: String,
46    /// Client-supplied order ID, if any.
47    #[serde(default)]
48    pub cl_ord_id: String,
49    /// Per-order status code (`"0"` on success).
50    pub s_code: String,
51    /// Per-order status message.
52    #[serde(default)]
53    pub s_msg: String,
54}
55
56/// The result of amending an order.
57#[derive(Debug, Clone, Deserialize)]
58#[serde(rename_all = "camelCase")]
59#[non_exhaustive]
60pub struct AmendOrderResult {
61    /// OKX order ID.
62    #[serde(default)]
63    pub ord_id: String,
64    /// Client-supplied order ID, if any.
65    #[serde(default)]
66    pub cl_ord_id: String,
67    /// Request ID, if supplied.
68    #[serde(default)]
69    pub req_id: String,
70    /// Per-order status code (`"0"` on success).
71    pub s_code: String,
72    /// Per-order status message.
73    #[serde(default)]
74    pub s_msg: String,
75}
76
77/// The result of closing a position.
78#[derive(Debug, Clone, Deserialize)]
79#[serde(rename_all = "camelCase")]
80#[non_exhaustive]
81pub struct ClosePositionResult {
82    /// Instrument ID.
83    #[serde(default)]
84    pub inst_id: String,
85    /// Position side.
86    #[serde(default)]
87    pub pos_side: String,
88    /// Client order ID, if supplied.
89    #[serde(default)]
90    pub cl_ord_id: String,
91    /// Tag, if supplied.
92    #[serde(default)]
93    pub tag: String,
94}
95
96/// Details of an existing order.
97#[derive(Debug, Clone, Deserialize)]
98#[serde(rename_all = "camelCase")]
99#[non_exhaustive]
100pub struct Order {
101    /// Instrument ID.
102    pub inst_id: String,
103    /// OKX order ID.
104    pub ord_id: String,
105    /// Client-supplied order ID, if any.
106    #[serde(default)]
107    pub cl_ord_id: String,
108    /// Order price.
109    #[serde(default)]
110    pub px: NumberString,
111    /// Order size.
112    #[serde(default)]
113    pub sz: NumberString,
114    /// Order type.
115    pub ord_type: OrderType,
116    /// Order side.
117    pub side: OrderSide,
118    /// Position side.
119    pub pos_side: PositionSide,
120    /// Trade mode.
121    pub td_mode: TradeMode,
122    /// Accumulated filled size.
123    #[serde(default)]
124    pub acc_fill_sz: NumberString,
125    /// Average fill price.
126    #[serde(default)]
127    pub avg_px: NumberString,
128    /// Order state.
129    pub state: OrderState,
130    /// Creation time (Unix milliseconds).
131    #[serde(default)]
132    pub c_time: NumberString,
133}
134
135/// A trade fill.
136#[derive(Debug, Clone, Deserialize)]
137#[serde(rename_all = "camelCase")]
138#[non_exhaustive]
139pub struct Fill {
140    /// Instrument type.
141    #[serde(default)]
142    pub inst_type: String,
143    /// Instrument ID.
144    pub inst_id: String,
145    /// Trade ID.
146    #[serde(default)]
147    pub trade_id: String,
148    /// OKX order ID.
149    #[serde(default)]
150    pub ord_id: String,
151    /// Fill price.
152    #[serde(default)]
153    pub fill_px: NumberString,
154    /// Fill size.
155    #[serde(default)]
156    pub fill_sz: NumberString,
157    /// Fill side.
158    pub side: OrderSide,
159    /// Order type, when returned by OKX.
160    #[serde(default)]
161    pub ord_type: Option<OrderType>,
162    /// Fee currency.
163    #[serde(default)]
164    pub fee_ccy: String,
165    /// Fee amount.
166    #[serde(default)]
167    pub fee: NumberString,
168    /// Fill timestamp (Unix milliseconds).
169    #[serde(default)]
170    pub ts: NumberString,
171}
172
173/// Historical fill returned by `GET /api/v5/trade/fills-history`.
174///
175/// OKX documents this response separately from recent fills and does not return
176/// `ordType` here, so this type intentionally does not reuse [`Fill`].
177#[derive(Debug, Clone, Deserialize)]
178#[serde(rename_all = "camelCase")]
179#[non_exhaustive]
180pub struct FillHistory {
181    /// Instrument type.
182    #[serde(default)]
183    pub inst_type: String,
184    /// Instrument ID.
185    pub inst_id: String,
186    /// Trade ID.
187    #[serde(default)]
188    pub trade_id: String,
189    /// OKX order ID.
190    #[serde(default)]
191    pub ord_id: String,
192    /// Client order ID.
193    #[serde(default)]
194    pub cl_ord_id: String,
195    /// Bill ID.
196    #[serde(default)]
197    pub bill_id: String,
198    /// Order tag.
199    #[serde(default)]
200    pub tag: String,
201    /// Fill price.
202    #[serde(default)]
203    pub fill_px: NumberString,
204    /// Fill size.
205    #[serde(default)]
206    pub fill_sz: NumberString,
207    /// Index price at fill time.
208    #[serde(default)]
209    pub fill_idx_px: NumberString,
210    /// Fill profit and loss.
211    #[serde(default)]
212    pub fill_pnl: NumberString,
213    /// Implied volatility at fill price.
214    #[serde(default)]
215    pub fill_px_vol: NumberString,
216    /// Fill price in USD.
217    #[serde(default)]
218    pub fill_px_usd: NumberString,
219    /// Mark volatility at fill time.
220    #[serde(default)]
221    pub fill_mark_vol: NumberString,
222    /// Forward price at fill time.
223    #[serde(default)]
224    pub fill_fwd_px: NumberString,
225    /// Mark price at fill time.
226    #[serde(default)]
227    pub fill_mark_px: NumberString,
228    /// Fill side.
229    pub side: OrderSide,
230    /// Position side.
231    #[serde(default)]
232    pub pos_side: String,
233    /// Liquidity role, e.g. `T` or `M`.
234    #[serde(default)]
235    pub exec_type: String,
236    /// Fee currency.
237    #[serde(default)]
238    pub fee_ccy: String,
239    /// Fee amount.
240    #[serde(default)]
241    pub fee: NumberString,
242    /// Fee rate.
243    #[serde(default)]
244    pub fee_rate: NumberString,
245    /// Fill timestamp (Unix milliseconds).
246    #[serde(default)]
247    pub fill_time: NumberString,
248    /// Trade creation timestamp (Unix milliseconds).
249    #[serde(default)]
250    pub ts: NumberString,
251}