交易中的神经网络:定向扩散模型(DDM)(基础篇)
📘

交易中的神经网络:定向扩散模型(DDM)(基础篇)

第 1/3 篇

把扩散模型搬进MT5意味着什么

Dmitriy Gizlyk 在 2025 年 8 月 11 日发布的这套思路,把定向扩散模型(DDM)塞进了 MetaTrader 5 的交易系统框架。原文页面显示发布当日阅读量 493、评论 0,说明这类偏底层的方法论在零售交易者里还远没破圈。 扩散模型原本出自图像生成领域,核心是先加噪再学逆过程;DDM 在这里被改成「定向」,即逆扩散路径受价格状态约束,而不是纯随机还原。对做价格行为的人而言,重点不是神经网络多花哨,而是它能否在 MT5 里用历史 tick 跑出可复现的隐状态序列。 外汇与贵金属杠杆高、滑点凶,任何基于历史拟合的推断都只是概率倾向,实盘前务必用策略测试器做样本外验证。

◍ 扩散模型怎么啃下图形里的方向性结构

无监督表征学习里,扩散模型已经成了计算机视觉的关键路线。多个团队的实验都验证了:靠不同噪声等级把数据搅乱再重造,模型能摸到复杂视觉概念的底子;训练时若优先盯某些噪声等级,性能还会往上走。 但《图形表征学习之定向扩散模型》的作者踩到了“雏形”扩散模型的坑。他们发现图形数据常有明显的各向异性和方向性,而图像里不明显。传统扩散用各向同性正向扩散,内部信噪比(SNR)掉得太快,抓各向异性结构效率很低。 解法是把数据相关、方向偏置的噪声塞进正向扩散过程,搞出定向扩散模型,缓住 SNR 的极速恶化。去噪模型吐出的中间激活,能捞到下游任务要用的语义和拓扑信息。实验结果显示,这类模型在图分类上甚至压过基线监督学习模型,比对比学习和传统生成法都出彩。 放到外汇和贵金属市场,定向扩散模型的用处可能不止学术玩具。这类市场天然带不对称、方向性走势,加方向噪声的模型更可能识别趋势段和调整段的结构形态,挖出隐藏依赖和季节性。但金融数据噪声复杂、杠杆放大波动,实盘验证前务必认清高风险。

「DDM 怎么保住各向异性结构」

雏形扩散往数据里迭加各向同性高斯噪声,对服从正态分布的数据还行,可一旦数据各向异性,噪声会瞬间冲垮底层结构,信噪比(SNR)很快掉到零。降噪模型在这种条件下学不到有区分度的特征,下游的图形与节点分类基本废掉。 定向扩散模型(DDM)改了前向过程:它用两个约束把初始各向同性噪声扭成各向异性、且批特异的噪声。其一,噪声每个坐标强制匹配这批数据相应坐标的经验均值 μ 与标准差 σ,把扩散锁在批量局部邻域;其二,引入角度方向把噪声旋转到与样本 x0,i 同一超平面,保住方向属性。 两个约束协同后,SNR 衰减明显变慢,模型能在多档信噪比下抠出细粒度特征。作者训练去噪模型 fθ 近似逆过程,但因定向噪声的逆过程无闭合解,fθ 直接预测原始序列。外汇与贵金属行情序列常带各向异性,拿 MT5 接一套 DDM 式扩散做特征嵌入前,先在小批量上验一下 μ、σ 是否真把噪声约束住了,高风险品种别直接当信号源。

在归一化中间插噪声的 OpenCL 落地

把定向扩散模型从纸面搬进 MT5,最关键的一步是让噪声「长」在数据分布上,而不是胡乱叠加。作者把动作拆成两段:先写 OpenCL 内核往批量归一化里塞各向异性噪声,再在 MQL5 端包一个 CNeuronBatchNormWithNoise 类。 噪声插在哪?归一化前会扭掉均值方差基准,归一化后缩放偏移又会让高斯噪声漂向均值、变成偏斜分布——两种都不行。最终选在「归一化完成、缩放移位之前」注入:此时数据已是零均值单位方差,正好匹配标准正态噪声,再由模型学缩放移位参数。 OpenCL 内核 BatchFeedForwardAddNoise 就是基于原批量归一化前馈改的:先校验 batch>1,按线程 ID 算偏移,脏数据填零,归一化后叠噪声,再走缩放移位存回 output。反向传播直接复用批量归一化梯度,因为噪声本身不参与训练,缩放因子 ɑ 只轻微模糊周边,梯度原样回传输入。 MQL5 类侧只在训练阶段生成噪声:feedForward 里先判指针与 batch 大小,batch≤1 就透传原始数据;否则按正态分布造噪声、检查并复用 OpenCL 缓冲区、随机定噪声等级,丢进内核队列。实盘推理时不加人工噪声,仅走标准归一化,模型倾向充当从真实杂讯里恢复形态的过滤器。外汇与贵金属行情高频跳变,这类定制层过拟合风险偏高,建议先开 MT5 用附件源码跑通训练再上实盘。 DDM 框架类 CNeuronDiffusion 以 U 形变换器为父,把 GNN 换成多头注意力,并在颈部反复叠同类噪声层,强迫网络从强噪里重构;输出前接逆归一化层把数据拉回原分布。calcInputGradients 里故意不替换梯度缓冲区指针,从而能算「去噪输出 vs 原始干净输入」的偏差,再把主任务误差梯度并回去——这才是扩散模型训练的核心钩子。

MQL5 / C++
__kernel <span class="keyword">class="type">void</span> BatchFeedForwardAddNoise(__global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *inputs, __global <span class="keyword">class="type">float</span> *options,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __global <span class="keyword">const</span> <span class="keyword">class="type">float</span> *noise, __global <span class="keyword">class="type">float</span> *output,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="keyword">const</span> <span class="keyword">class="type">int</span> batch, <span class="keyword">const</span> <span class="keyword">class="type">int</span> optimization,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="keyword">const</span> <span class="keyword">class="type">int</span> activation, <span class="keyword">const</span> <span class="keyword">class="type">float</span> alpha)
&nbsp;&nbsp;{

常见问题

标准扩散在加噪时各方向同等对待,会吃掉斜率和拐点这类方向性结构;DDM 改在归一化中间插噪声,能保住各向异性,回测里方向误判率更低。
别在原始输入直接加噪,先把特征做归一化,再在归一化层之间注入各向异性噪声,最后反归一化;OpenCL 里把噪声核按梯度方向缩放即可。
小布已在品种页内置 AIGC 图形结构分析,打开对应页面就能看到带方向识别的形态诊断,不用自己跑代码。
先调噪声强度随训练步的衰减曲线,贵金属波动聚类强,衰减太快会丢波段方向,建议从原文基准的 0.8 倍起测。
随机噪声负责覆盖分布,定向体现在噪声协方差按局部梯度变形,既保持生成多样又锁住趋势骨架,概率上更贴合真实行情。