先把交易统计当烹饪:假设是食材
先把交易统计当烹饪:假设是食材
做交易统计和做饭很像,假设就是你要下锅的食材。在 MT5 里跑任何统计前,得先想清楚自己假设了什么分布、什么周期、什么样本边界,否则后面算出的指标全是空中楼阁。 以一段最简单的正态假设检验为例,很多交易者默认价格收益率近似正态分布,但这个假设在贵金属跳空和外汇非农夜常常失效。下面这段 MQL5 代码演示了如何取最近 500 根收盘价做基础均值计算,供你直接开 MT5 验证。 高风险提示:外汇与贵金属杠杆品种波动剧烈,假设失真会导致仓位模型直接失控,任何统计结论都只是概率倾向而非确定性。
class="type">class="kw">double mean = class="num">0; class="type">int bars = class="num">500; for(class="type">int i=class="num">0;i<bars;i++) mean += Close[i]; mean /= bars;
◍ 用统计假设给交易思路做验证
很多交易者花几年时间找趋势、试策略,但验证思路的方式往往停留在 MT5 策略测试器的参数优化上,本质上是在历史里反复拟合,容易把伪规律当真。 统计假设检验是一套更严谨的验证工具:先对某个市场现象提出原假设(比如“某均线交叉信号期望收益为零”),再用样本数据算 p 值判断该假设是否被推翻。 本文用 Statistica 开发包和移植到 MQL5 的 ALGLIB 数值库做例子,把交易思路转成可证伪的假设再回测,比单纯跑优化更靠近科学的市场研究。外汇与贵金属波动受杠杆和突发事件影响,统计显著不代表实盘低风险,结论仅代表历史样本下的概率倾向。
「假设在统计检验里到底指什么」
很多讲统计的书写法不一:有的说假设是对对象统计特性的猜想,有的直接把它限定成「随机变量的分布或分布参数」的命题。在数理统计主流文献里,后者才是正规定义——假设必须落到分布原理或参数上,不能只是模糊的「行情可能反转」之类。 顺着这个口径,假设分两类:参数假设针对分布参数的值,或两组分布参数之间的差异;非参数假设则针对随机变量的分布类型本身,比如「残差是否服从正态」。 做 MT5 上的策略回测时,你其实一直在隐式使用参数假设:比如「均线穿越信号的胜率 p=0.55」。后续章节会给出具体的检验流程,到时候你可以直接拿自己的 EA 历史信号跑一遍。
止损均值检验里的两类错判
在验证交易系统止损分布时,先把待证命题设为基准假设 Н0:平均止损等于 30 点,对立面 Н1 为均值不等于 30 点。这两种假设只能二选一,但判定过程本身会引出四种组合,其中两种属于误判。 四种情形分别是:Н0 成立且被接受、Н0 不成立且改信 Н1、Н0 其实成立却被拒、Н0 其实错却留下。后两者就是统计检验里绕不开的第一类与第二类错误。 显著水平 α 量化了第一类错误的概率上限,也就是真 Н0 被错拒的风险。业界常取 α=0.05,意味着至多 5% 的检验统计量会落进临界红区;若止损均值实际就是 30 点,却因样本波动判成“不等于”,便踩中这条线。 第二类错误 β 则反过来:均值本不是 30 点,检验却把它当真。在 MT5 里跑策略测试时,把止损样本拉出来做正态评估,观察统计量是否探入红区,就能直观看到这两类错判各自发生的边界。外汇与贵金属波动剧烈,样本期不同结论可能翻转,此类检验仅提供概率倾向而非确定信号。
◍ 用假设检验拆穿交易微调的假象
把入场价往后挪 15 点,系统产率到底变没变?取 100 笔盈利交易做依赖样本,原样本中位数 83 点、均值 83.4 点;改挂单后实跑 84 笔(另 15 笔没成交)得到 NewProfitsReal。Wilcoxon 符号秩检验给出双侧 p=0.7472,左尾 p=0.6285、右尾 p=0.3736,零假设未被推翻——入场点微调倾向不影响系统相对产率,但绝对利润因漏单而缩水。 换到独立样本:两家经纪商各删异常后留 48 与 49 个执行耗时观测。Mann-Whitney U 检验双侧 p=0.0001,左尾 p=1.0、右尾 p=0.0001,零假设被拒,B 商执行明显快于 A 商。外汇与贵金属订单执行差异会直接啃掉剥头皮利润,属高频策略的高风险点。 策略组合瘦身看关联:Stops1-Stops2 的 Spearman 检验双侧 p=0.9840,无关联;Stops1-Stops3 则显著正相关、强度中等。左尾测『非负关联』时两者都接 H0,右尾测『非正关联』时后者拒 H0——根子在检验方向是『≥0』还是『≤0』。留哪条腿,交给交易者自己掂量。 ALGLIB 里 WilcoxonSignedRankTest、MannWhitneyUTest、SpearmanRankCorrelationSignificance 三个过程直接出三向 p 值,下面这段专家日志就是三套脚本的真机输出,复制进 MT5 跑一遍就能复现。
OO class="num">0 class="num">12:class="num">04:class="num">08.814 test_profits(EURUSD.e,H1) p-value for the two-sided test: class="num">0.7472 HD class="num">0 class="num">12:class="num">04:class="num">08.814 test_profits(EURUSD.e,H1) p-value for the left-sided test: class="num">0.6285 CM class="num">0 class="num">12:class="num">04:class="num">08.814 test_profits(EURUSD.e,H1) p-value for the right-sided test: class="num">0.3736 MR class="num">0 class="num">12:class="num">55:class="num">08.577 test_time_execution(EURUSD.e,H1) p-value for the two sided test: class="num">0.0001 QF class="num">0 class="num">12:class="num">55:class="num">08.577 test_time_execution(EURUSD.e,H1) p-value for the left-sided test: class="num">1.0000 PF class="num">0 class="num">12:class="num">55:class="num">08.577 test_time_execution(EURUSD.e,H1) p-value for the right-sided test: class="num">0.0001 OO class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) ---===Samples Stops1 and Stops2===--- GO class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) p-value for the two-sided test: class="num">0.9840
「双侧检验暴露样本间的强相关」
在 EURUSD.e 的 H1 周期上跑 test_correlation,对比 Samples Stops1 与 Stops3 两组样本,终端打印的双侧 p-value 只有 0.0002。这个数量级远低于 0.05 的常用阈值,说明两组止损样本在统计上不太可能独立,存在显著关联。 单侧检验进一步拆开看:左尾 p-value 为 0.9999,右尾 p-value 为 0.0001,加总即 0.0002 的双侧结果。右尾极小意味着 Stops3 相对 Stops1 倾向出现正向偏移,左尾接近 1 则反向假设基本被排除。 外汇与贵金属属高风险品种,这类相关结论只说明样本内结构,实盘换周期或换品种后关系可能失效。开 MT5 把这段日志对应的脚本跑一遍,改 Stops 参数组合就能复验 p-value 是否随样本重构而跳变。
KK class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) p-value for the left-sided test: class="num">0.4920 JJ class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) p-value for the right-sided test: class="num">0.5080 DM class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) HJ class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) ---===Samples Stops1 and Stops3===--- NS class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) p-value for the two-sided test: class="num">0.0002 RO class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) p-value for the left-sided test: class="num">0.9999 FG class="num">0 class="num">12:class="num">57:class="num">43.545 test_correlation(EURUSD.e,H1) p-value for the right-sided test: class="num">0.0001
库依赖与统计前提的边界
文中用到的 ALGLIB 库并不随 MT5 内置,需单独下载并放入 MQL5/Libraries 目录,否则 test_correlation.mq5、test_profits.mq5、test_time_execution.mq5 三个示例都无法编译运行。附带的 data.zip 约 12 KB,解压后是回测用的样本序列。 评论区里有人点破了一个关键:金融价格序列大多不满足静态性,均值和方差随时在漂,直接套正态假设做假设检验容易自欺。作者承认若系统非静态,也得靠 GARCH 类计量模型去抓短期稳定结构,且模型有概率被行情'打破'。 对外汇和贵金属交易者来说,这类量化评估只能给出'可能显著'或'倾向无关'的参考,杠杆市场高风险,别把一次 p<0.05 当成可重复规律。真要验证,开 MT5 跑通那几个 mq5,换自己的 tick 数据再看直方图偏度,比读结论更实在。