English Русский Português
preview
MQL5中的量子神经网络(第三部分):基于量子比特的虚拟量子处理器

MQL5中的量子神经网络(第三部分):基于量子比特的虚拟量子处理器

MetaTrader 5EA交易 |
54 4
Yevgeniy Koshtenko
Yevgeniy Koshtenko

在本系列的第二部分中,我们开发了一套采用量子效应数学类比的系统:共振(余弦)、干涉(正弦)、退相干(指数函数)。然而,它本质上仍然只是模仿。形式上看似优雅,但本质上并不是真正的量子。

随着研究的深入,我们逐渐发现,该模型虽然设计得很优雅,却并未触及量子处理的核心 —— 叠加态、量子纠缠与测量的不可逆性。我们操作的是数学函数,而非量子原理。

传统模型存在固有的局限:

  • LSTM预测准确率最高可达58%
  • Transformer模型对噪声敏感
  • ARIMA已逐渐失去实用价值
  • 各类模型易过拟合,稳定性较差

其关键突破在于转向虚拟量子比特

在第二版中,不再使用这些类比,而是采用完整的量子处理器模型:3个量子比特、8维状态空间、量子门与测量操作。全面重构架构:所有运算严格遵循量子力学定律 —— 幺正性、归一化、测量行为。


量子处理器架构

每个量子比特的状态可表示为二维希尔伯特空间中的复向量。

struct ComplexVector {
    double real[STATE_DIM];
    double imag[STATE_DIM]; 
    int size;
    
    void Initialize(int dim) {
        size = dim;
        for(int i = 0; i < dim; i++) {
            real[i] = (i == 0) ? 1.0 : 0.0;  // Initial state |000⟩
            imag[i] = 0.0;
        }
    }
    
    double GetProbability(int index) {
        return real[index] * real[index] + imag[index] * imag[index];
    }
    
    void Normalize() {
        double norm = 0.0;
        for(int i = 0; i < size; i++) {
            norm += real[i] * real[i] + imag[i] * imag[i];
        }
        
        norm = MathSqrt(norm);
        if(norm > MATRIX_EPSILON) {
            for(int i = 0; i < size; i++) {
                real[i] /= norm;
                imag[i] /= norm;
            }
        }
    }
};

此段代码实现了存储量子态的基础结构。与经典比特不同,量子态包含复数振幅,振幅之间可以发生量子干涉。GetProbability函数根据玻恩定则计算系统被测得处于某一给定状态的概率。

本实现的特点在于,我们并非单独操作单个量子比特,而是直接处理整个系统的完整量子态。这样对于正确模拟量子纠缠与量子关联至关重要。在我们的8维状态空间中,每个状态对应三个量子比特的一种组合:|000⟩、|001⟩、|010⟩、|011⟩、|100⟩、|101⟩、|110⟩、|111⟩。


量子门:从理论到实践

旋转门用于实现幺正变换,使得量子比特态在布洛赫球面上平滑旋转。

static void CreateRotationGate(int qubit, double angle, ComplexMatrix &gate) {
    gate.Initialize(STATE_DIM);
    double cos_half = MathCos(angle / 2.0);
    double sin_half = MathSin(angle / 2.0);
    
    for(int i = 0; i < STATE_DIM; i++) {
        for(int j = 0; j < STATE_DIM; j++) {
            gate.real[i][j] = 0.0;
            gate.imag[i][j] = 0.0;
            
            int bit_i = (i >> qubit) & 1;
            int bit_j = (j >> qubit) & 1;
            int other_bits_i = i & ~(1 << qubit);
            int other_bits_j = j & ~(1 << qubit);
            
            if(other_bits_i == other_bits_j) {
                if(bit_i == 0 && bit_j == 0) gate.real[i][j] = cos_half;
                else if(bit_i == 0 && bit_j == 1) gate.imag[i][j] = -sin_half;
                else if(bit_i == 1 && bit_j == 0) gate.imag[i][j] = -sin_half;
                else if(bit_i == 1 && bit_j == 1) gate.real[i][j] = cos_half;
            }
        }
    }
}

