【MQL】判定時刻を迎えるまで別のエントリーを行わないようにする

このページでは、アローを表示した後判定時刻を迎えるまで別のエントリーを行わないようにする制御方法について解説していきます。

一つのエントリー中に別のエントリーを行ってしまうと、ナンピンになってしまいますし、正しいバックテスト結果を得られなくなります。

基本的にナンピンはお勧めしません。一つ目のエントリーでバシッと良いポジションでエントリーできるようにしていった方が良いです。

目次

全体の流れを把握しておく

アローを表示した後の流れについては以下の通りでした。

全体の流れ
  1. エントリー時間と判定時間を求める
  2. エントリー中は別のエントリーを行わない
  3. 判定時刻を迎えたらエントリーと判定時の価格を比較する
  4. 比較結果から勝敗を決める
  5. 勝敗結果を出力する

このページでは②について解説していきます。

このコードは5分足チャートで確定足ベースのロジックに対して判定するものを想定しています。

エントリー中は別のエントリーを行わない

エントリー条件に一致したら各時間データが格納されるようになりました。

しかし、このままだと判定を迎える前にアロー条件に達してしまった場合、新しいエントリー時間と判定時間が変数に代入されてしまい、以前の時間データが上書きされてしまいます。

そうなると、正しいバックテストが出来なくなりますので、一度エントリーしたら判定を迎えるまで次のエントリーをしないように制御しなければなりません。

そんな時に利用できるのがbool型の変数です。

まずは、bool型のグローバル変数を用意します。

bool LowEntryFlag = false;
bool HighEntryFlag = false;

bool型の変数を宣言すると同時に初期値として「false」を代入しています。

次に、エントリー条件に「LowEntryFlagがfalse」という内容を追加します。

if文のカッコ内の最後に「&& !LowEntryFlag」を追加します。これで、今までの条件のほかに「false」の時という条件が追加されました。

エイツ

変数の頭にある「!」は「LowEntryFlag == false」と同じ意味になります。

「true」になるタイミングは、実際にアローが表示されたタイミングなので、判定時間を求めるコードの次に「LowEntryFlag = true;」を追加します。

//Lowアロー条件
if(rsi_value >= 70 && sto_main >= 80 && sto_signal >= 80 && !LowEntryFlag)
{
   Low_Arrow[i] = high[i] + 10 * Point;
   
   //5分現在足から1本分未来時間にずらす
   LowEntryTime = time[i] + PeriodSeconds(NULL) * 1; 
   //5分現在足から2本分未来時間にずらす
   LowJudgeTime = time[i] + PeriodSeconds(NULL) * 2; 
   
   LowEntryFlag = true;
}

//Highアロー条件
if(rsi_value <= 30 && sto_main <= 20 && sto_signal <= 20 && !HighEntryFlag)
{
   High_Arrow[i] = low[i] - 10 * Point;
   
   //5分現在足から1本分未来時間にずらす
   HighEntryTime = time[i] + PeriodSeconds(NULL) * 1; 
   //5分現在足から2本分未来時間にずらす
   HighJudgeTime = time[i] + PeriodSeconds(NULL) * 2; 
   
   HighEntryFlag = true;
}

これにより、一度エントリーが実施されたら新しいエントリーがされなくなります。

このままだと、二度とエントリーがされなくなってしまいますので、判定を迎えたタイミングで「LowEntryFlag」を「false」に戻してあげる必要があります。

エイツ

「HighEntryFlag」もしっかり追加してね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次