失敗ログ
MQL5で「金曜日の週末強制クローズ処理」を実装する際に陥る、サーバータイムゾーンの罠
公開 2026.06.17 最終確認 2026.06.17 Failure
週末の窓開け(月曜日の価格ワープ)による大損を防ぐため、EAに「金曜日の深夜に全ポジションを強制決済する(金曜クローズ)」ロジックを実装するのは非常に有効なリスク管理です。 しかし、これをMQL5でプログラミングする際、「自分のパソコンの時間(ローカルタイム)」や「日本時間(JST)」を基準にしてコードを書いてしまうと、夏時間(DST)と冬時間の切り替え時や
失敗ログは反省文ではなく、過剰最適化や運用停止の条件を先に見つけるための材料です。
EA testing
MQL5で「金曜日の週末強制クローズ処理」を実装する際に陥る、サーバータイムゾーンの罠
結論
週末の窓開け(月曜日の価格ワープ)による大損を防ぐため、EAに「金曜日の深夜に全ポジションを強制決済する(金曜クローズ)」ロジックを実装するのは非常に有効なリスク管理です。 しかし、これをMQL5でプログラミングする際、「自分のパソコンの時間(ローカルタイム)」や「日本時間(JST)」を基準にしてコードを書いてしまうと、夏時間(DST)と冬時間の切り替え時や、ブローカーのサーバー時間の違いによって時間がズレてしまい、決済されるべき時間に機能しなくなるという致命的なバグ(罠)が発生します。必ず「MT5のサーバー時間」を基準にした相対的なコードを書く必要があります。
なぜEA運用で重要か
週末に重大なニュース(戦争の勃発、突発的な選挙結果など)が発生すると、月曜日の朝に為替市場が開いた瞬間、金曜日の終値から100pips以上離れた場所で価格がスタートする「窓開け」が起こります。 この窓開けは「設定していたストップロス(SL)を完全に飛び越えて最悪の価格で約定する」ため、口座を一瞬でゼロカットさせる破壊力を持っています。このリスクを完全に排除するための「週末強制クローズ機能」は、EAをリスクを抑えたに長期運用するための推奨の防御壁です。
仕組み・条件
タイムゾーンの罠を回避する、MQL5の正しい金曜クローズの基本実装:
- 時間の取得は、PCの時間(
TimeLocal())ではなく、必ずブローカーのサーバー時間であるTimeCurrent()を使用します。 - ほとんどの海外FX業者は「GMT+2(夏時間はGMT+3)」を採用しており、金曜日の取引終了時刻は「サーバー時間の23時59分(日々のロールオーバー時刻)」です。
// サーバー時間の「曜日」と「時間」を取得する構造体
MqlDateTime current_time;
TimeToStruct(TimeCurrent(), current_time);
// 金曜日(DayOfWeek==5) の サーバー時間23時00分 以降になったら
if(current_time.day_of_week == 5 && current_time.hour >= 23)
{
// ここで全ポジションを強制決済する関数(CloseAll)を呼び出す
// 同時に、新規エントリーを禁止するフラグを立てる
}
バックテストやリアル運用で壊れるポイント
- 取引時間外エラー(Market is closed): 金曜日の「23時59分59秒」ギリギリに決済ロジックを作動させようとすると、スリッページや通信遅延により決済注文の到達が「土曜日の0時00分01秒」になってしまうことがあります。この瞬間、市場は既に閉まっているためブローカーから
Market is closedというエラーが返され、結局ポジションを週末に持ち越すハメになります。リスクを抑えたマージンを取って「サーバー時間の23時00分〜23時30分頃」にクローズ処理を走らせるのが実戦的です。
どう確認するか
週末クローズ機能付きのEAをバックテストする際は、ビジュアルモードで動かし、チャート下部の「日時」が金曜日の設定時刻になった瞬間に、持っているポジションが強制的に(SLやTPに関係なく)決済されているかを確認します。 さらに、数年間分のバックテストを回し、春(3月)と秋(11月)のサマータイム切り替えの時期においても、意図したタイミングで決済が行われているか、ジャーナルログのエラーをチェックしてください。
自分の検証スタンス
私は自作EAにおいて、金曜クローズの時間を「入力パラメータ」としてユーザーが自由に設定できるように設計しています。
また、ブローカーによってサーバー時間がGMT+2ではない(例えば日本時間GMT+9の国内業者など)場合でも動くように、MT5の SymbolInfoSessionTrade() 関数を用いて「そのシンボルの実際の取引終了時刻」を動的に取得し、その「終了〇分前」に決済を走らせるという、より汎用的で堅牢なコードを好んで使用します。
関連して読む
- IC Markets Raw Spreadの手数料をMT5テスターに入れる方法
- MT5バックテストで手数料を入れ忘れるとPFが盛れる理由
- 最大連敗数からロットを決める考え方
- ExnessのRaw Spread・Zero・ProをEA目線でどう使い分けるか
- Exnessのレバレッジ無制限とEAロット計算
- 週末のポジション持ち越しリスクと金曜クローズロジックの入れ方
- 朝スキャEAが冬時間・夏時間の切り替えで狂う問題と対策
失敗ログは反省文ではなく、過剰最適化や運用停止の条件を先に見つけるための材料です。
参照した公式情報
- Exness official site (2026.06.17 確認)
- IC Markets official site (2026.06.17 確認)
- MQL5 documentation (2026.06.17 確認)
免責
本記事は個人の検証メモであり、投資助言ではありません。バックテスト結果は将来の成績を保証しません。海外FXや自動売買には、法規制・レバレッジ・スプレッド拡大・約定遅延・スリッページなどのリスクがあります。条件は変わるため、最新情報は各公式ページで確認してください。