从Python到MQL5:量子启发式交易系统的探索之旅(基础篇)
📘

从Python到MQL5:量子启发式交易系统的探索之旅(基础篇)

第 1/3 篇

◍ 为什么从 Python 切到 MQL5 做量子启发策略

作者 Javier Santiago Gaston De Iriarte Cabrera 在 2025 年 7 月 3 日于 MetaTrader 5 社区发布了一篇量子启发式交易系统的探索笔记,原文获 751 次浏览、3 条讨论。这套思路最早用 Python 原型验证,但最终落地选了 MQL5,核心原因是 MT5 原生支持策略测试器与实时 tick 回放,省掉跨进程通信的延迟损耗。 外汇与贵金属属高杠杆品种,量子启发式方法只是用概率采样替代穷举优化,不承诺任何胜率上限;回测漂亮不代表实盘能复现。 对读者来说,现在能做的动作很直接:开 MT5 新建一个 EA 骨架,把 Python 里跑通的种群初始化逻辑用手写循环搬进 OnTick,先不接真实报价,用历史数据看收敛速度。

「量子启发思路怎么落进MT5」

传统交易系统大多卡在二元决策上:涨或跌、开或不开。量子启发式模型换了个视角,把市场看成多重并发状态叠加、彼此关联、还会突然跳变,更像真实盘面的纠缠态。用 Qiskit 这类模拟器在经典机上跑量子启发算法,能直接处理市场的不确定性,吐出带概率倾向的预测见解。 我们在 Python 原型里用 Qiskit 搭电路:RY 门把行情数据编码成量子态,叠加态承载多个市场特征;CNOT 门做纠缠,抓跨品种或跨周期的相关性。回测测量结果的预测准确率达到 54%,但只能离线跑,接不了实时盘。 MQL5 是经典架构,没法真用量子门,只能用特征提取加经典数学去近似量子态和纠缠。实测准确率降到 52%,代价是复杂度上来了,但换来实时交易和直连经纪商行情。外汇与贵金属杠杆高、滑点凶,这套近似方案也只是概率优势,不是胜率保证。 两种路子数据入口不同:Python 直接塞量子态,MQL5 得先做特征工程;前者有真量子门,后者靠经典相关性模拟纠缠。原型阶段用 Python 验证想法快,真要上线盯盘下单,还是得在 MT5 里用经典近似把量子启发跑起来。

Python原型:创新的基础

我们选择Python作为起点,是因为它拥有强大的科学库——NumPy、Pandas,尤其是Qiskit,这些库使其成为开发量子启发式交易系统原型的理想选择。Python简洁的语法和丰富的资源使得实验和初始算法开发变得高效。 Python原型在各种市场条件下均保持了54%的成功率——虽然看似不高,但在合理的风险管理下,这仍是一个有意义的优势。 使用Qiskit,我们设计并测试了一个三量子比特架构,能够同时分析八种市场状态。Python的灵活性使我们能够快速调整电路、调整参数并快速获得结果,从而促进了我们的开发过程。 以下是我们在Python中实现量子电路的一个简化示例: [CODE] <span class="keyword">class</span> HourlyQuantumForex: &nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">def</span> __init__(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.n_qubits = <span class="number">3</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.simulator = BasicAer.get_backend(<span class="string">'qasm_simulator'</span>) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.min_confidence = <span class="number">0.15</span> &nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">def</span> create_circuit(self, input_data): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qc = QuantumCircuit(self.n_qubits, self.n_qubits) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment"># Input encoding</span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(self.n_qubits): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;feature_idx = i % <span class="built_in">len</span>(input_data) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;angle = np.clip(np.pi * input_data[feature_idx], -<span class="number">2</span>*np.pi, <sp

◍ 把量子启发式塞进MT5的取舍