这段代码构建了作用于指定量子比特的旋转门矩阵。旋转角度与市场数据直接关联:价格波动越强,旋转角度就越大。这就在市场动态与系统量子态之间建立了直接联系。

算法通过位运算来确定需要填充哪些矩阵元素。对于每一对量子态|i⟩和|j⟩,我们会检查对目标量子比特的旋转是否会影响它们之间的跃迁。如果其他所有量子比特均处于相同状态,则旋转操作仅作用于目标量子比特。

受控相位门用于在量子比特之间创建量子纠缠。

static void CreateCPhaseGate(int control_qubit, int target_qubit, double phase, ComplexMatrix &gate) {
    gate.Initialize(STATE_DIM);
    
    for(int i = 0; i < STATE_DIM; i++) {
        int control_bit = (i >> control_qubit) & 1;
        int target_bit = (i >> target_qubit) & 1;
        
        if(control_bit == 1 && target_bit == 1) {
            gate.real[i][i] = MathCos(phase);
            gate.imag[i][i] = MathSin(phase);
        }
    }
}

相位φ取决于市场特征之间的相关性。当两个市场因子(如价格与成交量)高度相关时,对应的量子比特会发生量子纠缠。这使得系统能够捕捉数据中复杂的关联关系。

受控相位门仅在两个量子比特均处于|1⟩态时才会生效。此时,它会为对应量子态的振幅添加一个e^(iφ)相位因子。该操作不会改变单个量子比特的测量概率,但会在它们之间建立量子关联。

哈达玛门用于将量子比特置于叠加态。

static void CreateHadamardGate(int qubit, ComplexMatrix &gate) {
    gate.Initialize(STATE_DIM);
    double inv_sqrt2 = 1.0 / MathSqrt(2.0);
    
    for(int i = 0; i < STATE_DIM; i++) {
        for(int j = 0; j < STATE_DIM; j++) {
            // ... Hadamard matrix construction code
            if(bit_i == 0 && bit_j == 0) gate.real[i][j] = inv_sqrt2;
            else if(bit_i == 0 && bit_j == 1) gate.real[i][j] = inv_sqrt2;
            else if(bit_i == 1 && bit_j == 0) gate.real[i][j] = inv_sqrt2;
            else if(bit_i == 1 && bit_j == 1) gate.real[i][j] = -inv_sqrt2;
        }
    }
}

哈达玛门将量子比特置于|0⟩态与|1⟩态的均匀叠加态。在交易场景中,这意味着系统在做出最终“测量”(即交易决策)之前,可以同时考量看涨与看跌两种市场情形。


量子线路的动态构建

本方案的核心创新点在于根据实时流入的市场数据动态构建量子线路。每一项市场特征都会影响量子门的参数,从而为每一种市场行情构建一条独一无二的量子处理路径。

void BuildQuantumCircuit(const vector &features) {
    num_gates = 0;
    quantum_state.Initialize(STATE_DIM);
    
    // Rotation gates based on market features
    for(int qubit = 0; qubit < NUM_QUBITS && num_gates < MAX_GATES; qubit++) {
        if(qubit < features.Size()) {
            double angle = features[qubit] * M_PI / 2.0;
            CMatrixOps::CreateRotationGate(qubit, angle, circuit_gates[num_gates]);
            num_gates++;
        }
    }
    
    // Entangling gates between pairs of qubits
    for(int i = 0; i < NUM_QUBITS - 1 && num_gates < MAX_GATES; i++) {
        for(int j = i + 1; j < NUM_QUBITS && num_gates < MAX_GATES; j++) {
            double correlation = CalculateFeatureCorrelation(features[i], features[j]);
            double phase = correlation * features[i] * features[j] * M_PI * entanglement_factor;
            
            if(MathAbs(phase) > MIN_PHASE_THRESHOLD) {
                CMatrixOps::CreateCPhaseGate(i, j, phase, circuit_gates[num_gates]);
                num_gates++;
            }
        }
    }
    
    // Adaptive superposition gates
    double market_uncertainty = CalculateMarketUncertainty(features);
    for(int qubit = 0; qubit < NUM_QUBITS && num_gates < MAX_GATES; qubit++) {
        double superposition_probability = coherence * market_uncertainty;
        if(GetRandomDouble() < superposition_probability) {
            CMatrixOps::CreateHadamardGate(qubit, circuit_gates[num_gates]);
            num_gates++;
        }
    }
}

