共通ライブラリには、時・分を指定して、現在その時刻かどうかを判別する関数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>