很多人讨论交易机器人时,核心问题通常是:
你用什么指标?
胜率多少?
什么时候买?
什么时候卖?
这些当然重要。
但做完整系统以后,我越来越觉得:
一个可运行的交易机器人,本质上不是一个信号策略。
信号只是第一层。
真正的系统更接近:
Signal
→ Execution Gate
→ Position Sizing
→ Position Management
每一层都可能决定:
最终到底有没有这笔交易。
1. 第一层:Signal
Signal Layer 回答的是:
市场里是否出现了值得参与的机会?
一个成熟的信号层通常不会只依赖单一指标。
它可能组合:
- 趋势;
- 突破;
- 动量;
- 均值回归;
- 波动状态;
- 成交行为;
- 多种形态之间的共振。
最终得到的也不应该简单理解成:
“马上买。”
更准确是:
现在出现了一个候选交易事件。
2. Signal ≠ Trade
这是我越来越重视的一点。
一个信号产生以后,还可能因为很多原因不应该真正开仓。
例如:
- 数据没有确认;
- 当前已经有仓位;
- 行情源异常;
- 账户余额不足;
- 下单数量达不到最小要求;
- 交易所还有未处理订单;
- 杠杆状态没有同步完成;
- 信号已经过期;
- 自动化并不处于允许运行的状态。
所以:
Signal 只是交易候选,不是最终订单。
3. 第二层:Execution Gate
Execution Gate 的职责就是判断:
现在是不是一个可以安全执行的状态?
它不是用来提高方向预测胜率。
它更像一个系统健康门。
只有:
- 数据健康;
- 仓位状态一致;
- 订单状态一致;
- 风险参数准备完成;
- 信号仍在有效期;
- 账户满足要求;
才允许真正发单。
否则:
宁可错过,也不延迟追单。
4. 为什么信号需要有效期?
这是自动交易系统和回测差异很大的地方。
回测里,一个信号似乎永远存在。
但实盘里:
5 分钟收盘时有效的机会,十几秒后可能已经不是同一笔交易。
如果:
- API 异常;
- 网络中断;
- 杠杆设置失败;
- 行情源短暂不可用;
系统不应该等恢复后,在完全不同的价格上追进去。
因此一个很重要的原则是:
Signal has a lifetime.
交易机器人不只是判断方向,还要判断:
这个判断是否仍然来得及执行。
5. 第三层:Position Sizing
即使同样的信号最终允许执行:
也不意味着每一笔应该使用同样仓位。
仓位层回答的是:
这笔交易应该承担多少账户风险?
它可能同时考虑:
- 信号质量;
- 当前账户状态;
- 最近亏损情况;
- 当前回撤;
- 配置的最高杠杆。
所以:
Direction 和 Size 是两个不同决策。
同样一个方向信号:
- 账户健康时,可以允许更多风险;
- 连续亏损后,应该自动收缩;
- 回撤扩大时,也应该限制风险。
6. 第四层:Position Management
开仓以后,又进入完全不同的问题:
怎么活着退出?
这包括:
- 初始保护;
- 动态保护;
- 跟踪退出;
- 异常断连时的交易所托管保护;
- 仓位状态恢复;
- 真实成交均价;
- 最终结算和记录。
所以一个方向判断正确,也不保证这笔交易最终赚钱。
因为:
Entry is only the beginning of the trade path.
7. 为什么保护单应该尽量靠近交易所?
程序运行时,总会面临:
- 网络断开;
- 本地进程崩溃;
- API 超时;
- 行情源暂停;
- VPS 异常。
如果所有保护都依赖程序本地运行,那么一旦程序失联:
仓位可能在最危险的时候完全裸奔。
所以比较合理的设计是:
建仓后尽量让最基础的灾难保护托管在交易所侧。
程序再负责动态更新更复杂的保护状态。
8. 为什么“没有交易”也是系统输出?
很多策略研究天然追求:
更多信号。
但真正运行以后,会发现:
NO TRADE 也是一种正式结果。
如果:
- 信号不够清晰;
- 执行条件不健康;
- 风险状态不允许;
- 机会已经过期;
系统应该可以什么都不做。
这不是“漏单”。
而是系统明确决定:
这笔交易不值得现在执行。
9. 为什么系统层研究比指标研究更难?
因为单个指标研究很容易:
输入数据 → 输出信号 → 看胜率。
完整系统则是:
数据
→ 信号
→ 状态
→ 风险
→ 订单
→ 成交
→ 保护
→ 退出
→ 账户状态更新
→ 影响下一笔交易
每一层都会影响下一层。
于是结果变成高度路径依赖。
这也是为什么生产代码回放,比单纯策略公式回测更重要。
10. 一个更完整的 Trading Bot 应该验证什么?
除了信号本身,还应该验证:
- 时间边界是否正确;
- 数据是否过期;
- 实盘价格源是否健康;
- 是否重复执行;
- 持仓和本地状态是否一致;
- 是否存在未处理挂单;
- 风险状态是否因果;
- 保护单是否真正建立;
- 中断恢复后是否还能恢复状态;
- 真实执行是否偏离研究假设。
这些问题可能完全不影响“历史胜率”。
但它们会决定:
这个机器人能不能真正运行。
最后
我现在越来越不喜欢把一个自动交易系统描述成:
“一个 BTC 买卖策略。”
它更接近:
一个持续运行的决策系统。
Signal 只是开始。
真正决定系统长期表现的,是后面的:
Execution
Risk
Sizing
Protection
State
所以一个交易机器人最重要的问题,不只是:
它什么时候买?
而是:
它什么时候决定不买?
它买多少?
它怎么保护自己?
系统异常时会发生什么?
这些问题加在一起,才更接近真实的自动交易。
本文仅记录自动交易系统研究,不构成投资、交易或财务建议。历史研究结果不代表未来表现。