第二章:实盘环境概览——从回测到实盘,你准备好了吗?
说实话,很多做量化的人,回测跑得飞起,一到实盘就翻车。我见过太多这样的案例了。我自己刚开始做套利的时候,也踩过这个坑——回测年化30%,实盘第一周就亏了5%。问题出在哪?
说白了,回测和实盘根本就是两码事。这一章,我就带你看看实盘环境到底长什么样,跟回测有什么区别,以及一个完整的实盘系统需要哪些核心组件。
一、回测 vs 实盘:天壤之别
先别急着写代码。你得先搞清楚,回测和实盘到底差在哪。
| 对比维度 | 回测 | 实盘 |
|---|---|---|
| 数据来源 | 本地历史数据,完美无缺 | 实时行情流,有延迟、有断线 |
| 成交模拟 | 假设市价成交,无滑点 | 真实盘口,有滑点、有拒单 |
| 延迟 | 零延迟,瞬间计算 | 网络延迟、交易所处理延迟 |
| 资金管理 | 理想化,无风控 | 实时风控,保证金、仓位限制 |
| 错误处理 | 忽略异常 | 断线重连、订单状态异常 |
核心结论:回测是理想世界,实盘是真实战场。你在回测里忽略的每一个细节,实盘都会加倍还给你。
我记得有一次,我的回测策略在螺纹钢和热卷的套利上表现特别好。结果实盘一跑,发现行情数据偶尔会断个几百毫秒。就这几百毫秒,导致我的价差计算错了,下了反向单。嗯,那笔亏损够我吃一个月盒饭的。
二、实盘环境的三大核心组件
一个靠谱的实盘环境,至少需要三个东西:行情模块、交易模块、风控模块。缺一个,你就等着交学费吧。
1. 行情模块:你的眼睛
行情模块负责接收交易所的实时数据。对于套利来说,你需要的是Tick级数据——就是每一笔成交或者每500ms的快照。
- 数据源:CTP、易盛、飞马等柜台接口
- 数据内容:最新价、买卖盘口、成交量、持仓量
- 关键指标:延迟要低(<50ms),数据不能丢
我的经验:别只用一家行情源。我习惯同时接两路行情,主用CTP,备用易盛。一旦主路断了,自动切换。这个设计救过我至少三次。
2. 交易模块:你的手
交易模块负责把策略信号变成真实的订单,发到交易所。这里坑最多。
- 下单接口:CTP交易接口、API封装
- 订单管理:订单状态机(已报、部分成交、全部成交、已撤单)
- 错误处理:重连机制、订单超时处理
你想想看,如果网络闪断了一下,你的订单到底成交了没有?如果没成交,你该不该重发?如果成交了,你重发了就变成双倍仓位了。这个问题,我在第一周就遇到了。
避坑指南:我曾经因为订单状态机没写好,导致同一个套利对下了两次单,仓位翻倍。那晚我盯着账户盯到凌晨三点。后来我加了一个「订单去重」模块,每次下单前先查本地订单缓存。
3. 风控模块:你的刹车
风控模块是实盘环境里最容易被忽视,但最重要的部分。没有风控,你就是在裸奔。
- 资金风控:保证金占用不能超过总资金的80%
- 仓位风控:单品种持仓上限、单腿持仓限制
- 异常风控:连续亏损次数、最大回撤阈值
- 网络风控:断线超过N秒自动平仓
我的原则:宁可错过,不可做错。风控模块的优先级高于策略模块。如果风控触发,策略必须无条件让路。
三、整体架构设计:一张图说清楚
下面这张图,是我自己实盘环境的架构。你看一眼就明白了。
这个架构的核心思想是分层解耦。每一层只做自己的事,层与层之间通过消息队列通信。这样哪怕行情模块挂了,交易模块还能正常工作一段时间。
四、实盘环境搭建的几条铁律
- 先模拟后实盘:别一上来就真金白银。先用模拟盘跑一周,看看行情延迟、订单成交情况。
- 冗余设计:行情源至少两个,网络线路至少两条。我见过有人因为一根网线断了,亏了十几万。
- 日志记录:所有操作都要记日志。行情数据、订单状态、风控触发,一个都不能少。出了问题,日志是你唯一的线索。
- 人工干预通道:万一程序出bug了,你得能手动平仓。我习惯在手机上装一个交易APP,作为最后的保险。
一个小技巧:实盘环境搭建好后,先放1手跑一周。别贪多。1手亏了不心疼,但能帮你发现90%的问题。
五、总结
实盘环境不是回测的简单升级版。它是一个全新的系统,需要你重新思考每一个环节。行情、交易、风控,这三个模块缺一不可。架构设计上,分层解耦、冗余备份、日志记录,这三条铁律要刻在脑子里。
下一章,我会带你手把手搭建行情模块。到时候咱们再细聊CTP接口的那些坑。
公众号:蓝海资料掘金营,微信deep3321