该算法展示了市场数据如何直接决定量子线路的架构。与静态神经网络不同,我们的系统会根据每一种市场行情自适应调整其内部结构。市场特征间的高相关性会生成更多的纠缠态,而市场不确定性的提升则会增加叠加操作的使用概率。

本方案的独特之处在于,我们并非简单套用固定的量子门序列。相反,系统会自适应构建量子线路结构:如果特征间相关性较弱,则不创建对应的纠缠门;如果市场的不确定性较低,则叠加门的使用频率会大幅降低。这种机制可帮助系统节省计算资源,并聚焦于最具相关性的量子效应。


量子演化与退相干

构建完量子线路后,系统进入量子演化阶段:对初始态|000⟩依次施加幺正算符。

void ExecuteQuantumCircuit() {
    // Initialize the state
    double state[STATE_DIM];
    ArrayInitialize(state, 0.0);
    state[0] = 1.0;  // Initial state |000⟩
    
    // Apply each gate in the circuit
    for(int gate_idx = 0; gate_idx < num_gates; gate_idx++) {
        ApplyGateToState(state, gate_idx);
    }
    
    // Normalize the state
    double norm = 0.0;
    for(int i = 0; i < STATE_DIM; i++) {
        norm += state[i] * state[i];
    }
    
    norm = MathSqrt(norm);
    if(norm > MATRIX_EPSILON) {
        for(int i = 0; i < STATE_DIM; i++) {
            quantum_state.real[i] = state[i] / norm;
            quantum_state.imag[i] = 0.0;
        }
    }
}

运算符的施加顺序至关重要,因为量子门不满足交换律。这就意味着市场事件发生的先后顺序会影响系统的最终量子态,正如真实市场中数据到达的顺序会影响价格走势一样。


模拟市场退相干

在真实金融系统中,量子效应存在于“充满噪声”的环境里。持续不断的消息流、交易者的情绪反应以及宏观经济事件共同造成了退相干。

void ApplyEnvironmentalDecoherence(ComplexVector &state, int evolution_step) {
    // Adaptive assessment of market noise
    double market_volatility = CalculateRecentVolatility();
    double information_flow = CalculateInformationIntensity();
    double decoherence_strength = base_decoherence_rate * 
                                 (1.0 + 0.5 * market_volatility + 0.3 * information_flow);
    
    // Phase decoherence (loss of quantum interference)
    for(int i = 0; i < STATE_DIM; i++) {
        if(state.GetProbability(i) > DECOHERENCE_THRESHOLD) {
            double phase_noise = GenerateGaussianNoise(0.0, decoherence_strength);
            
            // Rotation in the complex plane
            double cos_phase = MathCos(phase_noise);
            double sin_phase = MathSin(phase_noise);
            
            double new_real = state.real[i] * cos_phase - state.imag[i] * sin_phase;
            double new_imag = state.real[i] * sin_phase + state.imag[i] * cos_phase;
            
            state.real[i] = new_real;
            state.imag[i] = new_imag;
        }
    }
    
    state.Normalize();
}

这段代码模拟了符合真实市场特征的退相干过程,其强度由市场状态直接决定。在市场平稳阶段,量子效应能维持更久;而在市场剧烈波动时,系统会迅速退化为经典行为模式。

退相干并非单纯的技术细节,而是模型中至关重要的组成部分。它反映了一个现实:金融市场无法无限期维持量子相干性。新信息、交易者决策、情绪变化等,都相当于一次次的“测量”,会破坏量子叠加态。


量子测量与信息提取

从量子态中提取信息,需要使用专门的测量方案。

vector MeasureQuantumState() {
    vector measurements = vector::Zeros(NUM_QUBITS);
    
    // Compute the probability of measuring each qubit
    for(int qubit = 0; qubit < NUM_QUBITS; qubit++) {
        double prob_1 = 0.0;
        
        for(int i = 0; i < STATE_DIM; i++) {
            if((i >> qubit) & 1) {  // If the qubit is in state |1⟩
                prob_1 += quantum_state.GetProbability(i);
            }
        }
        
        measurements[qubit] = prob_1;  // Probability to measure |1⟩
    }
    
    return measurements;
}

