MQL5 中的范畴论 (第 16 部分):多层感知器函子(基础篇)
📘

MQL5 中的范畴论 (第 16 部分):多层感知器函子(基础篇)

第 1/3 篇

◍ 用函子视角搭一个 MQL5 多层感知器

在 MQL5 里把多层感知器(MLP)看成函子,核心是把输入特征向量空间映射到隐藏层激活空间,再映射到输出空间,每层权重矩阵就是态射。这种写法不追求数学严谨,而是借范畴论的映射直觉,让神经网络的前向传播结构更清晰。 下面这段是 MQL5 里最小可跑的 MLP 前向函子骨架:输入 3 维、隐藏 4 维、输出 1 维,用 tanh 做隐藏激活。复制进 MT5 的 EA 或脚本里,改 weights 数组就能直接验证映射结果。 外汇与贵金属市场高杠杆、高波动,用此类模型做信号推论仅代表数学映射关系,不预示任何行情方向,实盘须自担风险。

MQL5 / C++
class="type">class="kw">double MLP_Functor(class="type">class="kw">double &input[class="num">3], class="type">class="kw">double &weights[class="num">3*class="num">4+class="num">4*class="num">1], class="type">class="kw">double &hidden[class="num">4])
{
   class="type">int w=class="num">0;
   for(class="type">int i=class="num">0;i<class="num">4;i++)            class=class="str">"cmt">// 隐藏层 class="num">4 个神经元
   {
      hidden[i]=class="num">0;
      for(class="type">int j=class="num">0;j<class="num">3;j++)         class=class="str">"cmt">// 输入 class="num">3 维
         hidden[i]+=input[j]*weights[w++];
      hidden[i]=MathTanH(hidden[i]); class=class="str">"cmt">// tanh 激活
   }
   class="type">class="kw">double out=class="num">0;
   for(class="type">int i=class="num">0;i<class="num">4;i++)            class=class="str">"cmt">// 输出层 class="num">1 维
      out+=hidden[i]*weights[w++];
   class="kw">return out;                     class=class="str">"cmt">// 返回映射后的标量
}

「从抽象函子到信号落点」

前两篇把范畴论的函子和性质变换塞进了 MQL5 的代码骨架,核心目的是让交易系统的模块边界更干净、可组合。这一篇不绕弯子,直接把函子从「只管尾随止损」拉到「生成进场与出场信号」的现场。 需要泼盆冷水:附带代码里没有任何圣杯,它只是把函子映射成信号流的一种写法。外汇与贵金属杠杆高、滑点狠,这套东西在 EURUSD 十五分钟图上跑出过可复现的信号节奏,但是否赚钱完全看你如何改映射规则。 真正值得做的,是顺着代码里的函子定义,把你的市场看法(比如突破回踩优先于反转)写成新的态射,让小布替你跑这套回测。

函子与图在 MQL5 里的对应物

函子不是数学装饰,它是范畴之间的结构保持映射:既管对象、也管态射。落到代码里,你只需实现「对象映射」或「态射映射」之一,另一头会被自动约束住——交叉检查对象就等于在交叉检查态射。 图论在第 11 篇被定义为顶点加箭头的系统;上篇用 MT5 经济日历把 4 个时间序列数据点连成一张图,那张图本身就是一个范畴。外汇与贵金属数据高频跳变,这种连法对捕捉事件传导路径有帮助,但高杠杆下误连会带来快速回撤。 上篇给出的函子是一条线性方程:域对象值乘系数加常量得到协域对象值,系数即斜率、常量即 y 截距。共享代码里留了扩到二次方程的开关,但那篇只做验证没接上。想验证的话,把线性斜率从 1.0 调到 0.5,看映射后对象值是否等比压缩。

◍ 用函子把日历数据映射到标普趋势预测

把财经日历看成图而不是扁平表格,就能用范畴论里的函子做变换:CPI 依赖 PMI,PMI 依赖 10 年期竞卖收益率,竞卖收益率又受零售销售牵动。这套链在 MT5 日历选项卡里能直观看到大量异质数据,针对标普 500 这类普适证券,时间序列不是单点经济指标,而是由多节点构成的基础序列。 上一篇文章的假设被过度简化,没画成时间序列图;补上时间对象后图形复杂度明显上升,反而印证了“它是图”这件事。假设本身可争议——比如有人认为是零售销售驱动 PMI、货币供应量借 10 年竞卖衡量,排列组合极多。 关键落点在工程层:MT5 策略测试器能平息这些假设之争,前提是你想清楚并用固定格式列出来。MQL5 向导点几下就能拼出 EA,所有逻辑收在一个信号文件里,直接丢进测试器跑不同数据链假设。外汇与贵金属周边指数衍生品波动剧烈,用此类推导开仓属高风险行为,结论仅具概率倾向。

常见问题

先在MQL5里定义好各周期数组,再用函子把异构序列映射成同维向量,避免手工拼接出错。
可从输入特征数的1到2倍起步,用交叉验证调,贵金属波动大时倾向稍多加节点。
小布可读取你的特征配置,自动完成日历与价格数据的函子映射并给出趋势倾向诊断。
用结构体加映射函数实现,把事件强度转成数值向量,再送入感知器输入层。
图对应网络拓扑,节点为数组、边权重存二维数组,训练时更新该权重矩阵。