最近、「GMT OANDA」「MT4 サマータイム」などのキーワード検索履歴が多いです。理由は、人気のあるEA「BandCross3 EURUSD」「Forex White Bear V3」が時間処理を採用している関係でGMTのパラメーターに設定する値を知りたい!という人が多いのかなと思っています。MT4は、FX会社毎に採用しているMT4のタイムゾーンが異なります。ですので、日足が5本の会社もあれば、日足が6本の会社もあります。詳しく知りたい方人は「MT4 日本時間(GMT+9)の残念なチャート」をご覧ください。運用するMT4に合わせて、GMTを調べたり、米国・欧州サマータイムの日付を調べたり面倒ですよね?じつは、このGMTのパラメーターに設定する値は、簡単な計算で自動判定することが可能なんです。GMTオフセット値を自動判定するサンプル関数を作ってみましたのでご覧ください。説明は後述します。//+------------------------------------------------------------------+//| GetGMTOffset.mq4 |//| Copyright 2014, BLT. |//| http://mt4ordersenderror.blog.fc2.com/ |//+------------------------------------------------------------------+#property copyright "Copyright 2014, BLT."#property link "http://mt4ordersenderror.blog.fc2.com/"#property version "1.00"#property strict//--- input parametersinput int TestGMTOffset = 3;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() {//--- //--- return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+void OnDeinit(const int reason) {//--- }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() {//--- Alert( GetGMTOffset() ); }//+------------------------------------------------------------------+//| GetGMTOffset function |//+------------------------------------------------------------------+int GetGMTOffset() { // バックテストの場合はパラメーター指定の固定値を返却 if ( IsTesting() ) { return( TestGMTOffset ); } // 日付処理で使用 MqlDateTime current; MqlDateTime gmt; // 補正処理で使用 int offset = 0; // MT4時刻を取得する TimeCurrent( current ); // GMT時刻を取得する TimeGMT( gmt ); // 日付が異なる場合の補正処理 if( ( current.day - gmt.day ) > 0 ) { offset = 24; } if( ( current.day - gmt.day ) < 0 ) { offset = -24; } // GMTOffset値を返却 return ( current.hour - gmt.hour + offset ); }//+------------------------------------------------------------------+Build 600 で TimeGMT の関数が追加され、GMT時刻が簡単に取得できるようになりました。ですので、MT4の時刻とGMTの時刻を取得・比較して、GMTオフセット値を算出しています。サマータイム時も、MT4側の時刻が自動で変わるため、パラメーターの再設定は不要です。ただしバックテストをする際は、TimeGMT の挙動が運用時と異なるため固定でパラメーター指定するなど、バックテスト用の対策が必要になりますのでご注意を。^^
MT4 EA開発ブログ
...