Z测量对应经典交易信号,即价格上涨或下跌的概率。X测量用于揭示叠加态效应,识别市场不确定性最大的时刻。双量子比特关联测量可挖掘各类市场因子之间的隐藏关联。

本实现的一个重要特点是采用非破坏性测量。与真实量子系统中测量会导致波函数坍缩不同,我们在提取统计信息的同时不会扰动量子态。允许进行多次测量,从而获取关于系统的丰富信息。


混合架构:兼顾两者之长

其核心成果是将量子处理与经典方法巧妙结合。量子处理器对经典分析起到补充与增强作用。

double Predict(const vector &input_features, double &confidence, bool is_training = false) {
    // Apply the quantum processor to the input data
    matrix input_matrix(1, input_features.Size());
    input_matrix.Row(input_features, 0);
    
    // Create a base context for the quantum processor
    matrix basic_context = matrix::Zeros(1, input_features.Size());
    for(ulong i = 0; i < input_features.Size(); i++) {
        basic_context[0][i] = MathSin(input_features[i] * M_PI / 4.0);
    }
    
    // Apply quantum effects
    matrix quantum_enhanced_input = input_quantum_proc.ApplyQuantumEffects(input_matrix, basic_context);
    vector quantum_features = quantum_enhanced_input.Row(0);
    
    // Market state classification with quantum-enhanced data
    double price_change = quantum_features[0];
    double volatility = quantum_features[1];
    double volume_ratio = quantum_features[2];
    int state = markov_chain.ClassifyMarketState(price_change, volatility, volume_ratio);

    // Get state embedding
    matrix state_embedding = markov_chain.Forward(state);
    
    // Further processing via classical components...
    matrix ssm_output = ssm.ProcessSequence(quantum_input_matrix);
    matrix contextualized = context_analyzer.ProcessWithContext(combined);
    
    // Transformer layers with quantum attention
    matrix hidden = contextualized;
    for(int i = 0; i < TRANSFORMER_LAYERS; i++) {
        hidden = transformer_layers[i].Forward(hidden, is_training);
    }
    
    // Final forecast
    double prediction = Sigmoid(output_result[0][0] + output_bias[0]);
    confidence = meta_model.Forward(quantum_features, prediction, error_metrics);
    
    return prediction;
}

以下代码展示了量子处理如何融入整体流程。原始数据首先送入量子处理器,由其挖掘隐藏关联并生成增强特征表示。经过量子增强的数据,再交由经典系统模块进行后续处理。

该架构的一个重要设计思路是:我们并非用量子方法取代经典方法,而是构建协同体系。量子处理器充当“预处理器”,为输入数据补充关于隐藏关联与非线性依赖的附加信息,实现数据增强。经典模块再利用这些增强后的信息做出更精准的决策。

将量子效应集成到Transformer的注意力机制中,这一点尤其值得关注。

matrix Forward(const matrix &input_data, bool is_training) {
    last_input_data = input_data;
    matrix Q = input_data.MatMul(W_q);
    matrix K = input_data.MatMul(W_k);
    matrix V = input_data.MatMul(W_v);
    
    // Apply dropout in training mode
    if (is_training) {
        Q = ApplyDropoutMask(Q, dropout_mask_q, 1.0 / (1.0 - DROPOUT_RATE));
        K = ApplyDropoutMask(K, dropout_mask_k, 1.0 / (1.0 - DROPOUT_RATE));
        V = ApplyDropoutMask(V, dropout_mask_v, 1.0 / (1.0 - DROPOUT_RATE));
    }
    
    // KEY INNOVATION: Quantum processing of Query and Key
    Q = quantum_proc.ApplyQuantumEffects(Q, input_data);
    K = quantum_proc.ApplyQuantumEffects(K, input_data);
    
    // Calculate attention scores with quantum correlations
    matrix scores = Q.MatMul(K.Transpose()) / MathSqrt((double)d_model);
    
    // Use softmax to obtain attention weights
    matrix scores_softmax = matrix::Zeros(scores.Rows(), scores.Cols());
    for(ulong i = 0; i < scores.Rows(); i++) {
        vector row = scores.Row(i);
        double max_val = row.Max();
        for(ulong j = 0; j < row.Size(); j++)
            row[j] = MathExp(row[j] - max_val);
        double sum = row.Sum();
        if (sum == 0.0) sum = 1e-9;
        row = row / sum;
        scores_softmax.Row(row, i);
    }
    
    matrix attention_output = scores_softmax.MatMul(V);
    return attention_output.MatMul(W_o);
}

