米国の先物でセッションに基づくインジケーターを使うと、日次セッションの期間が延長されて計算されることがあるのはなぜですか?
TradingViewのインジケーターには計算対象の期間(セッション)が決められているものがあり、その期間が終了するとともに計算がリセットされるものがあります。たとえば、SVP (セッション出来高プロファイル) や STPO (セッション・タイム・プライス・オポチュニティ) といったインジケーターは、日毎に取引セッション中(取引日の市場開始から終了まで)のデータを蓄積してそこからセッションの分析結果を表示しますが、翌日のセッションが始まると分析がリセットされます。また、Pivots (ピボットポイント・スタンダード)、VWAP (出来高加重平均価格)、あるいは周期的なタイム・プライス・オポチュニティといったインジケーターでは、分析対象とする期間の定義を1日のセッションよりも長い、日・週・月単位でカスタマイズできるようになっています。
これらのインジケーターでは日中チャート上での日毎のセッションを延長することによって、複数の日中取引セッションを1つの長い「日中」セッションの中に統合することがあります。たとえば、下のスクリーンショットにおいては、セッション出来高プロファイルの分析が、1月19日に始まる日中セッションから1月21日まで延長されていますが、その間に1月20日にセッションの区切りが表示されています。この動作はインジケーターのバグではなく、この銘柄の取引セッションのスケジュール設定を行う取引所が「意図的」に調整したものです。

なぜこのようなことが起こるのか
まず、取引セッション/取引日/暦日を区別しておくことが重要です。たとえば、オーバーナイト・セッションがあるシンボルの場合、「その日」の取引セッションは暦日では2日にまたがっており、歴日上ではここで言われる取引日の「前日」に始まります。したがって、シンボル "ES1!" の「月曜日」の日次セッションは、日曜日の17:00 CT(中部標準時)に始まって月曜日の16:00 CTに終わることになります。
セッションに基づくインジケーターは取引日1日につき1回計算をリセットしますが、これは日足ベースの時間足を考慮に入れると、多くの場合、暦日1日につき1回リセットすることに相当します。ただし、ある銘柄の日次の取引セッションについて、取引所が時間の短縮や延長などの変更を施すことがあり、このときセッション内の暦日数が変化することがあります。その結果、暦日が進んでいるにもかかわらず、セッションに基づくインジケーターでは日毎に計算がリセットされないことがあります。
CMEグループ (CBOT、CME、NYMEX、COMEXの各取引所) 傘下にある米国拠点の先物の場合、各取引所は米国の連邦祝日を遵守し、その日の取引セッションを短縮します。CMEグループはこうしたセッションの変更について、該当する祝日と銘柄ごとにセッションの変更内容を記載した年間の休日取引時間を こちらでリストアップしています。また、取引所では短縮されたセッションを1つの取引日として統合することが多く、結果として暦日で最大3日間にわたる日中の取引が1つの「日中」セッションの中に含まれることになります。
たとえば、CMEグループの休日カレンダーによると、同取引所はキング牧師記念日にあたる2025年1月20日(月)に取引時間を短縮しています。株式の先物については、1月19日(日)の17:00 CT(中部標準時)から21日(火)16:00 CT(中部標準時)までの日中取引は、すべて火曜日の延長取引セッションに属すると発表しています:

シンボル "ES1!" の日中チャートにセッション出来高プロファイル を追加すると、変更された休日セッションを見ることができます。月曜の取引セッション (通常は、日曜17:00 - 月曜16:00 CT) は休日で短縮されたために11:00 CTで終了しており、これが火曜の取引セッション(月曜17:00 - 火曜16:00 CT) に統合された結果、1つの長い「日次」セッションができています。一見すると、インジケーターがここでセッション終了時の計算のリセットに失敗しているように見えますが、実際には取引所が設定した取引セッションの日付を正しく表したものになっています:

また、シンボルの日足チャートを見ても、インジケーターが定義したセッションが取引所の日足データと一致していることを確認できます。1月17日(金)の日足のバー (日曜の前のセッション) の直後に、1月21日(火)の日足のバーが続いており、日曜から火曜までの日中の値動きをすべてカバーしています(このローソク足には日中を示すラベルがすべて表示されています):

以上のように、取引日と暦日の区別を念頭に置きつつ米国の祝祭日を例にした場合を考えると、セッションに基づくインジケーターが複数の暦日を1日の取引セッションに統合したとしても、それはインジケーターのエラーではないということがわかります。これはむしろ「日次」のデータを取引日に割り当てる調整を取引所が意図して行った結果です。セッションに基づくインジケーターは、単に取引所が提供する日次セッションのデータを提供しているにすぎません。
さらに考慮しておきたい点としては、短縮された取引セッションでは普段の日次セッションよりも大幅に出来高が減少する場合が多く、こうした不完全なセッションのデータを一つの「日次」セッションとして取り扱うと、日次の出来高動向の解釈に不正確な歪みが生じてしまうということがあります。そのかわりにセッション自体を延長すれば、そのセッションの出来高を普段の出来高の範囲内に合理的に収めることができます。
セッションに基づくインジケーターのソースコードにアクセスできるユーザーであれば、スクリプトで "1440" を時間足として使用すると、日足の "1D" セッションを使わずに24時間の固定セッション(1440分)を表現できます。時間足 "1440" は、取引所が定義した日次セッションに依存するのではなく、その銘柄の日中データからセッションを構築します。つまり、この場合だと、取引所のセッション変更とは別に独立した一定の間隔でデータを分割して、暦日ごとに計算のリセットを行うことになります。