日中の決まった時間帯に発生した仕掛けシグナルのみを採用するタイムフィルタの例です。

共通ライブラリには、開始時刻(時・分)と終了時刻(時・分)を指定して、現在その時刻かがその範囲内に入っているかどうかを判別する関数[isTimeRange()](<https://toyolab-fx.notion.site/isTimeRange-d99075a3bf7c44a88ff123880fa8988d>)があります。

コード

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

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

//ティック時実行関数
void Tick()
{
   int sig_entry = EntrySignal(); //仕掛けシグナル
   int sig_filter = FilterSignal(sig_entry); //タイムフィルタ
   //成行売買
   MyOrderSendMarket(sig_filter, 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; //シグナルの出力
}

input int StartHour = 12; // 開始時刻(時)
input int EndHour = 20;   // 終了時刻(時)

//フィルタ関数
int FilterSignal(int signal)
{
   int ret = 0; //シグナルの初期化

   //売買シグナルのフィルタ
   if(isTimeRange(StartHour, 0, EndHour, 0)) ret = signal;

   return ret; //シグナルの出力
}

説明

[isTimeRange()](<https://toyolab-fx.notion.site/isTimeRange-d99075a3bf7c44a88ff123880fa8988d>)は、開始時刻の時hour_from、分min_from、終了時刻の時hour_to、分min_toと4つの引数をとります。

この例では、開始時刻、終了時刻の時として別途宣言したStartHourEndHourをそれぞれhour_fromhour_toに代入します。min_frommin_toには、0分という意味で0をそれぞれ代入します。

[isTimeRange()](<https://toyolab-fx.notion.site/isTimeRange-d99075a3bf7c44a88ff123880fa8988d>)は、現在の時刻が開始時刻と終了時刻の範囲内であれば、trueを返す関数なので、if文の条件式のところに書いておくだけです。

なお、開始時刻と終了時刻の範囲内にシグナルを無効にした場合は、以下のようにシグナルの初期化の値と、if文で設定するシグナルの値を逆にすればOKです。

input int StartHour = 12; // 開始時刻(時)
input int EndHour = 20;   // 終了時刻(時)

//フィルタ関数
int FilterSignal(int signal)
{
   int ret = signal; //シグナルの初期化

   //売買シグナルのフィルタ
   if(isTimeRange(StartHour, 0, EndHour, 0)) ret = 0;

   return ret; //シグナルの出力
}