对查询矩阵(Query)与键矩阵(Key)进行量子处理,使得注意力机制不仅能捕捉特征间的线性关系,而且能纳入量子关联。这对于在噪声极强的金融数据中识别微弱有效信号尤为高效。

整套系统已实现为MetaTrader 5专用的交易EA,其完全基于MQL5编写,不依赖任何外部库。该架构包含以下核心模块:

struct QuantumContextAnalyzer {
    matrix short_memory, medium_memory, long_memory, episodic_memory, pattern_memory;
    
    matrix ProcessWithContext(const matrix &input_data) {
        // Adaptive weighting of memory types
        double input_volatility = CalculateVolatility(input_data);
        double short_weight = 0.4 + 0.4 * input_volatility;
        double medium_weight = 0.3 + 0.2 * (1.0 - input_volatility);
        double long_weight = 0.2 + 0.3 * (1.0 - input_volatility);
        
        // Apply quantum effects to contextual information
        matrix quantum_result = quantum_proc.ApplyQuantumEffects(input_matrix, context_matrix);
        
        return quantum_result;
    }
};

系统会根据市场状况动态选择最相关的记忆类型。在高波动时期,短期记忆权重更高;而在平稳行情下,则更侧重长期记忆。

double Forward(const vector &original_features, double prediction, const vector &error_metrics) {
    vector meta_input = vector::Zeros(original_features.Size() + 1 + error_metrics.Size());
    
    // Combine the original features, forecast, and error metrics
    for(ulong i = 0; i < original_features.Size(); i++)
        meta_input[i] = original_features[i];
    meta_input[original_features.Size()] = prediction;
    for(ulong i = 0; i < error_metrics.Size(); i++)
        meta_input[original_features.Size() + 1 + i] = error_metrics[i];
    
    // Confidence prediction via a two-layer network
    matrix hidden = input_matrix.MatMul(meta_weights);
    for(ulong i = 0; i < hidden.Cols(); i++) 
        hidden[0][i] = Tanh(hidden[0][i] + meta_bias[i]);
    
    matrix output_result = hidden.MatMul(output_weights);
    return Sigmoid(output_result[0][0] + output_bias_meta[0]);
}

此元模型不仅分析当期预测结果,还会复盘系统历史误差,针对每一种行情场景自适应评估预测置信度。

我们还特别重视其与面向prop公司的风控系统的集成。当下自营交易机构对最大回撤、单日亏损上限、盈利目标均设有严苛硬性要求。


实盘交易表现:理论落地实战

评判一套交易系统成色最核心的标准,是其在真实市场环境下的运行表现。在2024至2025年期间,此量子交易系统的表现如下:

财务情况:

  • 年化收益率:+13.3%
  • 最大回撤:2.39%
  • 交易胜率:87%
  • 夏普比率:2.48
  • 平均持仓时长:4.2小时

系统自适应特性:尤为关键的是,该系统在不同市场环境下都表现出较为稳定的结果。当市场进入高波动区间,系统会自动缩小开仓手数,切换为保守交易模式;反之,行情平稳阶段则会适度提高交易激进程度,利用量子效应捕捉微弱但稳定的信号。

尽管结果令人印象深刻,但该系统仍未达成全部预设研发目标,

现存局限如下:

  • 夏普比率2.48,尚未达到3.5及以上的目标值
  • 量子模拟器计算复杂度高,硬件资源消耗量大
  • 超参数调优流程繁琐,优化难度较高
  • 针对每一种交易品种,都需要单独精细校准模型参数



结论

