MT4時間と日本時間を相互変換してみよう

MT4時間と日本時間
yuki
yuki
MT4の表示時間って日本時間じゃないし、ブローカーによってサーバー時間も違うから時間の変換が大変なんですよね
カオチャイ
カオチャイ
そこで、今回はMQLAuthの便利機能「時間の相互変換機能」を使って、サクッと時間を変換する方法をご紹介します!
yuki
yuki
この機能を使えばバックテストでもサマータイムを考慮した時間を正確に変換することができますよ!
カオチャイ
カオチャイ
こちらの機能は無料でご利用できますが、MQLAuth.mqhのバージョン1.05以降が必要ですので、まだご利用の準備ができていない方は下記の記事を参考にしてくださいね
MQLAuth準備編
MQLAuthシステムを利用するための事前準備 MQLAuthを使うための準備 MQLAuthシステムを使う前提条件として「インジケーターをMT4の口座番号やパスワードで縛って管...

時間の変換

今回ご紹介する機能ですが、例えば開発者様が仲値トレードEAや自動売買システムをいざ作ってみますと、厳密に日本時間を算定する必要がありますが、なにも考えずに日本時間を算定するコードを書きますと実に100行以上くらいのボリュームになってしまいます。

しかしMQLAuthでこのテクニックを使うとたったの1行で日本時間をMT4のサーバー時間に変更したり、サーバー時間を日本時間に変換してさらにはサマータイムにも対応できる非常に便利な機能でございます。

カオチャイ
カオチャイ
このライブラリがあれば日本時間を利用するEAなどがとても簡単につくれるようになりますよ!

 

ソースコードを書いていきましょう

#include <MQLAuth.mqh>

#property copyright "©2020  MT4ツール製作【シストレファクトリー】"
#property link      "https://interactivebrokers.work/"
#property version   "1.00"
#property strict

まずはソースコードの先頭でMQLAuth.mqhを呼び出します。

MT4はブローカーによってGMTオフセットとサマータイム基準国が違うので、パラメータで変更できるようにしておきましょう。

 

#include <MQLAuth.mqh>

#property copyright "©2020  MT4ツール製作【シストレファクトリー】"
#property link      "https://interactivebrokers.work/"
#property version   "1.00"
#property strict

input MQLAUTHENUM_GMTOFFSET _gmtoffset = 2; //GMTオフセット
input MQLAUTHENUM_SUMMERTIMECOUNTRY _summertimecountry = STC_US; //サマータイム基準国

MQLAuthでは「MQLAUTHENUM_GMTOFFSET」と「MQLAUTHENUM_SUMMERTIMECOUNTRY」という列挙型を用意しています。それぞれの仕様はMQLAuth公式のリファレンスを参考にしてください。

 

int OnInit() {
   Comment("ローカル時間(日本時間): " + (string)TimeLocal()
           + "\n日本時間 -> サーバー時間: " + (string)Auth_JapanTimeToServerTime(TimeLocal(), _gmtoffset, _summertimecountry)
           + "\nサーバー時間 -> 日本時間: " + (string)Auth_ServerTimeToJapanTime(TimeCurrent(), _gmtoffset, _summertimecountry)
          );

   return(INIT_SUCCEEDED);
}

Commentで、変換した時間を表示するようにしてみましょう。

日本時間をサーバー時間に変換する場合はAuth_JapanTimeToServerTime()を、サーバー時間を日本時間に変換する場合はAuth_ServerTimeToJapanTime()を使用します。

引数はいずれも順に、変換前の時間(datetime型)、GMTオフセット、サマータイム基準国です。細かい仕様はMQLAuth公式のリファレンスを参考にしてください。

 

 


この様に、時間が変換されて表示されます。この画像は週末に作ったので、TimeCurrent()で取得できるサーバー時間が土曜日の午前6時55分直前で止まっています。

 

今回作成したコード

//+------------------------------------------------------------------+
//|                                      ©2020  MT4ツール製作【シストレファクトリー】 |
//|                                 https://interactivebrokers.work/ |
//+------------------------------------------------------------------+
#include <MQLAuth.mqh>
#property copyright "©2020  MT4ツール製作【シストレファクトリー】"
#property link      "https://interactivebrokers.work/"
#property version   "1.00"
#property strict
#property indicator_chart_window

#resource "\\Include\\Images\\SYSFAClogo50.bmp"

input MQLAUTHENUM_GMTOFFSET _gmtoffset = 2;
input MQLAUTHENUM_SUMMERTIMECOUNTRY _summertimecountry = STC_US;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit() {
   Comment("ローカル時間(日本時間): " + (string)TimeLocal()
           + "\n日本時間 -> サーバー時間: " + (string)Auth_JapanTimeToServerTime(TimeLocal(), _gmtoffset, _summertimecountry)
           + "\nサーバー時間 -> 日本時間: " + (string)Auth_ServerTimeToJapanTime(TimeCurrent(), _gmtoffset, _summertimecountry)
          );

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]) {
   return(rates_total);
}
//+------------------------------------------------------------------+

 

インジケーターのカスタマイズ色々
MQLコードでEAをカスタマイズ
【MQLコード解説】EA・インジケーターのカスタマイズ【体験版・LINE通知】EAやインジケーターに口座番号認証を実装する方法を紹介しています。 認証システムにはMQLAuthを利用して解説していきます。...

 

ダウンロードでそのまま使えるコード集
MQL実装例
【コピペでOK】RSIのEAに口座認証や一括メッセージ機能を実装してみました https://interactivebrokers.work/start_mqlauth/ 個人でEAを販売する際につけてお...
MQL実装例
【コピペでOK】MT4のチャートから飛ばすURLをソースコードを編集せずに、MQLAuthの管理画面から変えられるようにする https://interactivebrokers.work/start_mqlauth/ メッセージのURL変更を簡単に ...
MQL実装例
【コピペでOK】バイナリーオプションサインツールに体験版機能を機能を実装してみました https://interactivebrokers.work/start_mqlauth/ 体験版機能付きのBO用サインツー...

 

EA・インジケーター制作のご依頼はこちら
インジケーターのバックテスト&リペイントチェック代行サービスMT4やMT5に関するツールを作成する際の流れを説明しています。 シストレファクトリーでは一からEAの制作以外にもツールの修正や、統計的なアプローチができるソフトなどお客様の欲しいツールを形にいたします。...
EA&インジケーター制作代行
【MT4&MT5】EA&インジケーター制作代行承ります EA&インジケーター制作代行とは? EA&インジケーター制作代行では、皆さんが日頃使っている手法をMT4(MT5)でエントリーサイ...

 

インジケーターをより使いやすく
MQLコードでEAをカスタマイズ
【MQLコード解説】EA・インジケーターのカスタマイズ【体験版・LINE通知】EAやインジケーターに口座番号認証を実装する方法を紹介しています。 認証システムにはMQLAuthを利用して解説していきます。...