NautilusTrader 实盘节点如何配置 LiveNodeConfig 并注册数据与执行客户端?

📅 发布时间:2026/9/12 4:37:49
NautilusTrader 实盘节点如何配置 LiveNodeConfig 并注册数据与执行客户端?
NautilusTrader 实盘节点如何配置 LiveNodeConfig 并注册数据与执行客户端【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader把策略从回测搬到真实交易所时第一步是搭好LiveNode先用LiveNodeConfig定义节点的核心组件配置再在LiveNode的 builder 上注册数据客户端行情/合约与执行客户端下单/账户。这两件事是分开的——文档明确说明数据与执行客户端通过LiveNode.builder(...)注册而不是挂在 config 对象的客户端字典里。本文以 OKX 适配器为例走 Python 主路径Rust 原生路径作为可选分支最后给出文档中定义的启动顺序与验证方式。实盘交易涉及真实资金风险。在部署到生产环境之前Live trading 概念文档要求先理解节点配置、节点操作、执行对账reconciliation以及回测与实盘环境的差异。LiveNodeConfig 配置什么LiveNodeConfig持有节点核心组件的设置。Python 中可以直接构造from nautilus_trader.common import Environment from nautilus_trader.common import LogLevel from nautilus_trader.config import CacheConfig from nautilus_trader.config import LiveDataEngineConfig from nautilus_trader.config import LiveExecutionEngineConfig from nautilus_trader.config import LiveNodeConfig from nautilus_trader.config import LiveRiskEngineConfig from nautilus_trader.config import LoggerConfig from nautilus_trader.config import MessageBusConfig from nautilus_trader.config import PortfolioConfig from nautilus_trader.model import TraderId config LiveNodeConfig( environmentEnvironment.LIVE, trader_idTraderId.from_str(MY-TRADER-001), loggingLoggerConfig(stdout_levelLogLevel.INFO), cacheCacheConfig(), msgbusMessageBusConfig(), data_engineLiveDataEngineConfig(), risk_engineLiveRiskEngineConfig(), exec_engineLiveExecutionEngineConfig(), portfolioPortfolioConfig(), )核心参数及其默认值来自 Configure a Live Trading NodeSettingDefaultDescriptiontrader_idTRADER-001Unique trader identifier (name-tag format); the tag must be unique across nodes.instance_idNoneOptional unique instance identifier.timeout_connection_secs60.0Connection timeout in seconds.timeout_reconciliation_secs30.0Reconciliation timeout in seconds.timeout_portfolio_secs10.0Portfolio initialization timeout.timeout_disconnection_secs10.0Disconnection timeout.delay_post_stop_secs10.0Delay for residual events after stopping.timeout_shutdown_secs5.0Pending-task shutdown timeout in seconds.trader_id采用name-tag格式。注意文档中的警告只有最后一个连字符后的tag会进入生成的 client order ID、order list ID 和 position ID。两个节点交易同一交易所账户时必须使用不同 tag例如MY-TRADER-001和OTHER-TRADER-001共享 tag001可能生成相同的 ID。策略上的use_uuid_client_order_ids只解决 client order ID 一项order list ID 和 position ID 仍然依赖 tag所以唯一 tag 始终是硬性要求。在 builder 上注册数据与执行客户端Python 路径的主路径是LiveNode.builder(name, trader_id, environment)链式调用add_data_client和add_exec_client最后build()。下面这段与仓库示例 exec_tester.py 的接法一致from nautilus_trader.adapters.okx import OKXDataClientConfig from nautilus_trader.adapters.okx import OKXDataClientFactory from nautilus_trader.adapters.okx import OKXEnvironment from nautilus_trader.adapters.okx import OKXExecutionClientConfig from nautilus_trader.adapters.okx import OKXExecutionClientFactory from nautilus_trader.adapters.okx import OKXInstrumentType from nautilus_trader.adapters.okx import OKXMarginMode from nautilus_trader.common import Environment from nautilus_trader.config import LiveRiskEngineConfig from nautilus_trader.live import LiveNode from nautilus_trader.model import AccountId from nautilus_trader.model import TraderId node ( LiveNode.builder( OKX-EXEC-TESTER-001, TraderId.from_str(OKX-TESTER-001), Environment.LIVE, ) .with_reconciliation(True) .add_data_client( None, OKXDataClientFactory(), OKXDataClientConfig(instrument_types[OKXInstrumentType.SWAP]), ) .add_exec_client( None, OKXExecutionClientFactory(), OKXExecutionClientConfig( account_idAccountId.from_str(OKX-001), instrument_types[OKXInstrumentType.SWAP], margin_modeOKXMarginMode.CROSS, ), ) .build() )两个注册方法的第一个参数name是客户端标签可以传None一个节点挂多个客户端时用名字区分。Configure a Live Trading Node 给出的多市场示例在同一节点上注册了 Binance 现货和 USD-M 合约两个数据客户端node ( LiveNode.builder( BINANCE-MULTI-CLIENT-001, TraderId.from_str(MULTI-VENUE-001), Environment.LIVE, ) .add_data_client( BINANCE_SPOT, BinanceDataClientFactory(), BinanceDataClientConfig( product_typeBinanceProductType.SPOT, environmentBinanceEnvironment.LIVE, ), ) .add_data_client( BINANCE_FUTURES, BinanceDataClientFactory(), BinanceDataClientConfig( product_typeBinanceProductType.USD_M, environmentBinanceEnvironment.LIVE, ), ) .build() )builder 还提供with_exec_engine_config、with_data_engine_config、with_msgbus_config、with_logging等方法注入各子引擎配置例如LiveExecutionEngineConfig(reconciliationTrue)。with_reconciliation(True)保持默认行为启动时用交易所报告对齐本地缓存的订单与持仓状态生产环境不要关闭它。Rust 分支纯 Rust 工程注册客户端如果不用 Python 运行时Run live trading (Rust) 给出了完整接法。在Cargo.toml中加入 live crate、交易所适配器和支撑 crate[dependencies] nautilus-common 0.63 nautilus-live 0.63 nautilus-model 0.63 nautilus-okx 0.63 nautilus-trading { version 0.63, features [examples] } anyhow 1 dotenvy 0.15 log 0.4 tokio { version 1, features [full] }builder 注册数据与执行客户端注意 Rust 侧add_data_client/add_exec_client带?返回 Resultuse nautilus_common::{enums::Environment, logging::logger::LoggerConfig}; use nautilus_live::node::LiveNode; use nautilus_model::identifiers::{AccountId, TraderId}; use nautilus_okx::{ common::enums::OKXInstrumentType, config::{OKXDataClientConfig, OKXExecutionClientConfig}, factories::{OKXDataClientFactory, OKXExecutionClientFactory}, }; let trader_id TraderId::from(TESTER-001); let account_id AccountId::from(OKX-001); let data_config OKXDataClientConfig::builder() .instrument_types(vec![OKXInstrumentType::Swap]) .build(); let exec_config OKXExecutionClientConfig::builder() .account_id(account_id) .instrument_types(vec![OKXInstrumentType::Swap]) .build(); let mut node LiveNode::builder(trader_id, Environment::Live)? .with_name(MY-NODE-001.to_string()) .add_data_client( None, Box::new(OKXDataClientFactory::new()), Box::new(data_config), )? .add_exec_client( None, Box::new(OKXExecutionClientFactory::new()), Box::new(exec_config), )? .with_delay_post_stop_secs(5) .build()?;该指南中的示例为了简化加了.with_reconciliation(false)文档明确警告生产环境要删掉这一行让引擎在启动时把缓存状态与交易所对齐。LiveNode::run()是 async 方法需要 Tokio 运行时在main上加#[tokio::main]。交易所凭证与 demo 环境OKX 适配器从环境变量读取 API 凭证占位值替换为你自己的 keyexport OKX_API_KEYyour_api_key export OKX_API_SECRETyour_api_secret export OKX_API_PASSPHRASEyour_passphrase每个适配器在 integrations 目录 下都有自己的集成指南说明所需的环境变量和账户配置。首次验证接线时建议用 demo 环境OKX 的 集成指南 说明 demo API key 与生产 key 完全独立需在 OKX 的 Demo Trading 界面单独创建生产 key 在 demo 模式下不可用。配置中把环境设为 demo例如 Python 的environmentOKXEnvironment.DEMO或 Rust 的.environment(OKXEnvironment::Demo)。运行与验证节点构建完成后调用node.run()。Python 侧建议按 Configure a Live Trading Node 的写法保留dispose()try: node.run() finally: node.dispose()Rust 侧为node.run().await?;节点运行直到被 CtrlC 中断或程序化停止。启动是否成功按 Live trading 定义的生命周期判断run()先恢复缓存状态如配置了 backing 数据库然后连接数据客户端并缓存合约定义再连接执行客户端若启用了启动对账会拉取交易所报告并对齐状态全部完成后才启动 trader 组件进入事件循环。连接、对账或 trader 启动任一失败都会中止启动并走协调清理路径。所以验证顺序是日志中数据客户端先连上、合约定义完成缓存执行客户端连接成功OKX 的执行连接要求所请求的每个 instrument type 都有可用合约缺失会中止连接启动对账完成trader 组件启动节点进入运行态并等待 CtrlC。如果需要以编程方式确认运行态Python 可以在运行前捕获handle()并轮询is_runningLive trading 给出的 hosted 模式示例中启动阶段轮询handle.is_running若 run task 先完成则抛出RuntimeError(LiveNode stopped during startup)这就是文档定义的启动失败判定。各适配器还自带 smoke-test 示例data tester 和 execution tester见 Run live trading (Rust) 的 adapter 表格例如crates/adapters/okx/examples/、examples/live/okx/data_tester.py。Get Started with Lighter 文档化的做法是先跑 data tester 确认数据订阅再跑 exec tester 验证执行链路其 exec tester 默认会真实下单dry_runFalseOKX 的 exec tester 通过dry_run参数控制。跑 exec tester 前应确认 instrument、环境、账户和凭证先用 demo/testnet 或最小可接受数量。限制与边界配置和运行节点时还有几条文档明确的硬约束一个进程一个LiveNode同一进程内并发运行多个LiveNode不受支持run_async()也会拒绝同一事件循环上的第二个 hosted 节点。多策略挂在同一节点上多节点用独立进程。不要在 Jupyter notebook 里跑实盘节点节点在调用线程上拥有长时运行循环notebook 的 cell 乱序执行和内核崩溃使生产操作不安全。Jupyter 只用于回测和分析。不要阻塞事件循环事件循环线程上的用户代码策略回调、actor 处理、时间事件回调必须快速返回长任务要放到 executor 或独立线程/进程否则会造成漏单、数据陈旧和下单延迟。带缓存数据库的节点必须用run()run_async()会拒绝会阻塞宿主事件循环的 cache database backing。Windows 信号处理与 Unix 不同在 Windows 上运行时先阅读 Configure a Live Trading Node 的 Windows 信号处理一节。OKX 的 region 匹配API key 只在注册区域有效对另一区域端点使用会报API key doesnt existregion默认GLOBAL跨区账户需显式设置。如果希望节点在出现 Rust 错误日志时自动停止可以设LiveNodeConfig(shutdown_on_errorTrue)Rust logger 记录 kernel 启动后第一条log::error!随后 kernel 发布ShutdownSystem命令节点走正常的停止流程停 trader、等待 post-stop 延迟、断开客户端、停引擎不会直接 abort 进程。节点跑通之后下一步通常是给节点添加策略node.add_strategy/add_builtin_strategy并把with_reconciliation(True)保留下来进入对账与执行策略的细节参见 Execution reconciliation。【免费下载链接】nautilus_traderProduction-grade Rust-native trading engine with deterministic event-driven architecture项目地址: https://gitcode.com/GitHub_Trending/na/nautilus_trader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考