MT4のインジケーター作成において、特にマルチタイムフレーム(MTF)ストキャスティクスが正しく表示されない場合、どのように修正すべきかを解説します。ここでは、あなたの質問に基づき、MTFストキャスティクスの問題とその修正方法について詳しく説明します。
MT4のMTFインジケーターとは?
MTF(マルチタイムフレーム)インジケーターは、異なる時間足のデータを使って分析するためのツールです。通常、MTFを使うことで、長期のトレンドと短期の動きが同時に見えるため、トレーダーにとっては非常に便利なものです。特に、ストキャスティクスをMTFで利用することで、異なる時間足でのオーバーボートやオーバーソールドのシグナルを得ることができます。
問題の原因:MTFストキャスティクスの表示不具合
あなたが直面している問題は、カレントタイム(現在の時間足)ではラインが表示されるのに対し、MTFで表示されないというものです。この問題は、iStochastic関数が異なる時間足を取得するための正しいパラメータを渡していない、またはタイムフレームの設定が適切でない場合に発生します。
さらに、`iBarShift`関数で時間足のインデックスを取得している部分が、適切に計算されていない可能性も考えられます。これにより、異なる時間足のデータが正しく取得できていないことが原因です。
修正方法
まず、修正すべき点は以下の通りです。
- 1. タイムフレームの設定を確認する:
タイムフレームが適切に設定されていない場合、MTFインジケーターは異なる時間足のデータを取得できません。`if (TF != PERIOD_CURRENT && TF <= Period()) TF = PERIOD_CURRENT;`の行でタイムフレームを設定していますが、この条件を見直し、必要な時間足を明確に設定しましょう。 - 2. `iBarShift`の使用を修正する:
`iBarShift`関数の使い方に誤りがある場合、正しい時間足のバーを取得できません。時間足のインデックスを取得する方法に変更が必要かもしれません。 - 3. `EMPTY_VALUE`の設定:
データが存在しない場合やインデックスが一致しない場合に、`EMPTY_VALUE`を設定して、表示されないデータを回避する処理を確認してください。
具体的な修正例
以下は、修正後のコード例です。
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) {
int i, limit, bar;
if (TF != PERIOD_CURRENT && TF <= Period()) TF = PERIOD_CURRENT;
limit = Bars - prev_calculated - 2;
for (i = limit; i >= 0; i--) {
bar = iBarShift(NULL, TF, Time[i]);
MTF_Stoch[i] = iStochastic(NULL, TF, K_Period, D_Period, SD_Period, Sig_Method, Stoch_Price, 0, bar);
MTF_Signal[i] = iStochastic(NULL, TF, K_Period, D_Period, SD_Period, Sig_Method, Stoch_Price, 1, bar);
if (bar == iBarShift(NULL, TF, Time[i + 1])) {
MTF_Stoch[i + 1] = EMPTY_VALUE;
MTF_Signal[i + 1] = EMPTY_VALUE;
}
}
return(rates_total);
}
まとめ
MTFストキャスティクスインジケーターを作成する際、タイムフレーム設定やデータ取得方法に注意が必要です。上記の修正を加えることで、正常に異なる時間足のデータを取得し、表示することができるようになります。エラーを修正した後、再度MTFインジケーターをテストし、期待通りの結果が得られるか確認してください。
こんにちは!利益の管理人です。このブログは投資する人を増やしたいという思いから開設し運営しています。株式投資をメインに分散投資をしています。


コメント