トレード備忘録 & MT4/MT5インディケータ及びEAの開発

日々のトレード備忘録及びMT4/MT5に関する事項

MT4 EAに取引時間制限 – ロンドン/ニューヨーク時間で取引する

2019-10-02 00:16:13 | 投資

 専業でFX取引を行うトレーダーの多くは、動きが少なくレンジ相場になることが多い東京(アジア)の取引時間帯を避けて、ロンドン市場オープンからニューヨーク取引時間帯を選択することが多い。また、MT4で順張りの自動売買を試みる人にとっては、システム的にアジア時間帯で売買のエントリーシグナルが発生しても、そのシグナルは採用しないということができればダマシが少なくなることが考えられる。 

 自動売買プログラム(EA)を時間帯別にオン・オフする方法としては、スクリプトやインディケータに頼る方法とEA自体にトレード時間帯を制限するフィルターを搭載する方法がある。前者については、「とあるMetaTraderの備忘秘録」等のサイトで公開されているのでここでは省略し、後者のEAにフィルターを組み込む方法について述べる。 

 前提として、売買シグナルは int EntrySignal( )によって買いシグナルには『1』、売りシグナルには『-1』、その他には『0』が準備されているとする。そして、時間帯制限となる関数FilterSignal( )を別途用意する。

//フィルターシグナル

input int StartHour = 12; //開始時刻(時)、サーバータイム

input int EndHour = 20; //終了時刻(時)サーバータイム

//フィルター関数

int FilterSignal(int signal)

{

  int ret = 0;

  if(StartHour < EndHour)

   {

     if(Hour() >= StartHour && Hour() <= EndHour) ret = signal;

   }

  else

    {

      if(Hour() >= StartHour || Hour() <= EndHour) ret = signal;

    }

    return ret;

}

スタート関数本体(void OnTick()またはint start()の記載は、

//エントリーシグナルの生成

int sig_entry = EntrySiganal(MAGIC );

//エントリーのフィルター

sig_entry = FilterSignal(sig_entry);

//買い注文

if (sig_entry > 0) OrderSend(OP_BUY );//引数省略

//売り注文

if (sig_entry < 0) OrderSend(OP_SELL): //引数省略

//--------------

以上、基本部分のみ

(注)

フィルター関数は、サーバータイムの時間単位での制限になります。これを、日本時間や分・秒単位で制限するにはdatetime型変数を採用する必要があり複雑となるため、ここでは割愛します。