use nautilus_bitmex::{
config::{BitmexDataClientConfig, BitmexExecClientConfig},
factories::{BitmexDataClientFactory, BitmexExecFactoryConfig, BitmexExecutionClientFactory},
};
use nautilus_common::enums::Environment;
use nautilus_live::node::LiveNode;
use nautilus_model::{
identifiers::{ClientId, InstrumentId, StrategyId, TraderId},
types::Quantity,
};
use nautilus_testkit::testers::{ExecTester, ExecTesterConfig};
use nautilus_trading::strategy::StrategyConfig;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv().ok();
let use_testnet = true;
let environment = Environment::Live;
let trader_id = TraderId::from("TESTER-001");
let instrument_id = InstrumentId::from("XBTUSD.BITMEX");
let data_config = BitmexDataClientConfig {
use_testnet,
..Default::default()
};
let exec_config = BitmexExecFactoryConfig::new(
trader_id,
BitmexExecClientConfig {
use_testnet,
..Default::default()
},
);
let data_factory = BitmexDataClientFactory::new();
let exec_factory = BitmexExecutionClientFactory::new();
let mut node = LiveNode::builder(trader_id, environment)?
.add_data_client(None, Box::new(data_factory), Box::new(data_config))?
.add_exec_client(None, Box::new(exec_factory), Box::new(exec_config))?
.with_reconciliation(true)
.with_reconciliation_lookback_mins(2880)
.with_delay_post_stop_secs(5)
.build()?;
let tester_config = ExecTesterConfig::builder()
.base(StrategyConfig {
strategy_id: Some(StrategyId::from("EXEC-TESTER-001")),
external_order_claims: Some(vec![instrument_id]),
..Default::default()
})
.instrument_id(instrument_id)
.client_id(ClientId::new("BITMEX"))
.order_qty(Quantity::from("100"))
.use_post_only(true)
.log_data(false)
.build();
let tester = ExecTester::new(tester_config);
node.add_strategy(tester)?;
node.run().await?;
Ok(())
}