スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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 の挙動が運用時と異なるため
固定でパラメーター指定するなど、バックテスト用の対策が必要になりますのでご注意を。^^

MT4 EA開発・運用ブログ:関連記事ピックアップ

EAつくーる
自動売買システム作成ソフト「EAつくーる
MT4 EA開発ブログの人気記事「RSI」「ボリンジャーバンド
を使用したEAが、数値入力とクリックで簡単に作成できます。
mq4プログラムが出力されるため、MQL4言語を効率よく
習得したいEA開発初心者にもオススメのEA開発ツールです。
お試しで利用したい方は「EAつくーる【1ヶ月版】」をどうぞ。

MT4 EA開発・運用ブログ:カテゴリー

MT4 EA開発・運用ブログ:人気記事ランキング(直近1ヶ月)

MT4 EA開発・運用ブログ:最新記事一覧

もっと見る...
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。