概率论与数理统计示例(第一部分):基础与初级理论·综合运用
📊

概率论与数理统计示例(第一部分):基础与初级理论·综合运用

(3/3)·从组合概率到假设检验,用一套完整推演看清行情背后的随机与结构

新手友好 第 3/3 篇

很多交易者把连续三根阳线当成趋势确认,却没算过在纯随机波动里这种形态出现的概率本就不低。等到把伯努利方案和假设检验真正串起来,才会发现不少自认的“信号”只是噪声。本篇作为系列收尾,把前两篇的基础与初级理论拉进同一个综合运用框架。

「用二项分布给走势序列做显著性截断」

这段脚本把一段已标注的走势序列拆成四个计数格:当前段上行且下段仍上行记 nuu,当前上行下段转下行记 nud,当前下行下段转上行记 ndu,当前下行下段续下行记 ndd。汇总后 nu=nuu+nud、nd=ndu+ndd,再算出上行续涨概率 p1e=nuu/nu 与下行反转概率 p2e=ndu/nd,相当于把「惯性」和「折返」分别量化。 输入参数给得很直接:nm=27 是总走势数,kup=16 是其中上行走势数,p0=0.5 是零假设下的随机概率,alpha1=0.05 是单侧误判容忍度。OnStart 里调 MathQuantileBinomial 算出上下临界值 kl 与 kr,若 kup<=kl 或 kup>=kr 就说明该序列的上行占比不太像随机游走,倾向存在方向偏好。 下面这段 Python 用超几何分布做了平行验证:n1=21、n2=6 两组样本,成功数 k1=15、k2=1,同样取 alpha1=0.05 算 kl/kr。跑出来 k2=1 远低于 kr,说明小样本那组的成功数显著偏少,概率上不太可能由抽样噪声解释。外汇与贵金属波动受杠杆与跳空影响,此类统计仅作样本特征筛查,实盘仍需结合风控。

MQL5 / C++
if(mv[i + class="num">1] > class="num">0) ++nuu;
else ++nud;
}
else
{
if(mv[i + class="num">1] > class="num">0) ++ndu;
else ++ndd;
}
nu = nuu + nud;
nd = ndu + ndd;
if(nu > class="num">0) p1e = ((class="type">class="kw">double)nuu) / nu;
if(nd > class="num">0) p2e = ((class="type">class="kw">double)ndu) / nd;
}
class="macro">#include <Math\Stat\Binomial.mqh>
class="macro">#class="kw">property script_show_inputs
class=class="str">"cmt">//+------------------------------------------------------------------+
class="kw">input class="type">int    nm = class="num">27;          class=class="str">"cmt">// 序列中的走势总数
class="kw">input class="type">int    kup = class="num">16;         class=class="str">"cmt">// 上行走势的数量
class="kw">input class="type">class="kw">double p0 = class="num">0.5;         class=class="str">"cmt">// 检查概率值
class="kw">input class="type">class="kw">double alpha1 = class="num">0.05;    class=class="str">"cmt">// 类型 class="num">1 错误概率
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">void OnStart()
{
  class="type">int kl, kr, er;
  kr=(class="type">int)MathQuantileBinomial(class="num">1.0-alpha1,nm,p0,er);
  kl=(class="type">int)MathQuantileBinomial(alpha1,nm,p0,er);
  Print("kl=", kl, " kup=", kup, " kr=", kr);
  Print("kup<=kl = ", kup<=kl);
  Print("kup>=kr = ", kup>=kr);
}
from scipy.stats class="kw">import hypergeom
n1 = class="num">21; n2 = class="num">6
k1 = class="num">15; k2 = class="num">1
alpha1 = class="num">0.05
kl = class="type">int(hypergeom.ppf(alpha1, n1 + n2, k1 + k2, n2))
kr = class="type">int(hypergeom.ppf(class="num">1.0 - alpha1, n1 + n2, k1 + k2, n2))
print("kl =", kl, " k2 =", k2, " kr =", kr)
print("k2<=kl =", k2<=kl)
print("k2>=kr =", k2>=kr)

◍ 随机变量还没真正铺开

这一节其实是个截断点:原文明确说描述性统计、区间参数估值、渐近估值和贝叶斯方法都没碰,理由是先把随机变量的概念理清,才有办法做有意义的研究。 从实操角度看,这意味着你现在能在 MT5 里跑的只是「概念验证」级别的片段,别急着拿去套 EURUSD 或 XAUUSD 的实盘参数。 作者把上述数理统计内容推迟到下一篇,本篇刻意压住篇幅。外汇与贵金属波动受杠杆和流动性影响,高风险,任何未经验证的统计量直接上实盘都偏激进。

画得少,看得清

这套离散化与概率模型的工具包,核心就九个文件:三个 Python 脚本算超几何和费舍尔精确检验,六个 MQL5 文件覆盖价格离散、伯努利与马尔可夫参数估值及假设检验。discret_prices.mq5 体积仅 2.67 KB,跑完把走势压成 1 和 -1 的序列图,肉眼就能分辨状态切换密度。 真正落地时不必全装,先拷 Discr.mqh 和 discret_prices.mq5 到 MT5 的 MQL5/Scripts 目录,编译后拖到图表, EURUSD 这类高流动性品种在 M15 以上周期离散效果更稳。外汇与贵金属杠杆高、滑点突发的特性,会让 -1/1 序列在重大数据发布前后出现伪信号,参数别直接照搬。 把 p_model.mq5(1.86 KB)接着挂上,就能对刚离散出的序列估 p 值,和 p0_hypothesis.mq5 联用可快速筛掉“胜率等于拍脑袋数字”的假想。工具链条短,但每一步都能在 MT5 里当场复算。

让小布替你跑这套检验
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到历史样本的正态拟合与假设检验结果,你只需判断概率结论是否支持自己的仓位倾向。

常见问题

历史胜率只是样本估值,需用点估值和置信区间修正;外汇贵金属高风险,样本外漂移可能让估计偏乐观,倾向用滚动窗口而非全量历史。
可以,品种页内置了针对收益率分布的常态性检验与均值偏移检验,省去手动在终端写脚本的重复劳动,你专注解读结论即可。
若品种间相关性破坏独立性,组合概率需改用联合分布;此时原信号失效概率上升,可能应降级为观察而非开仓。
通常会,高频噪声让点估值方差变大,假设检验功效下降;同一策略在日线显著、在 M5 可能只是随机,需分周期复核。