MT4を日本時間に変更し、市場ごとに色分けする無料インジケーター
シストレファクトリー
シストレファクトリー

今回ご紹介する機能ですが、例えば開発者様が仲値トレードEAや自動売買システムをいざ作ってみますと、厳密に日本時間を算定する必要がありますが、なにも考えずに日本時間を算定するコードを書きますと実に100行以上くらいのボリュームになってしまいます。
しかしMQLAuthでこのテクニックを使うとたったの1行で日本時間をMT4のサーバー時間に変更したり、サーバー時間を日本時間に変換してさらにはサマータイムにも対応できる非常に便利な機能でございます。
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/wp/"
#property version "1.00"
#property strict
まずはソースコードの先頭でMQLAuth.mqhを呼び出します。
MT4はブローカーによってGMTオフセットとサマータイム基準国が違うので、パラメータで変更できるようにしておきましょう。
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/wp/"
#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/wp/ |
//+------------------------------------------------------------------+
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/wp/"
#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);
}
//+------------------------------------------------------------------+

