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