「FXは24時間取引できる」ってよく言われるじゃないですか。私もずっとそう思ってたんですけど、MT5の公式リファレンスを読み込んでみたら、どうもそんな単純な話じゃないんですよね。
というのも、MT5は銘柄ごとに「取引できる時間」と「値が付く時間」を、別々のデータとして持っているんですよ。しかも曜日ごとに。この2つがズレている銘柄だと、「チャートは動いてるのに注文が弾かれる」とか、逆に「注文は受け付けるのに約定しない」みたいな、一見わけのわからない挙動が起きます。
今回はMQL5公式リファレンスを一次ソースに、この仕組みを整理してみます。読んでみると、わりと身も蓋もないことが書いてあるんですよ。正直、知らないと週明けと週末に地味に損をする話なので、ざっと目を通しておいて損はないと思うんですよね。
MT5には「取引セッション」と「気配セッション」の2つがある
まず前提から。MT5には、セッション時刻を取り出す関数が2つ別々に用意されています。
| 関数 | 公式リファレンスの定義 | 平たく言うと |
|---|---|---|
SymbolInfoSessionTrade |
指定した銘柄・曜日の取引セッションの開始・終了時刻を取得する | 注文を受け付けてくれる時間 |
SymbolInfoSessionQuote |
指定した銘柄・曜日の気配(クオート)セッションの開始・終了時刻を取得する | 値段が配信される時間 |
ポイントは、これが1つの関数の引数違いではなく、完全に別の関数だということなんですよね。つまりMT5の設計思想として、最初から「値が動く時間」と「売買できる時間」は一致しない前提になっているわけです。
しかもどちらの関数も、引数に銘柄名と曜日を取ります。ということは、取引時間は銘柄ごとに違うし、同じ銘柄でも曜日ごとに違う可能性がある、ということなんですよ。
POINT
さらに両関数ともsession_indexという引数を持っていて、公式リファレンスには「セッションのインデックスは0から始まる」と明記されています。つまり1日の中にセッションが複数あることが想定されているんですよね。株価指数やコモディティのCFDで「お昼に一瞬値が止まる」のは、これが理由だったりします。
公式サンプルの出力が、もう24時間じゃなかった
ここが個人的に一番「おっ」となったところなんですけど、MQL5公式リファレンスのSymbolInfoSessionTradeのページには、サンプルコードの実行結果がそのまま載っているんですよ。それがこれです。
| 銘柄 | 曜日 | 取引セッション0 |
|---|---|---|
| GBPUSD | 月〜金 | 00:15 − 23:55 |
見てのとおり、00:00−24:00じゃないんですよね。 頭に15分、お尻に5分、合計で1日20分の「取引できない時間」がある。ドル円でもユーロドルでもなく、ど真ん中のメジャー通貨ペアであるポンドドルでこれなんですよ。
ちなみに同じリファレンスのSymbolInfoSessionQuote側のサンプルでは、ある銘柄の気配セッションが「06:45 − 00:00」になっていました。こっちは1日405分、つまり6時間45分も値が付かない時間がある計算になります。取引セッションと気配セッションで、まったく違う時間が返ってくるわけです。
注意
この「00:15−23:55」はあくまでMetaQuotes社が公式リファレンスに載せているサンプルの出力値であって、特定の業者の設定値ではありません。実際の値は業者・サーバー・銘柄ごとに違います。自分の口座の正確な時間は、必ず使っているMT5で確認してください。
返ってくるのは「サーバー時間」。日本時間に直すとこうなる
で、ここからが実用上の落とし穴なんですけど。この2つの関数が返す時刻について、公式リファレンスはこう書いています。
セッションの開始/終了時刻は00時00分からの秒数で返される。返り値の日付部分は無視すること。
つまり返ってくるのは「何時何分」という時刻だけで、タイムゾーンの情報は一切入っていないんですよ。これはMT5サーバーのローカル時間です。日本時間ではありません。
じゃあMT5サーバーの時間って何時なのかというと、複数の情報源で確認した限りでは、多くの海外FX業者のMT5サーバーはニューヨーククローズ基準に合わせてあり、冬時間はGMT+2、夏時間はGMT+3で運用されています。日本時間との差でいうと、冬が7時間、夏が6時間ですね。ただしこれは業者によって違うので、最新の設定は必ず自分の口座のサーバー時間で確認してください。
この前提で、さっきの「00:15 − 23:55」を日本時間に直してみたんですけど、これが思ったより厄介なんですよね。計算は自分でやっています。
| サーバー設定 | 取引開始(JST) | 取引終了(JST) | 毎日の「穴」(JST) |
|---|---|---|---|
| GMT+2(冬時間) | 当日 07:15 | 翌日 06:55 | 06:55 〜 07:15 |
| GMT+3(夏時間) | 当日 06:15 | 翌日 05:55 | 05:55 〜 06:15 |
そして週の端っこはこうなります。
| サーバー設定 | 週明けの取引開始 | 週末の取引終了 |
|---|---|---|
| GMT+2(冬時間) | 月曜 07:15 JST | 土曜 06:55 JST |
| GMT+3(夏時間) | 月曜 06:15 JST | 土曜 05:55 JST |
「週明け月曜の早朝に成行注文を出したら弾かれた」っていう話、たまに見かけるじゃないですか。少なくともこのサンプルの設定だと、冬時間なら月曜の朝7時15分まで取引セッションが開いていないんですよね。7時ちょうどに注文を出したら、そりゃ通らないわけです。チャートが動いて見えても関係なくて、取引セッションが開いてないとダメなんですよ。
しかも、この窓は夏時間と冬時間で1時間まるごとズレます。 ついでに言うと米国の夏時間は2026年11月1日(日)に終わったばかりで(IANAのタイムゾーンデータベースで確認しました)、ニューヨーククローズ基準のサーバーなら、今はちょうど冬時間側=日本時間と7時間差の期間に入ったところなんですよね。先週まで覚えていた時刻が、今週からは1時間ズレている可能性があります。
注文が通らないとき、原因は3つに切り分けられる
ここまで読んで「で、自分のケースはどれなの?」と思いますよね。実はMT5は、注文が弾かれた理由を別々のリターンコードで返してくれます。公式リファレンスから、時間がらみの3つを抜き出すとこうです。
| コード | 識別子 | 公式の説明 | 疑うべきもの |
|---|---|---|---|
| 10018 | TRADE_RETCODE_MARKET_CLOSED |
マーケットが閉じている | 取引セッションの外 |
| 10021 | TRADE_RETCODE_PRICE_OFF |
リクエストを処理する気配値がない | 気配セッションの外 |
| 10017 | TRADE_RETCODE_TRADE_DISABLED |
取引が無効になっている | 時間ではなく設定側 |
この10018と10021が別のコードとして用意されているという事実自体が、さっきの「取引セッションと気配セッションは別物」という話の裏取りになってるんですよね。同じ「注文が通らない」でも、中で起きていることは違うわけです。
で、3つ目の10017は時間と関係ありません。MT5にはSYMBOL_TRADE_MODEという銘柄ごとの設定があって、公式リファレンスによると取れる値は5種類です。
| 値 | 公式の説明 |
|---|---|
SYMBOL_TRADE_MODE_FULL |
取引制限なし |
SYMBOL_TRADE_MODE_CLOSEONLY |
決済(ポジションを閉じる)のみ可能 |
SYMBOL_TRADE_MODE_LONGONLY |
買いポジションのみ可能 |
SYMBOL_TRADE_MODE_SHORTONLY |
売りポジションのみ可能 |
SYMBOL_TRADE_MODE_DISABLED |
その銘柄の取引は無効 |
「決済だけできて新規が建てられない」という状態が、MT5の仕様としてちゃんと存在するんですよ。これ、知らないと「バグかな?」と思っちゃうんですけど、CLOSEONLYが設定されているだけ、というケースがあるわけです。
あとはSYMBOL_START_TIME(取引開始日)とSYMBOL_EXPIRATION_TIME(取引終了日)という設定もあって、これは公式の説明に「主に先物で使われる」とあります。期限のある銘柄だと、日付レベルで取引できる期間が決まっているんですよ。FXのスポット銘柄ではあまり出番がないんですけど、CFDを触るなら頭の片隅に置いておきたいところです。
自分の口座の時間を確認する方法
一番確実なのは、MT5上で実際に値を取ってみることなんですけど、プログラムを書かなくても最低限ここは見ておきたい、というのを挙げておきます。
- 気配値ウィンドウの時計: MT5の気配値表示に出ている時刻がサーバー時間です。パソコンの時計と見比べれば、何時間差なのかはその場で分かります
- 銘柄の「仕様」画面: 気配値で銘柄を右クリックして仕様を開くと、その銘柄の取引条件が一覧で出ます。取引時間の項目もここです
- ジャーナル(操作履歴)タブ: 注文が弾かれたときのリターンコードが残ります。さっきの10018なのか10021なのかが分かれば、原因の切り分けが一気に進むんですよね
私も一度、週末ぎりぎりにポジションを畳もうとして「あれ、反応しない」となったことがあって。あのときはただ慌てて何度もクリックしてたんですけど、今思えばジャーナルを見れば一発だったんですよね。覚えておくと無駄に焦らずに済むと思います。
注意
本記事の時刻はすべて、MQL5公式リファレンスのサンプル出力値をもとにした計算例です。実際の取引時間は業者・口座タイプ・銘柄によって異なりますし、祝日や年末年始には臨時のスケジュールが組まれます。週をまたぐポジションを持つ場合は、事前に利用中の業者の公式アナウンスを確認してください。
スキャルピング派ほど、この20分は効いてくる
最後に実務寄りの話を。この「1日20分の穴」って、デイトレ以上の時間軸だとほぼ気にならないんですよ。でも秒〜分単位で回すスキャルピングだと話が変わってきます。
というのも、セッションが閉じる直前って、閉じることが分かっている参加者が減っていくので、板が薄くなりやすいんですよね。そこへ指標やニュースが重なると、約定の条件が普段と変わることがあります。ロールオーバー前後の時間帯を避けるというのは、昔から言われている話ではあるんですけど、MT5の仕様から見てもちゃんと理由があるわけです。
逆に言うと、取引時間や約定方式を気にするタイプのトレーダーほど、口座を選ぶ段階で各社の条件を比べておく意味があると思うんですよね。Exnessはスキャルピングや高レバレッジ層向けの条件を打ち出している業者のひとつなので、このあたりが気になる人は一度条件を見てみるといいかもしれません。
FX取引はレバレッジを用いた取引であり、預けた資金(元本)を上回る損失が生じる可能性があります。本記事は情報提供を目的としたものであり、投資を勧誘するものではありません。取引を行う際は自己責任・余裕資金の範囲で行い、各社公式サイトで最新のリスク説明書・規約を必ずご確認ください。
まとめ
長くなったので、要点だけ並べておきますね。
- MT5は「取引できる時間」と「値が付く時間」を別々の関数で管理していて、両者は一致しない前提になっている
- どちらも銘柄ごと・曜日ごとに定義され、1日に複数のセッションを持てる
- 公式サンプルのGBPUSDは00:15−23:55で、24時間フルではない
- 返ってくるのはサーバー時間。日本時間との差は夏冬で1時間動く
- 弾かれた理由は10018(市場が閉じている)/10021(気配値がない)/10017(取引無効)で切り分けられる
初心者の人は、まず「気配値の時計=サーバー時間で、日本時間とは数時間ズレている」ことだけ押さえておけば十分だと思います。週明けの朝イチや週末の明け方に注文が通らなくても、故障じゃないんですよね。
中上級者やEAを回している人は、時間を決め打ちでハードコードせず、SymbolInfoSessionTradeとSymbolInfoSessionQuoteから実際の値を取るようにしておくと、夏冬の切り替えで事故らなくて済むはずです。今回みたいにサーバー側の設定が静かに変わることもあるので、取りに行くほうが安全なんですよね。
この手の「仕様を読めば分かるのに、誰も言語化していない話」は他にもまだありそうなので、見つけたらまた書きます。
