【MQL】新しいローソク足ができた時のみ実施する
初心者がよく躓いてしまうのが連続して注文されてしまうという問題です。
これを回避するコードを書きました。
変数宣言(#property strictの下)
datetime prevtime;
Time[0]の時間を退避する用の変数です。
新しいローソク足ができた時のみ実施(OnTick内)
if(Time[0] != prevtime){ prevtime = Time[0]; }else{ return; } // ----- 新しいローソク足ができた時のみ以降の処理を実施 -----
少しわかりづらいので解説します。
Time[0]には新しいローソク足ができた時間が格納されます。
1時間足なら11時→12時→13時といった具合に1時間毎に更新されます。
この時間とprevtimeに退避させた時間を比べます。
初回はprevtimeには何も入っていません。
prevtimeとTime[0]はイコールではないので、prevtimeにTime[0]の時間を代入し、以降の処理を実施します。
ex)
prevtime(空)!=Time[0](11時)
prevtime=11時を代入
以降の処理を実施
Time[0]が更新されるまではprevtimeとTime[0]はイコールです。
イコールの場合は以降の処理が実施されません。
ex)
prevtime(11時)==Time[0](11時)
return;(処理を終了)
Time[0]が更新されるとprevtimeとTime[0]がイコールではなくなるので、prevtimeにTime[0]の値を代入し、以降の処理を実施します。
ex)
prevtime(11時)!=Time[0](12時)
prevtime=12時を代入
以降の処理を実施