利用判别分析开发交易系统·综合运用
📊

利用判别分析开发交易系统·综合运用

(3/3)·手算判别方程太慢?本篇把数据准备、变量选择与EA落地一次跑通

含代码示例 第 3/3 篇

不少交易者把判别分析当成理论玩具,觉得人工算 G1、G2 方程就够用,结果样本一多就漏看变量。真正能用的路子是让 EA 自动采数、软件算模型、MQL5 接盘下单,缺一环都得返工。

「判别分析里挑出那 7 个真变量」

在 MT5 里走 Statistics → Multivariate Exploratory Techniques → Discriminant Analysis,先点 Variables:分组变量放第一栏,本例用 Group;第二栏塞入所有指标变量加一个 Hour(收数据的时间)。点 Select Cases 只取前 700 行做训练,编号由 V0 控制,剩下留着测模型。 DA 对离群值极敏感。价格尖峰这类少见但剧烈的事件会让指标值失真却仍被高权重处理,所以先砍掉组 1 和组 4,只留组 2、组 3 跑分析,避开大幅波动带来的异常值。 开 Advanced 选 Forward Stepwise 逐步判别。每一步扫全部变量,挑对组间区分贡献最大的进模型,循环到不能再分。若弹低公差提示,说明某变量冗余(比如俩变量之和),得回变量窗一个个加、定位后删掉。 跑完看 Summary:Variables,红色的是判别准确度超 95% (p<0.05) 的变量。按统计黄金法则只留高于 95% 的,第一轮剔掉 dBulls、Bulls、FrAMA、Hour,二轮又剔 DeMarker、Stoch_s、AO。 最终 37 个变量里只剩 7 个进模型 (p<0.01)。这 7 个就是对你后续交易系统——含神经网络方案——真正有预测效力的核心输入,外汇贵金属波动高风险,拿去回测前先确认样本区间是否含黑天鹅。

用分类矩阵核验模型在样本内外的表现

DA 跑完后会产出预后模型,以及它作用在训练集上的判别结果。想看模型怎么把样本分组,直接进 Classification 选项卡,点开 Classification matrix 就能拿到一张结果表:行是观测到的真实分类,列是模型算出来的预测分类,命中的格子标绿、错判的标红,最左列用百分比给出预测准确度。 在训练数据上,模型综合预测精度(Total)落在 60%。这个数字只是样本内回看,不能当泛化能力证明。 切到测试集要手动过滤:点 Select 填 v0>700,把没参与建模的那部分数据单独拎出来跑一遍。实测下来,测试样本的综合准确度大概在 55% 左右。外汇市场噪声大、杠杆高,这类判别模型仅提供概率倾向,实盘须自担高风险;55% 的 out-of-sample 命中在汇市已属可继续观察的水平,值得开 MT5 用自己品种复测。

◍ 把判别方程塞进 EA 里跑

判别分析给出的预后模型本质是一组线性方程,指标值被分类进不同组。在 DA 结果窗口的 Classification 选项卡里点开 Classification 函数,就能看到判别方程系数表,本例提取出双方程: Group2 = 157.17*AC - 465.64*Bears + 82.24*dBears - 0.006*dCCI + 761.06*dFrAMA + 2418.79*dMACDm + 0.01*dStoch_ms - 1.035 Group3 = 527.11*AC - 641.97*Bears + 271.21*dBears - 0.002*dCCI + 1483.47*dFrAMA - 726.16*dMACDm - 0.034*dStoch_ms - 1.353 把实时指标值代进去算 Group2 与 Group3,取较大值对应的组作为倾向。示例中若 Group2 > Group3,未来一小时价格图表可能向下移动;反之则倾向反向。外汇与贵金属杠杆高,信号失效时回撤可能很陡,仅作概率参考。 原文的指标与分析周期选择偏随机,但即便这样也足以在 MT5 里验证 DA 的潜力——复制系数、接好指标句柄,让 EA 每根小时线算一遍两组值。

MQL5 / C++
Group2 = class="num">157.17*AC - class="num">465.64*Bears + class="num">82.24*dBears - class="num">0.006*dCCI + class="num">761.06*dFrAMA + class="num">2418.79*dMACDm + class="num">0.01*dStoch_ms - class="num">1.035
Group3 = class="num">527.11*AC - class="num">641.97*Bears + class="num">271.21*dBears - class="num">0.002*dCCI + class="num">1483.47*dFrAMA - class="num">726.16*dMACDm - class="num">0.034*dStoch_ms - class="num">1.353

「画得少,看得清」

把判别分析搬进外汇或贵金属 EA,本质是用历史指标值去挑一组区分度最高的变量,再据此给新行情贴分类标签。这类模型不挑开发功底,MT5 里直接挂上 demo 的 da_demo.mq5 就能跑通,masterdata.zip 里的样本也够你复现一遍。 外汇与贵金属杠杆高、跳空频繁,判别模型给出的只是概率倾向,不等于方向锁定;系数等于零的情况在评论里被证实和示例模型无关,说明变量筛选本身就会淘汰无效维度。 真要落地,别贪多塞几十个指标。先在 H1 跑通胜率分类,再用 H4 或 D1 的数据做上一层预测,层次干净了,过拟合的概率才压得下来。

让小布替你扫品种适配度
这些诊断小布盯盘的 AIGC 已内置,打开对应品种页即可看到判别模型在历史窗口里的分类表现,你只管挑置信度高的时段做决策。

常见问题

判别方程依赖训练数据的分布特征,周期切换后样本结构变化,原权重可能不再适用,需重新跑选择阶段。
过拟合或测试样本与实盘波动机制偏离都可能导致,外汇贵金属属高风险,概率优势不等于稳赢。
把 a1、b1、c1 等作为外部参数输入,在 OnTick 计算 G1、G2 比较后发信号即可,本篇含代码示例。
目前小布提供的是分类置信诊断视图,模型系数仍需你从统计软件导出后自行接入策略,它帮你省去肉眼翻历史的工作量。
关于判别分析原理的完整讨论见《利用判别分析开发交易系统·基础篇》。