セッション別にロジックを切り替える設計 — 東京・欧州・NY時間で判定を最適化する考え方

外国為替市場は24時間動き続けますが、その中身は一様ではありません。東京・欧州・ニューヨーク(NY)という主要3セッションでは、参加者の顔ぶれや流動性、値動きの荒さが入れ替わり、同じ銘柄でも時間帯によって相場の性格が変わると一般的に言われます。

本記事では、「いまどのセッションか」を判定する時間帯フィルターと、「そのセッションで何を見るか」という判定ロジックを組み合わせ、時間帯ごとにcBotの挙動を切り替える設計の考え方を整理します。特定の時間帯が有利だと保証する話ではなく、あくまで実装の設計指針としての位置づけです。

東京・欧州・NYの3セッションと重複帯を時間軸で並べた模式図

時間帯フィルターの役割

時間帯フィルターは、現在時刻がどのセッションに属するかを判定し、後段の判定ロジックへ「いまはどういう文脈か」という情報を渡す仕組みです。単純には、サーバー時刻を参照して東京・欧州・NY・オフのいずれかにラベル付けする役割を担います。

このフィルターがあると、「東京時間だけ稼働する」「欧米重複帯では判定基準を変える」といった時間条件をロジックに組み込めます。経済指標の集中する時間帯や、流動性の薄い時間帯を避けるといった、リスク管理の観点からの利用も考えられます。

単独利用時の限界として、時間帯フィルターはそれ自体では方向感も過熱感も測れません。「いま何時か」を返すだけで、エントリーの可否を決める材料にはなりません。あくまで他の判定ロジックに文脈を添える補助レイヤーであり、フィルター単独で売買判断を構築することはできない、という前提を持っておく必要があります。

セッションごとの相場特性の役割

各セッションには、経験的に語られる相場特性があります。東京時間は相対的に値幅が落ち着き、レンジ寄りに推移しやすい時間帯とされることが多く、欧州時間の入りとともに動意づき、欧米が重なる時間帯はトレンドが出やすいと語られる傾向があります。もっとも、これらは固定的な法則ではなく、あくまで傾向として参照される前提です。

この「特性の違い」を判定ロジック側で受け止めるのが、組み合わせのもう一方の役割です。レンジ寄りの局面では逆張り的な過熱感の判定が噛み合いやすく、トレンドの出やすい局面では順張り的なブレイクアウトや方向確認が噛み合いやすい、と一般的に整理されます。相場が今どういう状態にあるかの基礎はトレンドとレンジの見分け方に、値幅の測り方はATRが捉えるボラティリティにまとめています。

単独利用時の限界として、セッション特性はあくまで確率的な傾向であり、実際の値動きが常にそれに従うわけではありません。指標発表や突発ニュースがあれば、東京時間でも大きく動きます。したがって、セッションから機械的にロジックを固定するのではなく、実際のボラティリティやトレンド状態と併せて確認する設計が現実的です。

なぜセッション別に切り替えるのか

時間帯フィルターとセッション別ロジックは、互いの不足を補い合う関係にあります。単一の判定ロジックを24時間そのまま適用すると、レンジ寄りの時間帯に最適化した逆張りロジックがトレンドの出やすい時間帯で連続的に逆行を踏んだり、逆にブレイクアウト狙いのロジックが閑散時間帯でダマシを拾い続けたりしやすくなります。時間帯という「文脈」を与えることで、ロジックの前提と実際の相場環境のミスマッチを減らす狙いがあります。

考え方の例を挙げます。

このように、時間帯フィルターが示す「いまどの文脈にいるか」と、各セッション向けに用意した判定ロジックを組み合わせると、相場の性格に合わせて振る舞いを切り替える設計に整理できます。ノイズフィルターとして機能することが期待できる仕組みであり、時間帯を無視した一律のロジックよりも、前提と環境の食い違いを抑えやすくなると考えられます。

注意点として、切り替えを細かくしすぎると、境界付近でロジックが頻繁に入れ替わり、挙動が読みにくくなります。セッションは3〜4区分程度に大きく分け、境界の扱いを明確にしておくのが、特性に沿った使い方になります。

パラメータをどう考えるか

唯一の正解があるわけではなく、検証して自分の運用時間軸に合わせる前提で、方向性だけ整理します。

セッションの区切りは、まず基準時刻をどれに揃えるかを決めます。cTraderのサーバー時刻は協定世界時(UTC)基準で扱うのが安定しやすく、日本時間(JST)はUTC+9として換算します。東京・欧州・NYの開始終了時刻はおおまかな目安であり、銘柄や検証結果に応じて調整対象になります。とくに欧米が重なる時間帯は動きが出やすいとされるため、この重複帯を独立した区分として切り出す構成も検討の余地があります。

