MT4のGMTオフセット値を自動判定するサンプルmq4

MT4のGMTオフセット値を自動判定するサンプルmq4

最近、「GMT OANDA」「MT4 サマータイム」などのキーワード検索履歴が多いです。

理由は、人気のあるEA「BandCross3 EURUSD」「Forex White Bear V3」が時間処理を採用している関係で
GMTのパラメーターに設定する値を知りたい!という人が多いのかなと思っています。

BandCross3 EURUSD

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 parameters
input 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 の挙動が運用時と異なるため
固定でパラメーター指定するなど、バックテスト用の対策が必要になりますのでご注意を。^^
written by BLT
■ 投資商品等に関する重要事項およびリスクについて 【金融商品取引業者】
株式会社ゴゴジャン 関東財務局長(金商)第1960号
【加入協会】
一般社団法人 日本投資顧問業協会
【手数料・費用等について】
当社プラットフォームで提供するソフトウェア、電子書籍、投資助言サービス等のご利用には、商品ごとに定められた購入代金が発生します。 また、お客様が実際の金融商品取引(FXやCFD取引等)を行う際には、接続先の証券会社等において、取引手数料やスプレッド(売値と買値の差)等の費用が発生する場合があります。
【証拠金および損失リスクについて】
FX(外国為替証拠金取引)やCFD(差金決済取引)等の取引は、預託した証拠金の額を上回る取引が可能であるため、対象とする指標(通貨・商品価格等)の急激な変動により、預託証拠金を上回る損失(元本超過損)が生じるおそれがあります。 また、金融商品取引には価格変動等のリスクがあり、投資元本を割り込む、あるいは元本を超える損失が生じる場合があります。
【サービスの性質および取引主体について】
当社は投資用ソフトウェアおよび投資情報の提供を行うプラットフォーム(マーケットプレイス)であり、お客様に代わって金融商品の売買、媒介、取次、または代理を行うものではありません。 当社が提供するサービスや情報は投資判断の参考として提供するものであり、将来の利益や特定の成果を保証するものではありません。 一部に投資助言サービスを含みますが、特定の金融商品の売買を強制、または勧誘するものではありません。 最終的な投資判断および取引の実行は、お客様ご自身の責任において行っていただきますようお願いいたします。