🏇
自适应交易系统:多策略虚拟赛马与实时跟赢
不让单一策略死扛市场,而是让一群策略同时跑虚拟交易,每根 K 线选出当下最赚钱的那个去实盘跟单。
自适应系统虚拟交易策略组合面向对象动态选择
思路:为什么需要自适应
没有一种策略永远有效。自适应系统的做法是:把多个策略(如不同周期均线、不同指标)装进同一个 EA,各自跑虚拟交易记录盈亏,每根新 K 线挑出当前最赚钱的策略,让实盘跟随它的方向。
✦
它不是参数优化,而是策略择优——市场切换风格时,自动从领跑策略切换到下一匹领跑者。
虚拟交易(Virtual Trade):不成交只记账
每个策略在内部模拟开平仓,维护虚拟余额、净值、持仓,但不向交易所发单。虚拟盈亏只用于绩效评比,不占用资金、不被点差影响。
策略容器与面向对象设计
用 CArrayObj 把全部策略对象装进一个容器(m_all_strategies)。基类 CSampleStrategy 定义虚函数 CheckTradeConditions(),具体策略(CStrategyMA/CStrategyStoch)各自实现,统一调用、易于扩展。
- OnInit 循环 new 出 N 个策略并设参后入容器
- OnTick 遍历容器,每个策略算虚拟信号与虚拟盈亏
- 用 ArrayMaximum 选出虚拟业绩最好的策略索引
只在新 K 线评选一次
用 IsNewBar() 控制:每根新 K 线才做一次全策略虚拟结算加选冠军,避免被单根 K 线内的 tick 噪音反复切换。
空仓保护与反趋势补充
若所有策略虚拟业绩都为负,系统不开真实仓——宁可空仓也不跟亏。可加入信号反转型策略(如 CStrategyMAinv)应对横盘,但文章提醒:用最差策略取反并不能改善系统,别迷信。
✦
自适应不是万能药:若候选策略池里没有一个能盈利,系统整体也无效。选好策略比搭框架更重要。
进阶技巧
- 自定义绩效函数:用近 3 笔虚拟成交均值等统计代替累计净值,更敏感
- 设虚拟 SL/TP 让虚拟仓自动平仓,模拟真实退出
- 定期把虚拟盈利归零(SetVirtualCumulativeProfit),防止早期领先者转亏后拖累太久
- 上线初期限制实盘,只用虚拟观察,等策略分化稳定再跟单
常见问题
多周期均线还是一种逻辑、多个参数;自适应是多个不同逻辑的策略同场竞技,动态选冠军,容错性更强。
都是内存计算,几十上百个策略的虚拟结算在毫秒级,远低于网络发单耗时。
①只在新 K 线评选;②用近 N 笔均值做绩效,过滤单笔噪音;③设切换阈值(冠军需领先亚军一定幅度才换)。
偏高级,需要扎实的 MQL5 面向对象基础(建议先学 012/013)。但它的策略容器加虚拟赛马思想对任何量化者都有启发。