依据价格相关性的统计数据过滤信号:打破“市场随机”迷思
“过去的价格不影响未来”——这是学院派最爱念的咒语,也是无数亏损系统的根源。Larry Williams 在《短线交易秘诀》里直接打破了它。本文用 MQL5 做了两组统计实验:第一组证明“前一根收阴后,下一根回补上涨的概率显著 >50%”;第二组把“星期几”当成过滤器(TDW 策略),让一个双 MA+MACD 系统只在一周特定日子开仓,效果立判高下。
一、市场真的随机吗(打破神话)
掷硬币每次都是独立 50/50,没有记忆。如果市场也这样,那“昨天的阴线”对“今天的阳线”毫无影响。作者用 MQL5 向导搭了个模拟 EA:记录每根K线收阴后,接下来 1/2/3 根K线收涨的百分比。结果一目了然——价格有明显“把损失赢回来”的倾向,前一根的走势对后一根影响相当显著。市场不是掷硬币。
// 模拟:统计“前一根收阴”后,后续K线收涨的比例
if(close[1]<open[1] && count==0) { // 上一根收阴
open_cur=open[0]; close_cur=close[0];
if(close_cur>open_cur) profit_trades++; else loss_trades++;
}
二、TDW 策略:按星期几过滤
既然价格行为和时间有关,那就把“星期几”当过滤器。作者让系统在一周的不同日子分别只做多/只做空,回测结束后挑表现最好的那天作为过滤器。现象背后可能是宏观日历、资金节奏,或是 A. Elder 说的“周一二是散户止损日、周四周五是机构时间”。无论原因,统计上它成立,就能用。
三、双 MA + MACD 信号系统
被过滤的主体是个简单系统:快速 EMA 上穿慢速 EMA 且 MACD 柱低于零 → 做多;快线下穿慢线且 MACD 柱高于零 → 做空。以固定 0.1 手、跟踪止损平仓。逻辑封装在 moving.mqh 的 my_expert 类里,EA 主文件只负责按星期几调用。
// 只在周五看多信号、周一看重空信号(示例)
if(PositionsTotal()<1){
if(day_of_week==5 && expert.check_for_buy()) expert.open_buy();
else if(day_of_week==1 && expert.check_for_sell()) expert.open_sell();
} else expert.position_modify();
四、用 MQL5 把过滤器落进 EA
- 用 TimeToStruct(TimeCurrent(),time) 取 day_of_week
- 把“星期几→方向”的映射做成输入参数,方便回测不同组合
- 信号产生处套一层 day_of_week 判断,非目标日直接跳过
- 与 my_expert 类解耦:过滤是 EA 层逻辑,信号是类层逻辑
五、注意事项与误区
统计过滤不是印钞机。两点务必警惕:① 样本要够长,几周的“周一效应”可能是噪声,至少拉一年以上;② 过滤器和信号要分别验证,别把“恰好同期市场单边”误当成“过滤器有效”。最稳的做法是样本内找规律、样本外再验一次。
六、把多种过滤器叠加使用
星期几只是最直观的一维。实战中常把 TDW 与其他统计维度叠加:比如“仅在周五(day_of_week==5) 且 当前波动低于近 20 根平均”时才放行做多信号。维度越多,样本被切得越细,每片必须仍有足够样本量,否则噪声盖过规律。稳妥做法是先单维验证、再二维组合,且组合后必须重新做样本外复核。
- 时间维:星期几、时段(亚盘/美盘)、月初月末
- 波动维:ATR 分位、波动是否突破阈值
- 相关维:与标的指数/美元指数的同期相关性
- 样本纪律:每片子集至少数百笔,否则不采信
七、小结
价格相关性统计给交易者一把“过滤假信号”的刀:先用模拟打破“市场随机”的迷信,再用 TDW 这类时间维度把系统 trimmed 到高胜率区间。MQL5 的实现很轻——TimeToStruct 取星期几、my_expert 类封装信号、EA 层一句 day_of_week 判断就完成过滤。记住,统计有效的前提是样本够长且样本外复核,否则这把刀容易割到自己。