**夏時間(サマータイム)**の扱いも重要です。欧州・米国はサマータイムの有無でセッション時刻がUTC基準で1時間ずれます。区切りを固定のUTC時刻でハードコードすると、季節によって境界が実勢とずれる点に注意が必要です。

各セッションで参照する指標のパラメータも、時間軸に合わせて別々に持たせる選択肢があります。レンジ寄りの時間帯は短めの期間で反応を早め、トレンド寄りの時間帯は長めの期間で方向を安定させる、といった方向性が考えられますが、いずれも過去データでの検証を前提に決めるのが安全です。

cBot化する際の考慮点

cTraderのcBotとして実装する場合、設計面で押さえておきたいポイントがあります。

時刻の基準を統一する: Server.Time はUTCで返ります。ローカルPCの時刻(DateTime.Now)と混在させると、環境によって判定が変わるバグの温床になります。セッション判定は必ずサーバー時刻に統一し、JST表示が必要な場面だけ換算する設計が無難です。

サマータイムの分岐: 前述の通り、欧州・米国のサマータイム期間ではUTC基準の境界がずれます。固定時刻でハードコードせず、対象地域のタイムゾーン情報から夏時間を判定して境界をシフトさせるか、少なくとも切り替え時期を意識した設計にしておくと、季節をまたいだ挙動が安定します。

境界とヒステリシス: セッションの切り替わり付近では、状態フラグが頻繁に入れ替わる可能性があります。切り替わった瞬間に保有ポジションをどう扱うか(即クローズ / 継続保有 / 新規のみ停止)をあらかじめ決めておくと、境界での挙動が予測しやすくなります。新規エントリーだけをセッション条件で制御し、決済は各ポジションのルールに任せる分離設計が扱いやすい構成です。

確定足ベースの評価: セッション判定自体は時刻ベースなのでティックごとに変わりますが、指標の判定はOnBarで確定足を評価するほうがフラグのバタつきを抑えられます。

簡単な疑似コード断片を挙げます。

// 例: サーバー時刻(UTC)からセッションを判定して分岐する
enum Session { Tokyo, London, NewYork, Off }

Session GetSession(DateTime utc)
{
    int h = utc.Hour; // おおまかな目安。実際は分・夏時間も考慮する
    if (h >= 0 && h < 7)  return Session.Tokyo;
    if (h >= 7 && h < 12) return Session.London;
    if (h >= 12 && h < 21) return Session.NewYork;
    return Session.Off;
}

var session = GetSession(Server.Time);
if (session == Session.Off) return; // 閑散帯は新規判定を見送る
// session に応じて参照する判定ロジックを切り替える

実装初期は、判定したセッション名・サーバー時刻・採用したロジックをすべてログに出力しておくと、検証時にチャート上の挙動と突き合わせやすくなります。

実装の流れ

ロジックをcBotに落とし込むときの全体像を、入力→計算→判定→出力の流れで整理します。

  1. 入力: サーバー時刻(UTC)と、監視する銘柄・時間足の4本値を取得する
  2. 計算: 現在時刻からセッションを判定し、各セッション向けの指標を必要な分だけ計算する
  3. 判定:
    • 時間帯フラグ: いまが東京 / 欧州 / NY / オフのどれか、重複帯かどうか
    • 環境フラグ: 実際のトレンド状態やボラティリティが、そのセッションの想定特性と整合しているか
    • 両者の組み合わせで、参照する判定ロジックと、新規判定の可否を決定する
  4. 出力: 採用したロジックの判定結果と、時間条件による稼働可否を、エントリー処理や外部通知へ渡す

この設計は、時間帯フィルターのレイヤー各セッション向け判定ロジックのレイヤーを分けて実装すると応用が利きます。セッション区分の見直しと、個別ロジックの差し替えを独立して行えるため、検証と改良の回転が速くなります。

セッション判定から環境確認・ロジック分岐・稼働可否までの戦略フロー

どう活用するか

この設計図は、目的別に活用できます。

自作派の方は、Claude Code を使った cBot 開発時のテンプレートとして、時間帯フィルターと各セッションロジックを分離する方針をそのまま下敷きにしてみてください。委託派の方は、ai-programming.xyz への開発相談時に「東京はレンジ寄り、欧米重複帯はトレンド寄りで判定を切り替えたい」という前提を共有しておくと、要件詰めがスムーズになります。教育派の方は、スクールでの実践課題として、本記事のセッション判定を自分の手で実装し、サマータイム対応やセッション区分のチューニングへと発展させていく演習に使えます。

本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。