WonderTrader / Live Trading

wondertrader 实盘部署:M+1+N 多账户、启动顺序与一致性约束

实盘的复杂度主要不在策略,而在「多进程协同」和「多账户映射」。官方给出的 M+1+N 架构把这两件事分开处理:组合层负责把子策略的目标头寸轧平成净头寸,执行层再按账户的资金规模与风险偏好放大手数。这一页把官方实盘攻略里的步骤、算例与两条必须一致的约束整理成清单。

架构:M+1+N进程:数据组件 + 交易进程多账户:按手数倍率映射前置:行情与交易账号
M:子策略各自出目标头寸
1:组合层轧平·净头寸·倍率
N:交易通道多账户并发执行
M+1+N 执行架构示意(依据官方 README 与官方 FAQ「如何理解策略组合」);示意非官方架构图,手数倍率计算方式以官方文档为准。
Architecture

M+1+N 三步:从子策略到多个账户

官方对「组合」的定义很直接:一个交易进程中有且只有一个组合,代码上等价于一个引擎实例;组合层额外持有持仓、成交与资金概念。

  1. 子策略各自生成目标头寸

    每个子策略独立计算自己要持有的目标头寸。预期此时各策略互不干扰,即使交易同一标的也不会互相抵消。官方强调:多个子策略不是共享组合的持仓,而是组合汇总了子策略的持仓。

  2. 组合层每分钟汇总并轧平

    组合按固定节奏汇总每个子策略的目标头寸,把相反方向的头寸轧平,得到组合的净头寸。预期自成交风险被消除,同时降低保证金占用与佣金开销。这是官方给出的机制收益,不是收益承诺。

  3. 净头寸提交执行器,按账户分发

    净头寸交给执行器执行;执行器再按各账户配置的手数倍率,同步分发到多个交易通道。预期不同账户得到与自身风险参数匹配的仓位,但绩效的一致性由组合层保证。

为什么这样设计:官方把它归因于机构场景 —— 同一时期可能同时管理很多个账户,而这些账户用的策略组合是相同的。轧平后统一分发,可以让一份策略组合服务多个不同资金规模与风险偏好的账户,而不用为每个账户复制一套策略。
Multi-account

多账户手数倍率:官方算例读法

官方用一组具体数字说明了倍率是怎么算的。下面把它拆成表,同时标清哪些是「示例」而不是「规则」。

对象官方示例设定推导出的倍率说明
组合盘基准资金规模 500 万,预期收益 30%,最大回撤 10%,收益风险比 3:1基准 1 倍这是官方示例中的基准盘设定,指标仅为举例,不构成任何收益预期
账户 A资金 1000 万,可接受最大回撤与基准盘一致(10%)2 倍官方给的算法是资金规模除以基准盘资金规模
账户 B资金 1000 万,可接受最大回撤 20%4 倍官方说明:风险容忍度翻倍,手数比例再放大一倍
风控配置不同账户可配置独立风控逻辑官方明确账户之间不会互相影响
绩效核算策略理论部位独立存储,组合整体绩效独立核算便于团队内部按策略或按组合做考核
保密性核心代码为 C++ 层官方把策略保密性列为团队内控场景的优势之一
示例边界:上表的资金规模、收益预期与回撤数字全部来自官方文档的举例,用于说明倍率的映射关系。它不是配置模板,更不是收益或风险承诺;实际倍率应按你的资金、风控与合规要求自行设定。
Processes

实盘要跑哪几个部分

实盘不是单个程序。官方「实盘完整攻略」把一个可用的实盘环境拆成基础文件、数据组件与交易进程三块。