量子未来为算法交易开启了一片全新天地。转向虚拟量子比特,带来了相较传统方法的显著优势,提升了预测精度与交易业绩。我们这套基于量子力学原理构建的系统,能够天然应对市场不确定性与复杂关联问题,而这正是传统模型难以攻克的难点。首个完整可用的量子模拟器、自适应架构的设计,以及在混合系统中实现量子与经典方法的融合,均是本研究的核心成果。

未来,我们将聚焦于系统优化,力争将夏普比率提升至3.5以上,并持续构建量子交易生态体系。整套实现已封装为MetaTrader 5交易EA,可用于实时运行。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/18890

附加的文件 |
最近评论 | 前往讨论 (4)
Anatoli Kazharski
Anatoli Kazharski | 1 8月 2025 在 11:11

@Yevgeniy Koshtenko

压缩包中存在PropRiskManagerLoss.mqh 的重复文件:

看来缺少HybridQuantumNeuralV3.mqh 文件,导致QuantumProp_EA_Lite.mq5 无法无错误地编译。

Yevgeniy Koshtenko
Yevgeniy Koshtenko | 1 8月 2025 在 12:05
Anatoli Kazharski #:

@叶夫根尼·科什滕科

存档中存在PropRiskManagerLoss.mqh 的重复文件:

看来缺少HybridQuantumNeuralV3.mqh 文件,导致QuantumProp_EA_Lite.mq5 无法无错误地编译。

非常感谢!我刚刚才发现这个问题,已经用最新的文件重新提交审核了)

Sergei Goncharov
Sergei Goncharov | 2 8月 2025 在 09:20

叶夫根尼,这看起来确实是一款非常专业的优质产品。我们会进行测试并提供反馈。请问,有没有办法让这个训练模型使用GPU进行训练,就像Python中的LSTM模型那样? 万一你已经研究过这个问题,就别再浪费时间了。如果没有,我们可以一起探讨一下,毕竟硬件性能在这个模型中至关重要,这也是理所应当的。一个经过深度分析的高质量模型,对硬件性能的要求自然会很高。

sindicato
sindicato | 11 9月 2025 在 14:31

早上好。

我未能重现文章中描述的测试,甚至无法绘制出类似的图表。

您能否告知我们相关参数和代码?

谢谢。

从基础到中级:对象(二) 从基础到中级:对象(二)
在今天的文章中,我们将探讨如何使用代码以一种简单的方式控制某些对象属性。我们还将了解自定义应用程序如何将多个对象放置在同一个图表上。此外,我们将开始认识到,为我们计划实现的任何指标分配一个简称的重要性。
MQL5 向导技巧(第七十七部分):使用 Gator 振荡器与积累/派发振荡器(AD Oscillator) MQL5 向导技巧(第七十七部分):使用 Gator 振荡器与积累/派发振荡器(AD Oscillator)
Gator 振荡器(Gator Oscillator)由比尔·威廉姆斯(Bill Williams)开发,与累积/派发振荡器(Accumulation/Distribution Oscillator)是另一对可在 MQL5 EA 中协同使用的指标组合。我们使用 Gator 振荡器来确认趋势,同时使用 AD 振荡器通过检查成交量来确认趋势。在探索这种指标组合时,我们一如既往地使用 MQL5 向导来构建和测试它们的潜力。
您应该了解的MQL5向导技巧(第七十八部分):鳄鱼振荡器与AD指标的市场韧性策略 您应该了解的MQL5向导技巧(第七十八部分):鳄鱼振荡器与AD指标的市场韧性策略
本文介绍鳄鱼震荡器与积累/派发(AD)指标系统化交易方法的后半部分内容。作者新增五种信号形态,演示如何过滤虚假走势、捕捉早期反转,并在多时间周期上实现信号共振。文中附带清晰的代码示例与性能测试结果,为 MQL5 开发者搭建了从理论到实践的桥梁。
神经网络在交易中的应用:不依赖特定数据的时间序列泛化(Mamba4Cast) 神经网络在交易中的应用:不依赖特定数据的时间序列泛化(Mamba4Cast)
在本文中,我们介绍了 Mamba4Cast 框架,并深入探讨了其关键组件之一:基于时间戳的位置编码。本文展示了如何结合数据的日历结构来构建时间嵌入。