MQL5 中的范畴论 (第 13 部分):数据库制程的日历事件·综合运用
📘

MQL5 中的范畴论 (第 13 部分):数据库制程的日历事件·综合运用

第 3/3 篇

「先把事件拆成可比较的类别」

做事件类型表别一上来就拍脑袋定类,先按临界数据量走规范流程:用 MQL5 内置类抓基础数据 → 按指数、情绪、国债收益率、通胀等标准桶分组 → 每个事件拆关键字判归属 → 建训练/测试集跑模型 → 在测试集看分类命中率 → 后期分析防过拟合后迭代。外汇与贵金属事件受宏观数据驱动,分类错配会直接带偏后续信号,属高风险环节。 类型定好后写进 event_types 表,事件主表的 event type id 列全量回填,插入或更新的存储过程就按这套模型逻辑走,相当于把分类结果固化进库。 事件集本身的元素类型是字符串数组,每个下标对应一列。改造后最大的变化是“从事件到事件值”的同态映射:不再只塞和‘零售’类似的文本描述,能容纳更宽口径的宏观事件,为后面跨品种比对留了口子。

用事件相关性给仓位和信号定权重

把前面组合出的货币对价值打上时间戳后,等于拿到了一串带时刻的“事件值”。拿这批值和之后真实的价格变化做比对,就能在训练集和测试集里算出每类事件跟最终价格走势的相关方向和相关强度。 这些相关性数据不是只用来拍脑袋开多空。相关程度高的事件,可以配更大的仓位;弱相关的就轻仓甚至过滤掉,相当于把信号质量直接写进资金管理里。外汇与贵金属杠杆高,这种按概率调仓的做法也只能降低风险暴露,不消除爆仓可能。 如果把几类事件压成一个加权平均,再拿这个“合成指标”去标价格后续动作,系统识别精度会明显抬升。剩下的问题只是权重怎么给:要么用优化器跑,要么靠你自己对宏观链条的理解手调。两条路都能走,但加权后的框架比单事件裸用,预测倾向会更准一些。

◍ 用 PMI 事件跑通同态映射的初始验证

这套实现不是完整交易系统,只是把前面说的「事件—类型—货币—价值」四元组组合落地的第一步。我们跳过自建数据库类,直接抓日历事件填充矩形互倒实例,再读同态。输入只给三个:关注的事件类型、保证金货币权重、利润货币权重,权重用来把两种货币的日历值并成一个数。 测试时只喂 PMI 类事件,货币圈定欧元、英镑、美元、瑞郎、日元,货币对只看 EURUSD、GBPUSD、USDCHF、USDJPY。日志里打印的通用属性同态显示,组合值高于单欧元输入,是因为美元等效 PMI 更高,EURUSD 那一行只是加权均值——本例欧元美元权重相等。 下面这段 MT5 日志是 2023.07.11 13:51:52 在 GBPUSD.i 的 H1 周期跑出来的。四组货币对 PMI 原始值分别为 EURUSD 45.85、GBPUSD 47.00、USDCHF 45.05、USDJPY 48.75;态射只落出一条「保证金货币=欧元」,并展开成 markit 制造业/服务业/综合 PMI 的多条带时间戳记录(如 2023.06.01 11:00 制造业初值 44.6)。外汇与贵金属属高风险品种,这类读数只揭示概率倾向,不构成方向承诺。 别把日志数值当信号结论 同态打印的是结构映射,不是买卖点。想验证就自己把代码挂 MT5 跑一遍,换掉 PMI 预选看态射怎么变。

MQL5 / C++
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) class="type">void OnStart() d to a homomorphisms are... 
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) 
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) {(EUR,USD,class="num">45.85000000,TYPE_PMI),(GBP,USD,class="num">47.00000000,TYPE_PMI),(USD,CHF,class="num">45.05000000,TYPE_PMI),(USD,JPY,class="num">48.75000000,TYPE_PMI)}
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) |
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) (EUR,USD,class="num">45.85000000,TYPE_PMI)|----->(markit-manufacturing-pmi,EUR,class="num">44.60000000,class="num">44.60000000,class="num">44.80000000,class="num">2023.06.class="num">01 class="num">11:class="num">00,TYPE_PMI)
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) |
class="num">2023.07.class="num">11 class="num">13:class="num">51:class="num">52.966 ct_13(GBPUSD.i,H1) {(markit-manufacturing-pmi,EUR,class="num">44.60000000,class="num">44.60000000,class="num">44.80000000,class="num">2023.06.class="num">01 class="num">11:class="num">00,TYPE_PMI),(markit-manufacturing-pmi,EUR,class="num">44.80000000,class="num">44.20000000,class="num">43.60000000,class="num">2023.06.class="num">23 class="num">11:class="num">00,TYPE_PMI),(markit-services-pmi,EUR,class="num">55.90000000,class="num">55.90000000,class="num">55.10000000,class="num">2023.06.class="num">05 class="num">11:class="num">00,TYPE_PMI),(markit-services-pmi,EUR,class="num">55.10000000,class="num">55.50000000,class="num">52.40000000,class="num">2023.06.class="num">23 class="num">11:class="num">00,TYPE_PMI),(markit-composite-pmi,EUR,class="num">53.30000000,class="num">53.30000000,class="num">52.80000000,class="num">2023.06.class="num">05 class="num">11:class="num">00,TYPE_PMI),(markit-composite-pmi,EUR,class="num">52.80000000,class="num">53.00000000,class="num">50.300000

「一点提醒」

把事件集直接映射到货币对值集的同态思路,依赖范畴论的通用属性公理,在一种货币事件已更新、另一种仍待定的窗口里,确实可能提前给出汇率倾向,但这只是数学上的可计算性,不等于盘面会照走。 附带 ct_13.mqh(25 KB)与 ct_13.mq5(22.43 KB)两套文件,里面是前文分类与映射的可用实现,你拉进 MT5 的 MQL5/Include 与 Scripts 目录就能编译跑通,验证同态映射在你常看的那几个货币对上的延迟预测表现。 外汇与贵金属本身是高杠杆高风险品种,这类基于事件分类的推导只解决「配对可能性」,真要上实盘前,先用策略测试器拿历史日历事件回放一遍,别把数学优雅当成胜率保证。

常见问题

按影响维度(如通胀、就业、景气)和频率(月度、季度)建分类树,同类事件才能直接比强弱。
先算事件与价格变动的历史相关系数,系数高的事件触发时给信号更高仓位权重,注意外汇贵金属高风险。
小布可自动归类日历事件并按相关性给信号打分,你只需看结论调整仓位,减少手工核算。
看 PMI 公布值偏离预期的程度是否映射到同品种价格同向变动,跑通后再扩到其他事件。
会。类别粒度建议控制在单层 5–8 个,过细会导致样本稀疏、权重失真,失去比较意义。