MQL5中的范畴论(第21部分):使用LDA的自然变换(基础篇)
用LDA给自然变换做降维观察
在 MQL5 的算法交易框架里,把范畴论的自然变换当成一组映射族来看,往往会遇到维度爆炸:一个 functor 到另一个 functor 的变换若按品种×周期×指标参数展开,状态空间很容易超过 50 维。 LDA(线性判别分析)在这里的价值不是预测,而是把高维自然变换投影到低维可分辨子空间,让同类变换聚拢、异类拉开。2024 年 4 月社区里一篇针对 MT5 的实测提到,对 835 个样本变换做 LDA 后,前两个判别轴就能保留约 71% 的类间可分性。 外汇与贵金属市场高杠杆、跳空频繁,这类降维只帮忙看清结构,不暗示任何方向胜率;真要落地,开 MT5 用自己品种跑一遍判别矩阵才作数。
◍ 用自然变换接管数据库拆表后的关联重建
一家初创公司最早用 3 列(主键、产品名、支付金额)记录客户购买。后来产品名里重复太多,就把这一列拆成版本、订阅模式、构建名称 3 列;支付金额也可能再拆成支付模式、货币、支付金额。拆完之后,旧表里产品名和支付金额之间的关键相关性,在新表结构里要重算一遍,纯手工很繁琐。 把这件事放进范畴框架看:域范畴放初创公司原有的表清单,共域范畴放两个版本的客户信息表。若把清单当作域里的单个对象,每张表当作共域里的独立对象,那么从清单到旧表、从清单到新表各有一个函子,这两个函子之间就构成一个自然变换。举例,函子一映射到 3 列表,函子二映射到拆出的 5 列表(修订版 1)。 自然变换的价值不只是能用算法量化两表差异——线性方程、二次模型、多层感知器、随机森林或线性判别分析都行——更在于那些算出来的权重可以直接拿去重建旧相关性,并为新拆出的列发展出新相关性。对外汇或贵金属量化来说,这类结构映射思路能降低多源行情表重构时的试错成本,但实盘数据漂移大,映射权重失效的概率不低,需持续回测。
「离散价格序列与滞后对照的底层视角」
做价格行为分析的人对时间序列并不陌生:MT5 里的 K 线、内置指标、自写 EA 都建立在「每个区间有一个确定价格」的前提上。但外汇对实际在大部分交易周里连续跳动,图表看到的只是离散采样,这种离散视图才是我们做技术拆解的抓手。 真正能拉开分析层次的,是对「同一证券在不同时间粒度下的一致价格」做对照。当你要做跨周期预测,单纯看单序列不够,把带时间滞后的两组数据摆在一起,往往比同步比对更容易逼出结构信号——外汇与贵金属这类高杠杆品种,滞后错位带来的伪相关尤其要警惕。 本文这一路会放两个相似数据集:一个以移动平均值为特征,另一个直接装该平均值的成分价格。让二者处于滞后自然变换下,等于给预测多开了一个参照轴,读者打开 MT5 用两段不同周期的同品种就能复现这种对照。
两张表怎么拼出LDA训练集
这个简单表只有两列:时间戳和移动平均值。行数由输入参数 m_data 控制,并且会按移动平均周期的大小在时间上提前错开排列。比如周期取 5,那这张表里的值就对应复合表的前 5 根时间柱。 落后的复合表同样带时间戳列,外加若干价格列。额外价格列的数量等于移动平均周期:周期 5 时,它就是 1 个时间戳列加 5 个价格列。两张表合起来构成一组带自然变换映射的数据集。 本文用线性判别分析(LDA)来定义数据集,这种方法在前面系列里没展开过。LDA 本质上是个分类器:训练集里自变量是影响结果的特征,分类变量是最终结果,算法能把结果归到最多 n 个类。它由 Ronald Fisher 提出,会输出权重向量来标定各类主质心,并估计未知质心位置。 直观地说,两类时权重向量就是分隔点的直线方程;三类对应平面方程;一类则退化为数轴上的坐标。拿到权重向量后,把未知质心坐标和已知质心比对,离谁近就归哪类。外汇与贵金属市场波动剧烈、杠杆风险高,用 LDA 做分类也只是概率倾向,实盘前务必在 MT5 用历史数据回测验证。