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号
加入協会 一般社団法人 日本投資顧問業協会
商号 株式会社ゴゴジャン
金融商品取引業の登録番号
関東財務局長(金商)第1960号
加入協会 一般社団法人
日本投資顧問業協会
金融庁日本投資顧問業協会証券・金融商品あっせん相談センター証券取引等監視委員会

Copyright © 2024 GogoJungle Inc. All Rights Reserved.