use nautilus_common::enums::Environment;
use nautilus_live::node::LiveNode;
use nautilus_model::{
identifiers::{InstrumentId, TraderId},
stubs::TestDefault,
};
use nautilus_okx::{
common::{
consts::OKX_CLIENT_ID,
enums::{OKXEnvironment, OKXInstrumentType},
},
config::OKXDataClientConfig,
factories::OKXDataClientFactory,
};
use nautilus_testkit::testers::{DataTester, DataTesterConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv().ok();
let environment = Environment::Live;
let trader_id = TraderId::test_default();
let node_name = "OKX-TESTER-001".to_string();
let instrument_ids = vec![
InstrumentId::from("BTC-USDT-SWAP.OKX"),
];
let okx_config = OKXDataClientConfig {
api_key: None, api_secret: None, api_passphrase: None, instrument_types: vec![OKXInstrumentType::Swap],
environment: OKXEnvironment::Live,
..Default::default()
};
let client_factory = OKXDataClientFactory::new();
let client_id = *OKX_CLIENT_ID;
let mut node = LiveNode::builder(trader_id, environment)?
.with_name(node_name)
.with_delay_post_stop_secs(2)
.add_data_client(None, Box::new(client_factory), Box::new(okx_config))?
.build()?;
let tester_config = DataTesterConfig::builder()
.client_id(client_id)
.instrument_ids(instrument_ids)
.subscribe_quotes(true)
.subscribe_trades(true)
.subscribe_mark_prices(true)
.subscribe_index_prices(true)
.subscribe_funding_rates(true)
.subscribe_instrument_status(true)
.request_book_snapshot(true)
.request_funding_rates(true)
.manage_book(true)
.build();
let tester = DataTester::new(tester_config);
node.add_actor(tester)?;
node.run().await?;
Ok(())
}