将概率论应用于缺口交易:从随机漫游假想破局策略根基(基础篇)
(1/3)· 多数 EA 回测漂亮实盘崩,只因跳过了用概率证伪思路这一步
把概率论塞进缺口交易里
在 MT5 的行情里,价格跳空(缺口)常被当成噪音,但从概率论视角看,它更像是偏离随机漫游假设的可捕捉样本。Aleksey Nikolayev 在 2019 年 2 月发布的统计研究,累计被查看 2458 次、收到 26 条讨论,说明这类硬核量化思路在交易者里有稳定需求。 所谓策略,本质是在对抗「价格随机游走」这个默认假设——如果你相信下一根 K 线和缺口毫无记忆,那任何择时都是徒劳;而缺口交易者的赌注恰恰是:跳空后的回填或延续,存在可统计的偏向。 外汇与贵金属跳空多发生在周末休市后或重大数据夜,杠杆环境下回撤极快,属于高风险场景;用概率框架去算每笔成交的风险上限,比凭手感扛单更不容易爆仓。
◍ 从随机漫游假说里找策略缝隙
价格若严格服从零漂移随机漫游,即每一刻的涨跌期望为零、无方向性趋势,那么任何试图靠方向判断获利的交易在概率上都无法稳定胜出。这一点不是空谈,而是随机过程理论的直接推论:漂移项为 0 时,长期收益均值趋近 0。 所以可行的切入点是检测实际报价序列相对该假说的偏离。若能找到统计上显著的偏离(比如某周期内的漂移不为 0,或收益分布存在可捕捉的偏度),就相当于拿到了反制随机漫游假说的证据,进而有可能据此搭建交易逻辑。 此前已就风险议题做过两篇铺垫,本系列把它们作为基准参考。方法根植于概率论,不强制读者背公式,但得明白大数定律在干什么:越是系统、高频地复用同一套概率化规则,结果的稳定性越可能显现。外汇与贵金属杠杆高、跳空频繁,这类统计策略实盘前必须在 MT5 用真实点差回测论证,不可直接轻信理论偏移。
「把EA逻辑压成可验证的简化模型」
把一套 EA 拆开看,开发流程通常分三步:先有思路,再用各种简化去验证思路,最后让思路适配真实市场。本文聚焦中间这步——论坛里对它讨论最密集,也最容易被忽略细节。 我们做的简化很硬:只做单一资产、价格以账户货币计、剔除利息与出入金、只用市价单、忽略滑点、点差 s 设为固定值,且账户由这一只 EA 全权掌管。在这些前提下,EA 的结局被完全锁定成 v(t) 函数——随时间变化的持仓量,正为买、负为卖,配合 p(t) 价格函数和 c0 初始资金。
| v(t) 与 p(t) 都是分段常数(步进)函数,取值是最小增量的整数倍;约定两者缺口不重叠,即任一时刻最多只变价格或只变持仓。由此推导 c(t) 资金曲线:价格动则资金变动机为 v×Δp,持仓减量(部分平仓)资金不变,持仓加量则资金扣掉 s× | Δv | 。因为账户只有这一只 EA,c(t) 就是 MT5 里的净值。 |
|---|
把连续函数换成数字序列是关键一跃:用「简单仓位」(开平之间量向不变)之和表示任意仓位,转而分析每笔交易的盈利 a 与风险 r,满足 c1/c0 = 1 + r a。这避开了对随机过程的复杂建模。 参数也分三层:历史参数(逐笔浮动,如指标值、月相)、实际参数(启动即定,用于回测)、元参数(管优化算法,如多目标权重)。本文对历史参数再砍一刀——假定回报分布对其依赖微不足道,否则模型过度复杂必过拟合。外汇与贵金属属高风险品种,这套简化仅利于逻辑验证,实盘须重估滑点与多点差冲击。
用 Q 值拆穿随机漫游的盈利假象
价格行为没有精确模型,但近似模型能帮我们排雷。随机漫游假想把价格看成零漂移的维纳过程:无趋势、无定向,任何 EA 在零点点差下平均利润趋近零,非零点差则数学期望值转负。 要反制这个假想,核心不是找圣杯,而是检测统计偏差。我们构造一个量 K=(p2-p0)/(p0-p1),其中 p0 是入场价,p1 是止损价,p2 是到止损触发前离 p1 最远的价格。K 恒大于等于 0,代表这笔交易可实现的最大盈利倍数。 直接看 K 不方便,换成 Q=K/(K+1)=(p2-p0)/(p2-p1),它落在 [0,1) 区间,物理意义是止盈占(止损+止盈)的比率。在纯随机漫游下,Q 的理论分布极其简单:Fq0(x)=0(x≤0),Fq0(x)=x(0<x≤1),Fq0(x)=1(x>1)——也就是均匀分布在 [0,1]。 实战做法:拿 n 个历史入场点,每个记录 p0,i、p1,i,再找出各自对应的 p2,i,算出 Qi 样本。经验分布 Fq(x)=m(x)/n,m(x) 是小于 x 的样本数。若 Fq(x) 明显偏离那条 45 度直线(Fq0),说明价格可能有可捕获的偏向;但偏差只是必要条件,还要代入点差算期望收益是否为正。 若经验分布显著异于随机漫游且期望为正,就可以用最大化盈利预期来挑止盈/止损比,再定每笔风险值,早期砍掉不靠谱思路。复杂离场算法同理,解析解难求时,用蒙特卡罗模拟逼近随机漫游的经验分布即可。外汇与贵金属杠杆高、点差侵蚀快,这类统计优势一旦样本外衰减,负期望会立刻显现。
◍ 缺口统计落地与品种筛选
把缺口当研究对象,第一步是定义什么叫“缺口”。资产价格离散跳动,大跳才叫缺口,边界自己定。外汇里标准跳空少,可泛化为任意两段价格之差,比如美盘收盘到次时段开盘的缝隙。时段用期限、长度、顺移三个间隔形式化,能覆盖分钟柱之间的跳。 两个采集 EA 都不交易,只在真实环境跑统计:gaps_reg_stat 抓连续逐笔报价间缺口,建议基于真实 tick;gaps_ses_stat 抓时段间缺口,基于分钟 OHLC。CGaps 类里的 go[] 存未补齐缺口索引,纯粹为加速。每条记录绝对缺口值、Q 值、闭合数据、间隙值,再用 Kolmogorov-Smirnov 单样本检验看经验分布和均匀分布的偏离,p-value 越小越不像随机漫游。MQL5 没有这检验,原文用 R 补。
- 个选项跑出来,EURUSD 逐笔报价 200 缺口 p-value 3.47e-07、均差点差 0.000695;USDJPY 时段间 50 缺口 p-value 0.00919、均差点差 0.0185。顺缺口方向交易期望为负,回补方向略正但 EURUSD 利润薄。点差在逐笔/分钟缺口时可能翻数倍。按时段看,一年维度偏离很小,横盘回补优于趋势。
筛选结论指向 USDJPY 的分钟柱线缺口继续深挖——200 缺口 p-value 0.00037、均差点差 0.05148,偏离显著且点差可控,比逐笔报价的 0.09563 好接。外汇和贵金属缺口策略实盘高风险,样本偏离不承诺可盈利,只给验证起点。
class=class="str">"cmt">// gaps_reg_stat.mq5 class="macro">#define ND class="num">100 input class="type">class="kw">double gmin=class="num">0.1; class=class="str">"cmt">// 最小缺口大小: USDJPY - class="num">0.1, EURUSD - class="num">0.001 input class="type">class="kw">string fname="gaps\\stat.txt"; class=class="str">"cmt">// 统计文件名 class="kw">struct SGap { class="type">class="kw">double p0; class="type">class="kw">double p1; class="type">class="kw">double p2; class="type">class="kw">double p3; class="type">class="kw">double s; class="type">void set(class="type">class="kw">double p_1,class="type">class="kw">double p,class="type">class="kw">double sprd); class="type">bool brkn(); class="type">void change(class="type">class="kw">double p); class="type">class="kw">double gap(); class="type">class="kw">double Q(); }; class CGaps { SGap gs[]; class="type">int ngs; class="type">int go[]; class="type">int ngo; class="kw">public: class="type">void init(); class="type">void add(class="type">class="kw">double p_1,class="type">class="kw">double p,class="type">class="kw">double sprd); class="type">void change(class="type">class="kw">double p); class="type">void gs2f(class="type">class="kw">string fn); }; CGaps gaps; class="type">MqlTick tick0;