研究・検証 / GOLD DAWN BREAK のしくみ

LEARN / GOLD DAWN BREAK / 3

業者の時計で「前の日」がずれる

このEAの「前の日」は、業者のパソコンの時計(サーバー時刻)で区切ります。この時計は業者ごとに違うので、同じEAでも、業者によって注文の値段と時刻が変わります。

このしくみの面白いところ

EAを何も変えなくても、業者を変えるだけで、注文を置く値段と時刻が変わります。前の日の高値・安値は、「どこからどこまでを1日とするか」で変わるからです。

実際に、同じEAを同じ2023〜24年で試すと、業者によって結果が分かれました。逆に言えば、自分の業者で試し直せば、その業者での動き方を自分の目で確かめられます。時刻のそろえ方を変える改造の余地がある、ということでもあります。

業者ごとの時計

業者業者の時計午前2時は日本時間で「前の日」の区切り(世界標準時)
Exness世界標準時と同じ(夏時間なし)11時0時〜24時
XM冬は2時間・夏は3時間進んでいる冬 9時・夏 8時冬 前日22時〜・夏 前日21時〜
XS記録なし(不明)不明不明

出所:当方で持っている各業者の1分足データに記録した、業者の時計と世界標準時(UTC)との差。XS は記録していないため不明としています。

Exness と XM で「前の日」の区切りと注文を置く時刻が、世界標準時で2〜3時間ずれることを示す図 Exness 前の日 = 0時〜24時 注文 XM 冬 前の日 = 前日22時〜22時 注文 XM 夏 前の日 = 前日21時〜21時 注文 XS:業者の時計の記録なし(不明) 0時 12時 24時 (世界標準時)
横軸は世界標準時(UTC)です。帯がその業者の「前の日」、赤い点が翌日の午前2時(業者の時計)に注文を置く時刻です。XM の「前の日」は Exness より2〜3時間早く始まって早く終わり、注文も2〜3時間早く置かれます。

月曜の「前の日」も、業者で変わります。当方の Exness の1分足には、日曜(世界標準時)の夜に約2時間分の足がありました(2023〜25年、日曜1日あたり真ん中の値で115本)。そのため Exness では、月曜の「前の日」が、日曜の短い時間の足になると考えられます。XM の1分足には日曜の足がなく、月曜の「前の日」は金曜です。EAを動かして記録を見る形での確認は、まだしていません。

同じ期間で、業者によって結果が分かれた

金(XAUUSD)の5分足で、業者の実際の値動きの記録を使って試しました(バックテスト)。0.01ロット・資金100万円・レバレッジ500倍。Exness の行は2022年を含みます。データがそろっている期間が業者ごとに違うため、期間はそろっていません。

EAも設定も同じです。違うのは業者だけです。業者が違うと、値段そのもの、スプレッド(売値と買値の差)、値段が更新される細かさ、そして時計が変わります。

時計の違いが原因なのか

時計の違いが、理由のひとつかもしれません。ただし、まだ確かめていません。上に書いたように、業者の違いは時計だけではありません。どれがどれだけ効いているのかは、まだ分けて調べていません。この結果だけで、「XM では使えない」「Exness なら大丈夫」とは言えません。

自分の業者で試し直す

  1. 業者の時計が、世界標準時から何時間ずれているかを確かめます。MT5 で TimeTradeServer() と TimeGMT() の差を出すとわかります。夏時間で変わる業者は、夏と冬の両方で確かめます。
  2. ストラテジーテスター(MT5 に付いている、過去の値動きで試す機能)で動かします。銘柄は業者の金(XAUUSD・GOLD など)、時間足は5分足、モデルは「リアルティックに基づいたすべてのティック」(実際の値動きの記録をそのまま使う設定)を選びます。
  3. 注文の遅れは「遅延なし」と「ランダム遅延」の両方で試します。ランダム遅延は、試すたびに結果が少し変わります。数回試して、結果の幅で見ます。
  4. 期間は 2025.01.01〜2026.09.01 と 2023.01.01〜2025.01.01 です。ロットは0.01(最初の設定のまま)、資金 1,000,000 JPY、レバレッジ 1:500。
  5. 結果の「ヒストリー品質」が100%かを確かめます。実際の値動きの記録がない期間は、テスターが値動きを作って埋めます。100%なら、記録がそろっています。
プログラムの一部 3 業者の時計を読み、1日1回だけ注文を置く(OnTick より。省略したところは // ...)
   MqlDateTime dt;
   TimeToStruct(TimeCurrent(), dt);

   datetime today = TimeCurrent() - (dt.hour * 3600 + dt.min * 60 + dt.sec);
   if(dt.hour == InpSetupHour && dt.min == InpSetupMinute && g_lastSetupDay != today)
   {
      CancelOwnPendingOrders();
      if(!(InpSkipFriday && dt.day_of_week == 5))
         DailySetup();
      g_lastSetupDay = today;
   }
   // ...

最初の2行で、業者の時計を読んでいます(TimeCurrent() は、最後に届いた値段の、業者の時計での時刻です)。日本時間や世界標準時に直す処理はありません。

today の行で、その日の0時(業者の時計)を出しています。今日まだ注文を置いていなければ、1日1回だけ次へ進みます。

次へ進むと、まず CancelOwnPendingOrders() で、このEAが出した古い予約注文を消します。金曜(day_of_week == 5)でなければ、DailySetup() で新しく2本置きます(1ページ目のプログラムの一部 1)。

業者の時計の差をそろえて比べたいなら、ここで使う時刻を世界標準時に直す改造が考えられます。その改造は、このEAには入っていません。

経過の公開

このEAは、公開フォワード(EAを動かし続けて、その経過を公開する検証)で検証中です。フォワード実績の「検証中」の区画で経過を見られます。

ここに載せている数字はすべて、過去の値動きで試した結果(バックテスト)で、運用実績ではありません。将来の結果を示すものではありません。投資判断はご自身で行ってください。気をつけてほしい点は、目次ページの「知っておいてほしいこと」にまとめています。

動かすだけなら、マイページで GOLD DAWN BREAK を受け取ってください。

全部読みたい・直したい・別の通貨で試したい場合は、ソースコード単品か、EA開発システム+全EAソースコードです。