组成部分作用启动时机关键配置注意点
基础文件目录品种、合约、节假日、交易时段、佣金等配置启动前准备品种、合约、节假日、时段与费率文件期货与股票用的文件名不同,股票侧另有品种、标的与费率文件
数据组件实时录制行情、落地数据、广播给策略开盘前(官方示例为 9:20)行情通道、落地目录、广播地址与端口、订阅查询端口收盘作业默认在 16:00 执行;落地目录与广播端口要和交易进程一致
交易进程运行策略、生成目标头寸、执行下单数据组件启动之后引擎名称、费率、过滤器、交易时段模板、数据读取路径、行情与交易通道引擎名称取值决定用哪个引擎;交易时段模板可选用覆盖国内全部品种的最大模板
策略目录存放策略代码随交易进程策略实例参数策略实例名会决定输出目录与日志文件名,命名要可区分
日志目录记录运行日志与策略日志运行后生成日志配置文件数据组件与交易进程各自有日志配置,排查时先看哪一个要先分清
控制台服务监控组合与通道、自动调度与交易进程并行部署根目录、端口默认初始口令属官方文档公开值,部署后必须立即修改
Constraints

两处必须一致:官方点名的头号错因

官方在实盘流程指引里专门写了「注意事项」,只有两条,但都指向同一类问题:配置之间没对齐。

约束官方原文要求不一致的表现核对方法
广播端口一致数据组件配置里的广播端口必须与交易组合的行情接收端口一致交易进程起来了但收不到行情,策略不触发把两个配置文件的端口字段并排核对
数据目录一致交易组合配置里的数据目录必须与数据组件配置的一致回测能跑、实盘读不到历史数据核对两个配置里的数据路径字段
录制范围与合约文件一致行情通道里填写的合约代码必须与合约文件中的代码一致部分标的始终没有行情用合约列表逐项比对录制范围
品种映射完整新增品种需同步维护映射文件引擎初始化直接报错检查映射文件是否含该品种键
行情与交易账号有效行情账号与交易账号需分别配置,交易账号另有授权字段行情正常但下单失败或返回权限错误先用柜台提供的测试环境验证账号与权限
Stock notes

股票与期货的三处写法差异

把期货策略改造成股票策略时,官方文档明确列了三个必须改的地方,任何一处漏改都会出现信号或成交异常。

要点期货写法股票写法漏改后果注意点
取历史数据直接用标的代码代码后需加复权标识后缀拿到不复权数据,回测与实盘口径不一致官方说明历史数据一定要用复权数据
交易单位按合约手数国内股票买入须按 1 手 100 股挂单下单数量被拒或数量级错误策略里要用交易单位做换算,不能直接传股数
发出信号的代码与取数代码一致信号代码不能带复权后缀报错或找不到标的取数与发单用两套写法,这是最容易错的一处
做空逻辑支持开空股票不可做空产生无效信号与异常日志官方示例在策略里用条件判断屏蔽做空分支
T+1 机制不适用存在 T+1 约束当日买入当日卖出被拒官方更新日志记录了对 T+1 交易机制的支持,策略需按此设计
交易时段模板按品种选择可选用覆盖全部品种的最大模板时段配置错导致行情驱动异常官方说明该模板覆盖从夜盘到次日下午的完整范围
First day

上线当天的执行顺序

官方对顺序有明确要求,颠倒顺序会让交易进程在无行情状态下启动。

  1. 提前确认合约与主力规则

    用官方提供的合约加载器拉取最新品种与合约列表;若要用主力合约代码,还需用官方的主力确定工具更新换月规则。预期基础文件中的品种与合约是最新的。注意新增品种需同步补全映射键。

  2. 开盘前启动数据组件

    官方示例是在 9:20 左右启动。预期看到日志目录与数据目录生成,实时目录下出现按交易所分目录的文件并随行情增长。

  3. 核对两处一致性

    比对广播端口与数据目录是否与交易进程配置一致。预期两处完全对齐。这一步花一分钟,能省掉当天大量排查时间。

  4. 启动交易进程

    运行交易组合入口脚本。预期组合状态变为运行中,控制台能看到组合、策略与通道数据。

  5. 用控制台确认三个信号

    看组合日志是否有行情驱动记录、策略信号是否按预期产生、交易通道是否返回委托与成交。预期三个来源都能看到数据。

  6. 配置自动调度与进程守护

    在控制台为组合配置计划任务(按周设置启动、停止、重启)与进程守护,避免人工守着开盘收盘。预期任务按设定时间自动执行。

