時・分を指定して、現在その時刻かどうかを判別する関数isTimeAt()に加えて、曜日を判別する関数isDayOfWeek()を使うことで、週末など決まった曜日の決まった時刻に手仕舞いさせることができます。

コード

//共通ライブラリ
#include "LibEA.mqh"

sinput double Lots = 0.1; //売買ロット数

//ティック時実行関数
void Tick()
{
   //金曜日の23時30分に決済
   if(isDayOfWeek(DT_FRI) && 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; //シグナルの出力
}

説明

isDayOfWeek()は、現在の時刻が引数に指定した曜日かどうかを判別する関数です。isTimeAt()と同様にtrue/falseという論理型の値を返すので、if文の条件式にisTimeAt()&&でつないで書いておきます。

ただし、isDayOfWeek()は、一つの曜日の判別だけでなく、複数の曜日も判別できる関数なので、引数としては、DT_FRIのようにDT_で始まる定数(共通ライブラリ独自の定数)を指定してください。


<aside> 💡 決済する時刻がバーの開始時刻とずれている場合、ストラテジーテスターのモデルを「1分足OHLC」「全ティック」にしてバックテストする必要があります。

</aside>