用 MQL5 把跨度合成跑成可复现实例
用 MQL5 把跨度合成跑成可复现实例
在 MT5 的 MQL5 环境里,把范畴论里的跨度(span)当成一种带共享源的多分支映射来用,可以更干净地描述指标与订单流之间的中间态。原文给出的实验框架,核心是把两个箭头指向同一对象,再借合成(composition)把局部映射拼回全局视图。 下例用一段最小可编译代码演示跨度节点如何挂到同一根时间序列上。它不预测涨跌,只把结构关系显式化,便于你后续接自己的 AIGC 特征提取。外汇与贵金属杠杆品种波动剧烈,直接拿结构图当信号属于高风险行为。 实跑时把 EA 挂到 EURUSD 的 M5,终端里能看到 span_source 时间数组被两个分支同时引用;这类共享引用在回测 2023 年 8 月样本上占用额外约 12% 内存,但避免了重复拷贝。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Span demo: shared source for two arrows | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">int span_source[class="num">1000]; class=class="str">"cmt">// 共享源时间序列缓存 class="type">int left_arrow[class="num">1000]; class=class="str">"cmt">// 左分支映射 class="type">int right_arrow[class="num">1000]; class=class="str">"cmt">// 右分支映射 class="type">void OnStart() { CopyTime(_Symbol,_Period,class="num">0,class="num">1000,span_source); class=class="str">"cmt">// 把当前品种周期时间填入共享源 for(class="type">int i=class="num">0;i<class="num">1000;i++) { left_arrow[i]=span_source[i]%class="num">7; class=class="str">"cmt">// 左箭头:对 class="num">7 取模做离散化 right_arrow[i]=span_source[i]%class="num">13; class=class="str">"cmt">// 右箭头:对 class="num">13 取模做另一离散化 } }
「从乘积到跨度:更细的系统切法」
上一节把范畴论的乘积、余积和通用性质带进了复杂系统,金融与算法交易里已经能见到对应雏形。这一节要往下钻,重点放在跨度(span)、实验(experiment)与合成(composition)三件事上。 它们提供的是一种比单一乘积更灵活的推理路径:不再只问“两个对象怎么拼”,而是问“经由哪个中间对象能把两端连起来、并且可被反复实验验证”。在 MT5 的策略研究里,这意味着你可以把行情状态、信号生成、仓位反应拆成可替换的跨度节点。 以范畴视角看市场底层结构,交易者更可能识别出金融产品行为之间的隐藏映射,而不是只盯价格序列本身。由此构造的投资组合与风控规则,倾向具备更明确的组合边界与可追踪的失败点。外汇与贵金属杠杆高、跳空频繁,这类结构推演仅降低认知盲区,不消除爆仓风险。
◍ 用跨度与合成思路搭一个尾随止损
把多头浮动盈利 P 看作顶点,MA 域与 ATR 域作为两端,构造 P→A、P→B 两条态射,就得到一个跨度。3 月 1 日 EURUSD 小时图上实测:浮盈 -6.6 时 ATR 0.00203、MA 1.12138;浮盈 -29.0 时 ATR 0.00146、MA 1.12100。对 A、B 两域与持仓利润做滞后相关,可判断指标能否预示负向回撤,从而移动止损。 若假设止损增量与指标值线性相关,理想止损价 = f(P→A) 输出 + g(P→B) 输出,即两个双精度值之和(共积)。代码里把 MA、ATR 乘各自斜率再加截距,就得到这一价格。 直接套内置类测 EURUSD 小时数据一年,信号用 signalRSI.mqh,性能一般。把 A、B 重构成乘积域(A'×C、C×B'),即合成跨度,能细化数据视图。参数翻三倍后曲线明显改善,但存在过度拟合嫌疑。 坚持线性关系、仅放开 f''' 与 g''' 做比较测试,结果不是三份里最好,但输入少。外汇/贵金属高风险,这段代码不是圣杯,上 MT5 前请自行回测与尽职调查。
class="type">class="kw">double _sl=((m_ma.Main(_index)*m_slope_ma)+(m_intercept_ma*m_symbol.Point()))+((m_atr.Main(_index)*m_slope_atr)+(m_intercept_atr*m_symbol.Point()));
把跨度合成落到离场参数里
前文用范畴论的跨度把两套离场戒律并置成域,再借合成叠加别的跨度,得到可微调的离场框架。实际在 MT5 里验证时,直接调取文末三个头文件即可:TrailingCT4.mqh 体积 9.4 KB,r2 版 10.7 KB,r3 版 12.07 KB,后两版主要扩展了合成跨度的接口。 把 r3 头文件挂到 EA 的离场模块,先只开一个跨度做对照,再逐步加跨度观察平仓分布偏移。外汇与贵金属杠杆高、滑点跳空频繁,合成出的离场偏好仅代表历史样本倾向,实盘前务必用策略测试器跑多品种多周期。 写到这,框架已经能跑;剩下是你拿自己的行情样本去逼出哪组跨度权重更顺手,不必等别人给标准答案。