エキスパート: MarketPredictor - ページ 2

 

ヒントをありがとうございます。コードは5日間進行中で、取引が設定されない問題は解決しました。)

 

新しい反復を行う必要がある

    // ボラティリティ(ATR)に基づいてアルファを調整する。
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // ATRを計算する
    if(atr > 0.0)
        alpha = atr * 0.1; // アルファ値をボラティリティに比例させる
    else
        alpha = inputAlpha; // ATRが利用できない場合、入力値にフォールバックする。

このコードではATRを正しく計算できません。

https://www.mql5.com/ja/docs/indicators/iatr

戻り値

指定したテクニカル指標のハンドルを 返します。


コードであるハンドルを返し、ATRの値は返しません。

Documentation on MQL5: Technical Indicators / iATR
Documentation on MQL5: Technical Indicators / iATR
  • www.mql5.com
The function returns the handle of the Average True Range indicator. It has only one buffer. Parameters symbol [in] The symbol name of the security...
 
1. バグ修正:
- FFTにおいて:偶数配列と奇数配列に対する再帰的FFT呼び出しは、配列サイズが2の次数でない場合、無限再帰につながる可能性がある。
配列サイズが2の次数であることを確認する必要があります。これは現在のコードではチェックされていません。
- CalculateFractalComponentFFT: 関数では、FFTを使用しますが、Nが2の次数であることはチェックしません。
また、FFTの後、最初のN/2要素のみを使用しており、これは正しいのですが、FFTコードでは結合時のインデックス付けに誤りがあります。
2.改善点:
- ExecuteTrade 関数で、PositionSelect(_Symbol) を使ってオープンポジションをチェックするのは正しくない。
なぜなら、この関数はシンボルにポジションがあれば真を返すが、現在オープンしているとは限らないからである。
すべてのポジションをループして、マジックナンバーとシンボルをチェックする方がよいでしょう。
- また、ExecuteTrade では、すでにオープンしているポジションがあるかどうかをチェックしないので、複数のポジションをオープンすることができます。
オープンするポジションを1つに限定する必要があります(または、ポジションを識別するためにマジックナンバーを使用します)。
- OptimiseParameters: 関数では、移動平均の計算を組み込みの iMA 関数で置き換えることができます。
- SimulatePrice関数では、MathRand()を使用することはモンテカルロ法には適していません。