共通ライブラリには、時・分を指定して、現在その時刻かどうかを判別する関数isTimeAt()
があります。これを使うと、決まった時刻に手仕舞いするコードは簡単に書けます。
//共通ライブラリ
#include "LibEA.mqh"
sinput double Lots = 0.1; //売買ロット数
//ティック時実行関数
void Tick()
{
//23時30分に決済
if(isTimeAt(23,30)) MyOrderClose();
int sig_entry = EntrySignal(); //仕掛けシグナル
//成行売買
MyOrderSendMarket(sig_entry, sig_entry, Lots);
}
input int RSIPeriod = 14; //RSIの期間
//仕掛けシグナル関数
int EntrySignal()
{
//1本前のRSI
double RSI1 = iRSI(_Symbol, 0, RSIPeriod, PRICE_CLOSE, 1);
int ret = 0; //シグナルの初期化
//買いシグナル
if(RSI1 < 30) ret = 1;
//売りシグナル
if(RSI1 > 70) ret = -1;
return ret; //シグナルの出力
}
isTimeAt()
は、true/falseという論理型の値を返すので、これをif文の条件式のところに書いておきます。条件を満たしたときに実行する文としては、MyOrderClose()
というポジションを決済する関数を書いておきます。
<aside> 💡 決済する時刻がバーの開始時刻とずれている場合、ストラテジーテスターのモデルを「1分足OHLC」「全ティック」にしてバックテストする必要があります。
</aside>