WonderTrader / Live Trading
wondertrader 实盘部署:M+1+N 多账户、启动顺序与一致性约束
实盘的复杂度主要不在策略,而在「多进程协同」和「多账户映射」。官方给出的 M+1+N 架构把这两件事分开处理:组合层负责把子策略的目标头寸轧平成净头寸,执行层再按账户的资金规模与风险偏好放大手数。这一页把官方实盘攻略里的步骤、算例与两条必须一致的约束整理成清单。
M+1+N 三步:从子策略到多个账户
官方对「组合」的定义很直接:一个交易进程中有且只有一个组合,代码上等价于一个引擎实例;组合层额外持有持仓、成交与资金概念。
子策略各自生成目标头寸
每个子策略独立计算自己要持有的目标头寸。预期此时各策略互不干扰,即使交易同一标的也不会互相抵消。官方强调:多个子策略不是共享组合的持仓,而是组合汇总了子策略的持仓。
组合层每分钟汇总并轧平
组合按固定节奏汇总每个子策略的目标头寸,把相反方向的头寸轧平,得到组合的净头寸。预期自成交风险被消除,同时降低保证金占用与佣金开销。这是官方给出的机制收益,不是收益承诺。
净头寸提交执行器,按账户分发
净头寸交给执行器执行;执行器再按各账户配置的手数倍率,同步分发到多个交易通道。预期不同账户得到与自身风险参数匹配的仓位,但绩效的一致性由组合层保证。
多账户手数倍率:官方算例读法
官方用一组具体数字说明了倍率是怎么算的。下面把它拆成表,同时标清哪些是「示例」而不是「规则」。
| 对象 | 官方示例设定 | 推导出的倍率 | 说明 |
|---|---|---|---|
| 组合盘基准 | 资金规模 500 万,预期收益 30%,最大回撤 10%,收益风险比 3:1 | 基准 1 倍 | 这是官方示例中的基准盘设定,指标仅为举例,不构成任何收益预期 |
| 账户 A | 资金 1000 万,可接受最大回撤与基准盘一致(10%) | 2 倍 | 官方给的算法是资金规模除以基准盘资金规模 |
| 账户 B | 资金 1000 万,可接受最大回撤 20% | 4 倍 | 官方说明:风险容忍度翻倍,手数比例再放大一倍 |
| 风控配置 | 不同账户可配置独立风控逻辑 | — | 官方明确账户之间不会互相影响 |
| 绩效核算 | 策略理论部位独立存储,组合整体绩效独立核算 | — | 便于团队内部按策略或按组合做考核 |
| 保密性 | 核心代码为 C++ 层 | — | 官方把策略保密性列为团队内控场景的优势之一 |
实盘要跑哪几个部分
实盘不是单个程序。官方「实盘完整攻略」把一个可用的实盘环境拆成基础文件、数据组件与交易进程三块。
| 组成部分 | 作用 | 启动时机 | 关键配置 | 注意点 |
|---|---|---|---|---|
| 基础文件目录 | 品种、合约、节假日、交易时段、佣金等配置 | 启动前准备 | 品种、合约、节假日、时段与费率文件 | 期货与股票用的文件名不同,股票侧另有品种、标的与费率文件 |
| 数据组件 | 实时录制行情、落地数据、广播给策略 | 开盘前(官方示例为 9:20) | 行情通道、落地目录、广播地址与端口、订阅查询端口 | 收盘作业默认在 16:00 执行;落地目录与广播端口要和交易进程一致 |
| 交易进程 | 运行策略、生成目标头寸、执行下单 | 数据组件启动之后 | 引擎名称、费率、过滤器、交易时段模板、数据读取路径、行情与交易通道 | 引擎名称取值决定用哪个引擎;交易时段模板可选用覆盖国内全部品种的最大模板 |
| 策略目录 | 存放策略代码 | 随交易进程 | 策略实例参数 | 策略实例名会决定输出目录与日志文件名,命名要可区分 |
| 日志目录 | 记录运行日志与策略日志 | 运行后生成 | 日志配置文件 | 数据组件与交易进程各自有日志配置,排查时先看哪一个要先分清 |
| 控制台服务 | 监控组合与通道、自动调度 | 与交易进程并行 | 部署根目录、端口 | 默认初始口令属官方文档公开值,部署后必须立即修改 |
两处必须一致:官方点名的头号错因
官方在实盘流程指引里专门写了「注意事项」,只有两条,但都指向同一类问题:配置之间没对齐。
| 约束 | 官方原文要求 | 不一致的表现 | 核对方法 |
|---|---|---|---|
| 广播端口一致 | 数据组件配置里的广播端口必须与交易组合的行情接收端口一致 | 交易进程起来了但收不到行情,策略不触发 | 把两个配置文件的端口字段并排核对 |
| 数据目录一致 | 交易组合配置里的数据目录必须与数据组件配置的一致 | 回测能跑、实盘读不到历史数据 | 核对两个配置里的数据路径字段 |
| 录制范围与合约文件一致 | 行情通道里填写的合约代码必须与合约文件中的代码一致 | 部分标的始终没有行情 | 用合约列表逐项比对录制范围 |
| 品种映射完整 | 新增品种需同步维护映射文件 | 引擎初始化直接报错 | 检查映射文件是否含该品种键 |
| 行情与交易账号有效 | 行情账号与交易账号需分别配置,交易账号另有授权字段 | 行情正常但下单失败或返回权限错误 | 先用柜台提供的测试环境验证账号与权限 |
股票与期货的三处写法差异
把期货策略改造成股票策略时,官方文档明确列了三个必须改的地方,任何一处漏改都会出现信号或成交异常。
| 要点 | 期货写法 | 股票写法 | 漏改后果 | 注意点 |
|---|---|---|---|---|
| 取历史数据 | 直接用标的代码 | 代码后需加复权标识后缀 | 拿到不复权数据,回测与实盘口径不一致 | 官方说明历史数据一定要用复权数据 |
| 交易单位 | 按合约手数 | 国内股票买入须按 1 手 100 股挂单 | 下单数量被拒或数量级错误 | 策略里要用交易单位做换算,不能直接传股数 |
| 发出信号的代码 | 与取数代码一致 | 信号代码不能带复权后缀 | 报错或找不到标的 | 取数与发单用两套写法,这是最容易错的一处 |
| 做空逻辑 | 支持开空 | 股票不可做空 | 产生无效信号与异常日志 | 官方示例在策略里用条件判断屏蔽做空分支 |
| T+1 机制 | 不适用 | 存在 T+1 约束 | 当日买入当日卖出被拒 | 官方更新日志记录了对 T+1 交易机制的支持,策略需按此设计 |
| 交易时段模板 | 按品种选择 | 可选用覆盖全部品种的最大模板 | 时段配置错导致行情驱动异常 | 官方说明该模板覆盖从夜盘到次日下午的完整范围 |
上线当天的执行顺序
官方对顺序有明确要求,颠倒顺序会让交易进程在无行情状态下启动。
提前确认合约与主力规则
用官方提供的合约加载器拉取最新品种与合约列表;若要用主力合约代码,还需用官方的主力确定工具更新换月规则。预期基础文件中的品种与合约是最新的。注意新增品种需同步补全映射键。
开盘前启动数据组件
官方示例是在 9:20 左右启动。预期看到日志目录与数据目录生成,实时目录下出现按交易所分目录的文件并随行情增长。
核对两处一致性
比对广播端口与数据目录是否与交易进程配置一致。预期两处完全对齐。这一步花一分钟,能省掉当天大量排查时间。
启动交易进程
运行交易组合入口脚本。预期组合状态变为运行中,控制台能看到组合、策略与通道数据。
用控制台确认三个信号
看组合日志是否有行情驱动记录、策略信号是否按预期产生、交易通道是否返回委托与成交。预期三个来源都能看到数据。
配置自动调度与进程守护
在控制台为组合配置计划任务(按周设置启动、停止、重启)与进程守护,避免人工守着开盘收盘。预期任务按设定时间自动执行。
实盘排查表
实盘的问题集中在进程协同、配置对齐与账号权限三类,按这个顺序查最快。
| 现象 | 可能原因 | 核对方法 | 处理方向 |
|---|---|---|---|
| 交易进程启动后无任何行情 | 数据组件未启动,或广播端口与接收端口不一致 | 先确认数据组件进程在跑,再比对端口 | 调整端口后按顺序重启两个进程 |
| 策略有信号但没委托 | 通道过滤器被打开、策略过滤器生效,或交易账号未授权 | 看控制台组合风控页面的过滤器状态与通道日志 | 关闭对应过滤器;确认交易账号权限范围 |
| 账户实收仓位与理论仓位不符 | 手数倍率配置错误,或被账户级风控拦截 | 核对各账户的倍率配置与账户风控阈值 | 先校正倍率,再复核风控参数 |
| 实盘读不到历史数据 | 交易进程的数据目录与数据组件落地目录不一致 | 比对两个配置文件里的数据路径字段 | 统一路径后重启交易进程 |
| 当日收盘后历史数据没有更新 | 数据组件的收盘作业未执行,或运行时段配置有误 | 检查数据显示时段对应的作业时间配置 | 核对交易时段模板与作业时间,必要时手工验证一次 |
| 部分标的始终没有行情 | 录制范围的合约代码与合约文件不一致 | 把录制范围与合约文件逐项比对 | 统一代码写法后重启数据组件 |
| 下单被拒且提示频次或额度 | 通道流量风控触发 | 看风控参数中的撤单与下单次数边界设置 | 按柜台实际限制调整风控阈值,不要直接关闭 |
常见问题
实盘相关的问题以官方文档「实盘完整攻略」与「常见问题」为准,本站未做任何实盘验证。
一个交易进程能跑多个策略组合吗?
不能。官方说得很明确:一个交易进程中有且只有一个组合,组合在代码上的存在形式等同于一个引擎实例。也就是说一个引擎就是一个组合。要多组策略并行,就起多个交易进程,然后由控制台统一监控与调度,这样也便于按组合分别核算绩效。
子策略之间会互相干扰吗?
不会。官方特别区分了一个容易误解的点:多个子策略不是共享组合的持仓数据,而是组合汇总了子策略的持仓数据。因此即使不同策略交易同一标的,各自的理论部位仍然独立存储、独立核算,团队内部考核也能按策略或按组合分别做。
多账户的手数倍率可以随便放大吗?
不可以。倍率的作用是把组合的净头寸映射到不同账户,官方示例中倍率由「账户资金规模除以基准盘资金规模」以及「账户可接受回撤相对于基准盘的比例」两个因素决定。放大的同时也在放大该账户的风险暴露,且不同账户可以配独立风控来限住。实际倍率必须结合你的风控与合规要求设定,本文不提供任何配比建议。
实盘必须先跑数据组件吗?
是。官方的实盘流程是先在开盘前启动数据组件录制行情并落地,再启动交易进程运行策略,交易进程通过本地广播接收行情。跳过数据组件的直接后果是策略收不到行情驱动,同时当天的行情也不会被落地,后续历史数据出现空洞。
实盘和回测的口径会不一致吗?
官方在设计上尽量减少这种漂移:回测与实盘共用同一套引擎与同一个数据读取模块,回测环境还能通过扩展加载器与实盘共享历史数据来源。但仍存在必然差异,比如实盘要面对真实撮合、网络与柜台限流,回测则依赖模拟撮合。因此回测通过不等于实盘可用,官方文档也把仿真跟踪列为回测与实盘之间的独立环节。
一开始就要用实盘账号吗?
不需要,而且不建议。官方在回测与实盘之间明确列了「仿真跟踪」环节:先跟踪一段时间看样本外表现,符合要求再上实盘。本框架自身提供仿真交易能力,柜台侧通常也有仿真环境,可以先跑通全链路。EasyClaw 侧另有模拟组合类技能,可用于更轻量的模拟验证,但它与实盘柜台链路是两回事,两者之间也没有已证实的集成关系。