このページでは、アローを表示した後判定時刻を迎えるまで別のエントリーを行わないようにする制御方法について解説していきます。
一つのエントリー中に別のエントリーを行ってしまうと、ナンピンになってしまいますし、正しいバックテスト結果を得られなくなります。
基本的にナンピンはお勧めしません。一つ目のエントリーでバシッと良いポジションでエントリーできるようにしていった方が良いです。
全体の流れを把握しておく
アローを表示した後の流れについては以下の通りでした。
- エントリー時間と判定時間を求める
- エントリー中は別のエントリーを行わない
- 判定時刻を迎えたらエントリーと判定時の価格を比較する
- 比較結果から勝敗を決める
- 勝敗結果を出力する
このページでは②について解説していきます。
このコードは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」もしっかり追加してね。
コメント