原型阶段用 Python 跑量子模拟更顺手,但真要盯盘就得让策略直接吃 MT5 的实时报价、挂单和执行通道,所以这套系统最终落到了 MQL5 上。难点不是语法迁移,而是把量子态叠加和线路采样的思路,硬嵌进 MQL5 那种顺序执行的传统框架,还不能丢掉原来的预测倾向。 代价是实盘适配后准确率从 54% 掉到 51–52%,属于可接受的小幅退化——外汇和贵金属本身高波动高杠杆,几个点的模型误差远不如执行延迟致命。 下面这段 MQL5 类只露出骨架,但已经能看出特征抽取和量子式电路模拟是怎么接线的: class CQuantumForex { private: int m_lookback_bars; // 回看柱数,决定特征窗口长度 double m_features[]; // 存抽取出的市场特征向量 public: double PredictNextMove(string symbol) { // 对外接口:给品种名预测下一笔方向 GetFeatures(symbol, m_features); // 拉取并计算该品种特征 return SimulateQuantumCircuit(m_features); // 丢进电路模拟拿结果 } double SimulateQuantumCircuit(double &features[]) { // Quantum-inspired calculations double state_probs[]; // 量子态概率分布数组 ArrayResize(state_probs, (int)MathPow(2.0, (double)NUM_QUBITS)); // 按量子位数 2^n 扩容量子态 // Circuit simulation logic for(int shot = 0; shot < SHOTS; shot++) { // 跑 SHOTS 次采样(类似量子测量) // Quantum state manipulation } return GetWeightedVote(state_probs); // 按概率加权投票出信号 } }; 在 MT5 里新建 EA 把这类贴进去,先把 NUM_QUBITS 和 SHOTS 设小一点(比如 3 和 100)回测,能直观看到采样次数怎么拖慢 tick 处理。

MQL5 / C++
class CQuantumForex {
class="kw">private:
  class="type">int m_lookback_bars;
  class="type">class="kw">double m_features[];

class="kw">public:
  class="type">class="kw">double PredictNextMove(class="type">class="kw">string symbol) {
    GetFeatures(symbol, m_features);
    class="kw">return SimulateQuantumCircuit(m_features);
  }

  class="type">class="kw">double SimulateQuantumCircuit(class="type">class="kw">double &features[]) {
    class=class="str">"cmt">// Quantum-inspired calculations
    class="type">class="kw">double state_probs[];
    ArrayResize(state_probs, (class="type">int)MathPow(class="num">2.0, (class="type">class="kw">double)NUM_QUBITS));

    class=class="str">"cmt">// Circuit simulation logic
    for(class="type">int shot = class="num">0; shot < SHOTS; shot++) {
      class=class="str">"cmt">// Quantum state manipulation
    }

    class="kw">return GetWeightedVote(state_probs);
  }
};

「高波动时段的命中率与置信度筛选」

把量子启发思路接到 MT5 实盘后,最明显的现象出现在剧烈波动期:传统形态频繁假突破时,这套能并行评估多种市场状态的逻辑反而更稳。我们在不同行情下跑过多轮,结论偏向——它在各种条件下都能维持可用表现,不是只靠某段趋势吃饭。 特定时段模型的准确率会明显抬升,具体哪几个小时因品种而异,建议用 MT5 的复盘工具按周期切片统计。抓住这些高可预测窗口,策略整体胜率有概率往上走一截。 市场极度波动时,模型靠自适应调整吃到了更大价格摆动,潜在盈利空间倾向扩大;但外汇和贵金属杠杆高,回撤同样可能放大,必须配合仓位控制。 为了挡掉低质量信号,我们加了置信度阈值,只放行高置信单。这种选择性进场在多次测试中降低了无效交易占比,结果一致性更好——虽然表面命中率不一定高,但稳定度验证了方法本身。

原型与实盘实现的性能落差

把 Python 原型直接搬进 MQL5 实时环境,性能差异不是平台短板那么简单,本质是受控回测与活盘博弈的断层。Python 端喂的是已知历史序列,等于开卷考试;MQL5 端要吞实时 tick、扛断线重连与缓冲区限制,属于闭卷上阵。 准确率肉眼可见地掉了点,但 MQL5 版换来了可执行的实时信号流——这点 Python 单机等回测给不了。只守着原型,交易者拿不到盘中即时触发,等于废了半截系统。 本次实盘化移植累计产生总预测次数:11544。这个数字说明实时引擎已稳定跑过万次级推断,样本量足够暴露滑点与延迟的真实分布,值得开 MT5 把日志拉出来对照自己的品种点差。

MQL5 / C++
总预测次数:class="num">11544

常见问题

Python适合快速验证原型,但下单和行情对接要靠交易平台原生环境;切到MQL5能直接跑在交易终端里省去中转延迟。
回测里把置信度低于0.6的订单全丢掉,命中率会明显抬升;具体按品种波动率调,别照抄数值。
小布可对接品种页做AIGC诊断,直接标出当前时段信号置信与历史命中,省去自己写统计。
正常,原生环境循环和内存用法不同;用执行耗时打印逐段比对,优先砍掉高频重复计算。
随机性来源和精度会被终端运行环境限制,原型里的浮点自由度实盘常要降级,先确认能接受再写。