English Русский 中文 Español Deutsch Português
preview
MQL5での量子ニューラルネットワーク(第3回):量子ビットに基づく仮想量子プロセッサ

MQL5での量子ニューラルネットワーク(第3回):量子ビットに基づく仮想量子プロセッサ

MetaTrader 5エキスパートアドバイザー |
12 4
Yevgeniy Koshtenko
Yevgeniy Koshtenko

研究の第2回では、量子的な効果を数学的に模倣したシステムを開発しました。そこでは、共鳴(コサイン)、干渉(サイン)、デコヒーレンス(指数関数)のような数学的モデルを使用していました。しかし、これはあくまでも量子現象の模倣にとどまっていました。形式的には洗練されて見えましたが、本質的には量子的なシステムではありませんでした。

時間が経つにつれて、このモデルは洗練されているものの、量子処理の本質である、重ね合わせ、量子もつれ、測定による不可逆性を捉えられていないことが明らかになりました。私たちは原理ではなく、関数を扱っていたのです。

従来の古典的アプローチには依然として限界があります。

  • LSTM → 正解率は最大でも約58%
  • Transformer → ノイズの影響を受けやすい
  • ARIMA → その有効性を失っている
  • 各種モデル → 過学習によって不安定になる

重要なブレークスルー:仮想量子ビットへの移行

第2バージョンでは、数学的な類似モデルの代わりに、本格的な量子プロセッサを使用します。構成は3量子ビット、8次元の状態空間、量子ゲート、測定です。アーキテクチャも全面的に見直されています。現在では、すべての演算が量子力学の法則に従って動作します。具体的には、ユニタリ性、正規化、測定時の挙動などが考慮されています。


量子プロセッサアーキテクチャ

各量子ビットは、2次元ヒルベルト空間内の複素ベクトルとして表現されます。

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次元状態空間における各状態は、3つの量子ビットの特定の組み合わせ、|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);
        }
    }
}

位相φは、市場の特徴量間の相関関係に依存します。2つの市場要因が強く相関している場合(たとえば、価格と出来高)、それに対応する量子ビットは量子もつれの状態になります。これにより、システムはデータ内に存在する複雑な関係性を考慮できるようになります。

制御位相ゲートは、両方の量子ビットが|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測定は、重ね合わせの効果を明らかにし、市場の不確実性が最大になる局面を示します。2量子ビット間の相関は、さまざまな市場要因の間に存在する隠れた関係性を明らかにします。

この実装における重要な特徴の一つは、非破壊測定をおこなっていることです。実際の量子系では、測定をおこなうと波動関数が収縮します。しかし、この実装では量子状態を変化させることなく、統計的な情報を抽出します。これにより、同じ量子状態に対して複数回の測定をおこなうことができ、システムについてより豊富な情報を取得できます。


ハイブリッドアーキテクチャ:両方の長所を活かす

このシステムにおける最大の成果は、量子処理と古典的な手法をエレガントに統合したことです。量子プロセッサは、古典的な分析を補完・強化する役割を果たします。

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]);
}

メタモデルは、現在の予測だけでなく、システムの過去の誤差履歴も分析し、それぞれのケースにおける予測の信頼度を適応的に評価します。

特に、プロップファームで運用するためのリスク管理システムとの統合に重点を置きました。現代のプロップファームでは、最大ドローダウン、1日の最大損失額、利益目標などについて厳格な条件が設定されています。


実運用でのトレード結果:理論と現実の融合

どのような取引システムであっても、最も重要なテストは、実際の市場環境においてどのような結果を出すかです。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 の重複ファイルがあります:

QuantumProp_EA_Lite.mq5を エラーなしでコンパイルするには、HybridQuantumNeuralV3.mqh ファイルが不足しているようです。

Yevgeniy Koshtenko
Yevgeniy Koshtenko | 1 8月 2025 において 12:05
Anatoli Kazharski #:

@Yevgeniy Koshtenko

アーカイブ内にPropRiskManagerLoss.mqh の重複ファイルがあります:

QuantumProp_EA_Lite.mq5を エラーなしでコンパイルするには、HybridQuantumNeuralV3.mqh ファイルが不足しているようです。

どうもありがとうございます! 私も今気づきました。最新のファイルで再確認のために送信しました)

Sergei Goncharov
Sergei Goncharov | 2 8月 2025 において 09:20

エフゲニーさん、これはまさに優れたプロフェッショナル向け製品ですね。テストを行ってフィードバックを送ります。ところで、この学習モデルを、例えばPythonのLSTMモデルの場合のように、学習にGPUを使わせることはできないのでしょうか? もしすでにこの件について調査済みなら、時間を無駄にしないためにも教えてほしい。もしそうでなければ、一緒に考えてみよう。このモデルではハードウェアの性能が重要だからね。それも当然だ。深い分析に基づく質の高いモデルなら、ハードウェアへの要求が厳しいのは当然のことだ。

sindicato
sindicato | 11 9月 2025 において 14:31

おはようございます。

記事に記載されているテストを再現することができず、似たようなグラフすら作成できませんでした。

パラメータとシンボルを教えていただけますか?

よろしくお願いします。

EAのサンプル EAのサンプル
一般的なMACDを使ったEAを例として、MQL4開発の原則を紹介します。
MQL5における建値機能の実装(第2回):ATRとRRRに基づく建値機構 MQL5における建値機能の実装(第2回):ATRとRRRに基づく建値機構
MQL5におけるATRおよびRRRRベースの建値機構の実装を完了し、パラメータを再入力することなく建値モードを簡単に切り替えられるクラスを新たに実装します。各建値方式の有効性を評価するため、複数のバックテストを実施し、アルゴリズム取引の観点からそれぞれのメリットとデメリットを分析します。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
初級から中級まで:FileSaveとFileLoad 初級から中級まで:FileSaveとFileLoad
FileSaveおよびFileLoadのライブラリ関数を使用するいくつかの方法について見ていきます。特定の状況では、いくつかの制限や扱いにくさがあるため、これらの関数は用途が限られていると考える人も多いでしょう。しかし、この2つの関数がどのように動作するのかを正しく理解しておけば、さまざまな場面で多くの手間を省くことができます。また、これらはログファイルを扱うための優れた方法でもあります。