use nautilus_bybit::{
common::{consts::BYBIT_CLIENT_ID, enums::BybitProductType},
config::{BybitDataClientConfig, BybitExecClientConfig},
factories::{BybitDataClientFactory, BybitExecutionClientFactory},
};
use nautilus_common::enums::Environment;
use nautilus_live::node::LiveNode;
use nautilus_model::identifiers::{AccountId, InstrumentId, TraderId};
use nautilus_trading::examples::strategies::delta_neutral_vol::{
DeltaNeutralVol, DeltaNeutralVolConfig,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenvy::dotenv().ok();
let environment = Environment::Live;
let trader_id = TraderId::from("TESTER-001");
let account_id = AccountId::from("BYBIT-001");
let client_id = *BYBIT_CLIENT_ID;
let data_config = BybitDataClientConfig {
api_key: None,
api_secret: None,
product_types: vec![BybitProductType::Option, BybitProductType::Linear],
..Default::default()
};
let exec_config = BybitExecClientConfig {
api_key: None,
api_secret: None,
product_types: vec![BybitProductType::Option, BybitProductType::Linear],
account_id: Some(account_id),
..Default::default()
};
let data_factory = BybitDataClientFactory::new();
let exec_factory = BybitExecutionClientFactory::new(trader_id, account_id);
let hedge_instrument_id = InstrumentId::from("BTCUSDT-LINEAR.BYBIT");
let strategy_config =
DeltaNeutralVolConfig::new("BTC".to_string(), hedge_instrument_id, client_id)
.with_contracts(1)
.with_rehedge_delta_threshold(0.5)
.with_rehedge_interval_secs(30)
.with_enter_strangle(false)
.with_iv_param_key("order_iv".to_string());
let strategy = DeltaNeutralVol::new(strategy_config);
let mut node = LiveNode::builder(trader_id, environment)?
.with_name("BYBIT-DELTA-NEUTRAL-001".to_string())
.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_delay_post_stop_secs(5)
.build()?;
node.add_strategy(strategy)?;
node.run().await?;
Ok(())
}