1#![allow(dead_code)]
18#![allow(unused_variables)]
19
20use std::time::Duration;
21
22use futures_util::StreamExt;
23use nautilus_model::{
24 enums::{OrderSide, OrderType},
25 identifiers::{ClientOrderId, InstrumentId, StrategyId, TraderId},
26 types::Quantity,
27};
28use nautilus_okx::{
29 common::enums::{OKXInstrumentType, OKXTradeMode},
30 http::OKXHttpClient,
31 websocket::client::OKXWebSocketClient,
32};
33use tokio::{pin, signal};
34use tracing::level_filters::LevelFilter;
35
36#[tokio::main]
37async fn main() -> Result<(), Box<dyn std::error::Error>> {
38 tracing_subscriber::fmt()
39 .with_max_level(LevelFilter::TRACE)
40 .init();
41
42 let rest_client = OKXHttpClient::from_env().unwrap();
43
44 let inst_type = OKXInstrumentType::Swap;
45 let instruments = rest_client.request_instruments(inst_type).await?;
46
47 let mut ws_client = OKXWebSocketClient::from_env().unwrap();
48 ws_client.initialize_instruments_cache(instruments.clone());
49 ws_client.connect().await?;
50
51 ws_client.subscribe_orders(inst_type).await?;
53 tokio::time::sleep(Duration::from_secs(1)).await;
57
58 let trader_id = TraderId::from("TRADER-001");
59 let strategy_id = StrategyId::from("SCALPER-001");
60 let instrument_id = InstrumentId::from("BTC-USDT-SWAP.OKX");
61 let client_order_id = ClientOrderId::from("O20250711001");
62 let order_side = OrderSide::Buy;
63 let order_type = OrderType::Market;
64 let quantity = Quantity::from("0.01");
65
66 let resp = ws_client
67 .submit_order(
68 trader_id,
69 strategy_id,
70 instrument_id,
71 OKXTradeMode::Isolated,
72 client_order_id,
73 order_side,
74 order_type,
75 quantity,
76 None, None, None, None, None, None, None, )
84 .await;
85
86 match resp {
87 Ok(resp) => tracing::debug!("{resp:?}"),
88 Err(e) => tracing::error!("{e:?}"),
89 }
90
91 let sigint = signal::ctrl_c();
93 pin!(sigint);
94
95 let stream = ws_client.stream();
96 tokio::pin!(stream); loop {
99 tokio::select! {
100 Some(data) = stream.next() => {
101 tracing::debug!("{data:?}");
102 }
103 _ = &mut sigint => {
104 tracing::info!("Received SIGINT, closing connection...");
105 ws_client.close().await?;
106 break;
107 }
108 else => break,
109 }
110 }
111
112 Ok(())
113}