Troubleshooting

实盘排查表

实盘的问题集中在进程协同、配置对齐与账号权限三类,按这个顺序查最快。

现象可能原因核对方法处理方向
交易进程启动后无任何行情数据组件未启动,或广播端口与接收端口不一致先确认数据组件进程在跑,再比对端口调整端口后按顺序重启两个进程
策略有信号但没委托通道过滤器被打开、策略过滤器生效,或交易账号未授权看控制台组合风控页面的过滤器状态与通道日志关闭对应过滤器;确认交易账号权限范围
账户实收仓位与理论仓位不符手数倍率配置错误,或被账户级风控拦截核对各账户的倍率配置与账户风控阈值先校正倍率,再复核风控参数
实盘读不到历史数据交易进程的数据目录与数据组件落地目录不一致比对两个配置文件里的数据路径字段统一路径后重启交易进程
当日收盘后历史数据没有更新数据组件的收盘作业未执行,或运行时段配置有误检查数据显示时段对应的作业时间配置核对交易时段模板与作业时间,必要时手工验证一次
部分标的始终没有行情录制范围的合约代码与合约文件不一致把录制范围与合约文件逐项比对统一代码写法后重启数据组件
下单被拒且提示频次或额度通道流量风控触发看风控参数中的撤单与下单次数边界设置按柜台实际限制调整风控阈值,不要直接关闭
FAQ

常见问题

实盘相关的问题以官方文档「实盘完整攻略」与「常见问题」为准,本站未做任何实盘验证。

一个交易进程能跑多个策略组合吗?

不能。官方说得很明确:一个交易进程中有且只有一个组合,组合在代码上的存在形式等同于一个引擎实例。也就是说一个引擎就是一个组合。要多组策略并行,就起多个交易进程,然后由控制台统一监控与调度,这样也便于按组合分别核算绩效。

子策略之间会互相干扰吗?

不会。官方特别区分了一个容易误解的点:多个子策略不是共享组合的持仓数据,而是组合汇总了子策略的持仓数据。因此即使不同策略交易同一标的,各自的理论部位仍然独立存储、独立核算,团队内部考核也能按策略或按组合分别做。

多账户的手数倍率可以随便放大吗?

不可以。倍率的作用是把组合的净头寸映射到不同账户,官方示例中倍率由「账户资金规模除以基准盘资金规模」以及「账户可接受回撤相对于基准盘的比例」两个因素决定。放大的同时也在放大该账户的风险暴露,且不同账户可以配独立风控来限住。实际倍率必须结合你的风控与合规要求设定,本文不提供任何配比建议。

实盘必须先跑数据组件吗?

是。官方的实盘流程是先在开盘前启动数据组件录制行情并落地,再启动交易进程运行策略,交易进程通过本地广播接收行情。跳过数据组件的直接后果是策略收不到行情驱动,同时当天的行情也不会被落地,后续历史数据出现空洞。

实盘和回测的口径会不一致吗?

官方在设计上尽量减少这种漂移:回测与实盘共用同一套引擎与同一个数据读取模块,回测环境还能通过扩展加载器与实盘共享历史数据来源。但仍存在必然差异,比如实盘要面对真实撮合、网络与柜台限流,回测则依赖模拟撮合。因此回测通过不等于实盘可用,官方文档也把仿真跟踪列为回测与实盘之间的独立环节。

一开始就要用实盘账号吗?

不需要,而且不建议。官方在回测与实盘之间明确列了「仿真跟踪」环节:先跟踪一段时间看样本外表现,符合要求再上实盘。本框架自身提供仿真交易能力,柜台侧通常也有仿真环境,可以先跑通全链路。EasyClaw 侧另有模拟组合类技能,可用于更轻量的模拟验证,但它与实盘柜台链路是两回事,两者之间也没有已证实的集成关系。

上线之后,先想清楚怎么刹车

实盘跑起来只是开始:组合资金、通道流量、账户资金三层风控与离合器机制,才是能长期运行的前提。