MQL4MQL5 EA(エキスパートアドバイザー) 時間・取引条件
日本時間で時刻を判定したい
結論:TimeGMT() に 9 時間を足すと日本時間になります。ただしバックテストでは使えないため、サーバー時刻との時差を入力して使う方法もあります。
考え方
MT4・MT5 の時刻(TimeCurrent)はブローカーのサーバー時刻で、日本時間とは 6〜7 時間ほどずれていることが多くあります。TimeGMT()(世界標準時)に 9 時間を足せば日本時間になりますが、ストラテジーテスターでは TimeGMT() が正しく計算されません。バックテストでも同じ結果にしたいときは、サーバー時刻との時差をパラメーターで入力します。
- 実運用だけなら:日本時間 = TimeGMT() + 9 × 3600
- バックテストでも使うなら:日本時間 = TimeCurrent() + 時差(時間)× 3600
- 求めた日本時間を TimeToStruct() で分解して、時・曜日で判定する
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4・MQL5 共通
#property strict
// 日本時間で時刻を判定する EA のひな形
input bool InpUseGMT = true; // true=TimeGMT() から計算(実運用向け)
input int InpOffsetH = 6; // false のとき:日本時間 − サーバー時刻(時間)
datetime JstNow()
{
if(InpUseGMT && !MQLInfoInteger(MQL_TESTER))
return TimeGMT() + 9 * 3600;
return TimeCurrent() + InpOffsetH * 3600; // バックテストではこちら
}
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
Comment("");
}
void OnTick()
{
MqlDateTime j;
TimeToStruct(JstNow(), j);
bool tokyo = (j.hour >= 9 && j.hour < 15); // 例:日本時間 9時〜15時
Comment("日本時間 ", TimeToString(JstNow(), TIME_DATE | TIME_MINUTES), tokyo ? "(東京時間)" : "");
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 時差(InpOffsetH)は、日本時間の時計とチャートの最新の足の時刻を比べて確認します。夏時間のあるブローカーでは、夏と冬で 1 時間変わります。
注意点
- TimeGMT() はパソコンの時計とタイムゾーン設定から計算されます。VPS の時計がずれていると正しくなりません。












