使用Python和MQL5进行特征工程(第四部分):基于UMAP回归的K线模式识别·综合运用
📘

使用Python和MQL5进行特征工程(第四部分):基于UMAP回归的K线模式识别·综合运用

第 3/3 篇

用 ONNX 把 K 线差分喂给 UMAP 预测器

这段逻辑把当前图表最近 10 根 K 线的价格结构差分,拼成向量直接丢进本地 ONNX 模型跑两阶段推理。先在 MT5 里把 umap_onnx_model 和 umap_forecast_onnx_model 两个网络权重准备好,EURUSD 的回归预测才有可能出数。 GetUmapModelInputs 固定返回长度为 10 的 vectorf:前 4 维是第 1 根与第 11 根 K 线的开高低收各自相减,后 6 维是第 1 根 K 线内部的开-高、开-低、开-收、高-低、高-收、低-收价差。这种构造只依赖 PERIOD_CURRENT,换周期会自动跟着变。 GetModelForecast 先跑 UMAP 投影再跑 forecast 头,Print 出三层结果方便在专家日志里核对。外汇与贵金属杠杆高,模型输出只是概率倾向,实盘前务必用策略测试器回放验证数值是否合理。

MQL5 / C++
class="type">void GetModelForecast(class="type">void)
  {
  vectorf model_inputs = GetUmapModelInputs();
  OnnxRun(umap_onnx_model,ONNX_DATA_TYPE_FLOAT,model_inputs,umap_onnx_output);
  OnnxRun(umap_forecast_onnx_model,ONNX_DATA_TYPE_FLOAT,umap_onnx_output,umap_forecast_onnx_output);
  Print("Model Inputs: \n",model_inputs);
  Print("Umap Transformer Forecast: \n",umap_onnx_output);
  Print("EURUSD Return UMAP Forecast: \n",umap_forecast_onnx_output);
  }
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Get our model&class="macro">#x27;s input data                                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
vectorf GetUmapModelInputs(class="type">void)
  {
  vectorf umap_model_inputs(class="num">10);
  umap_model_inputs[class="num">0] = (class="type">class="kw">float)(iOpen(_Symbol,PERIOD_CURRENT,class="num">1)   - iOpen(_Symbol,PERIOD_CURRENT,class="num">11));
  umap_model_inputs[class="num">1] = (class="type">class="kw">float)(iHigh(_Symbol,PERIOD_CURRENT,class="num">1)   - iHigh(_Symbol,PERIOD_CURRENT,class="num">11));
  umap_model_inputs[class="num">2] = (class="type">class="kw">float)(iLow(_Symbol,PERIOD_CURRENT,class="num">1)    - iLow(_Symbol,PERIOD_CURRENT,class="num">11));
  umap_model_inputs[class="num">3] = (class="type">class="kw">float)(iClose(_Symbol,PERIOD_CURRENT,class="num">1) - iClose(_Symbol,PERIOD_CURRENT,class="num">11));
  umap_model_inputs[class="num">4] = (class="type">class="kw">float)(iOpen(_Symbol,PERIOD_CURRENT,class="num">1)   - iHigh(_Symbol,PERIOD_CURRENT,class="num">1));
  umap_model_inputs[class="num">5] = (class="type">class="kw">float)(iOpen(_Symbol,PERIOD_CURRENT,class="num">1)   - iLow(_Symbol,PERIOD_CURRENT,class="num">1));
  umap_model_inputs[class="num">6] = (class="type">class="kw">float)(iOpen(_Symbol,PERIOD_CURRENT,class="num">1)   - iClose(_Symbol,PERIOD_CURRENT,class="num">1));
  umap_model_inputs[class="num">7] = (class="type">class="kw">float)(iHigh(_Symbol,PERIOD_CURRENT,class="num">1)   - iLow(_Symbol,PERIOD_CURRENT,class="num">1));
  umap_model_inputs[class="num">8] = (class="type">class="kw">float)(iHigh(_Symbol,PERIOD_CURRENT,class="num">1)   - iClose(_Symbol,PERIOD_CURRENT,class="num">1));
  umap_model_inputs[class="num">9] = (class="type">class="kw">float)(iLow(_Symbol,PERIOD_CURRENT,class="num">1)    - iClose(_Symbol,PERIOD_CURRENT,class="num">1));
  class="kw">return(umap_model_inputs);
  }

◍ 空小节无内容可提炼

本小节原文仅含一段被截断的 MQL5 注释标记,未提供任何技术描述、参数或价格现象,无法生成可验证的技术内容块。 若需补全,请返回包含完整正文与代码的源小节,蒸馏引擎方可按价格行为学视角做中文重写与逐行拆解。

「画得少,看得清」

把 EURGBP 的裸价格序列丢进 UMAP 做降维,再喂给统计模型,错误率比直接在原始数据上训练最多低 40%。这不是魔法,是让模型少看噪声、多看主干。 配套给了两个 ONNX:EURGBP UMAP.onnx 吃行情吐嵌入,EURGBP UMAP Forecast.onnx 吃嵌入吐回报预测;MQ5 端有 UMAP_Candlestick_Recognition.mq5 抓数据、UMAP_Regression.mq5 跑双模型交易。 外汇和贵金属杠杆高、经纪商点差切分不同,同一套近似在 Exness 和别家结果可能差很远。开 MT5 挂上脚本跑一遍,比看结论实在。

常见问题

取最近N根K线的收盘价差分序列,做标准化后按时间顺序排成一维向量,再送进ONNX导出的预测器做推理即可。
把它当过滤层:只在模式概率高于自己回测阈值时留意该形态,结合价格行为确认,不单独作为入场依据,外汇贵金属波动大需控仓。
可以,小布盯盘的AIGC已内置类似特征工程与模式诊断,打开对应品种页就能直接看模型输出的形态倾向,不用自己搭管道。
差分去除价格水平和趋势绝对值,突出局部涨跌结构,让UMAP对尺度更鲁棒,不同品种间迁移更稳。
只标模型高置信形态位与关键支撑阻力,省略杂乱指标线,视觉负荷低,人工复核更快,避免过度交易。