スーパートレンドはどのように計算される?計算式、パラメータ、データ要件
スーパートレンドとは何で、何を計算するのか?
スーパートレンドは、価格データを1本のライン(多くの場合、階段状のラインとしてプロットされます)と方向(上昇トレンドまたは下降トレンド)に変換するトレンドフォロー型のインジケーターです。このインジケーターは、価格の両側にあるバンドが交差するまでは同じ側に留まり、交差した時点で方向を切り替えるように設計されています。
大まかに言うと、スーパートレンドには3つの要素が必要です:
- 価格系列(例:各バーの高値/安値/終値を使う)。
- ボラティリティの推定値(通常はATR、average true range)。
- ボラティリティで調整したバンドを、維持されるトレンドラインへ変換するルール。
ATRは移動窓(moving-window)計算に依存し(さらに必要に応じて平滑化も行うため)、数値としての厳密な出力は、ATRをどのように計算するか、そして「バー」の定義(時間足とOHLCデータ)や、選択したパラメータによって変わります。
中核となる仕組み:バンド、ATR、トレンドの切り替え
スーパートレンドは、新しい各バーごとに反復的に計算されます。最も一般的な定式化では、次のようになります:
ステップ1:トゥルーレンジ(TR)を計算する
各バー t について、高値/安値/終値を使ってトゥルーレンジを定義します。標準的な定義は次の通りです:
- (TR_t = \max{H_t - L_t,\ |H_t - C_{t-1}|,\ |L_t - C_{t-1}|})
ここで:
- (H_t) = バー t の高値
- (L_t) = バー t の安値
- (C_t) = バー t の終値
- (C_{t-1}) = 前のバーの終値
ステップ2:ATR(Average True Range)を計算する
ATRは、選択した期間 (n) にわたるTRの平均です。よくある選択肢は単純移動平均(SMA)です:
- (ATR_t = \text{SMA}(TR_t, n))
実装によっては、ATRで一般的なワイルダーの平滑化(Wilder’s smoothing)を使う場合もありますが、検証のための重要なポイントは次の通りです:参照している実装で使われている平滑化手法を一致させる必要があります。
ステップ3:基本となる上限・下限バンドを計算する
典型的なスーパートレンドのバンド構築では、中値 (M_t) と、ATRに係数 (k)(マルチプライヤー)を掛けたものを使います:
- (M_t = (H_t + L_t) / 2)
- (\text{BasicUpper}_t = M_t + k \cdot ATR_t)
- (\text{BasicLower}_t = M_t - k \cdot ATR_t)
必要なパラメータ:
- (n):ATRの参照期間の長さ(しばしば「period」と呼ばれます)。
- (k):ATRマルチプライヤー(しばしば「multiplier」と呼ばれます)。
ステップ4:「バンド最終化(finalization)」ルールを適用する(キャリー・フォワードのロジック)
スーパートレンドは、現在のトレンドに逆らって動かないように、バンドを調整(最終化)するのが一般的です。広く使われているルールセットの一例は次の通りです:
- (\text{FinalUpper}_t) は、通常 (\text{BasicUpper}_t) に設定されますが、前のバーからキャリー・フォワードすべき条件がある場合はそうなりません。
- (\text{FinalLower}_t) も通常 (\text{BasicLower}_t) に設定されますが、前のバーからキャリー・フォワードすべき条件がある場合はそうなりません。
よくある条件分岐は、前の終値と、これまでに最終化されたバンド値に基づいています。概念的には:
- 価格が前のトレンドラインより上にあるとき、下限バンドは「ラチェット(ratchet)」のように上方向へ動くことはありますが、減少してはいけません。
- 価格が前のトレンドラインより下にあるとき、上限バンドは「ラチェット」のように下方向へ動くことはありますが、増加してはいけません。
実装は異なるため、重要なデータ要件があります:特定のスーパートレンド系列を再現するには、参照している実装と同じバンド最終化ルールを使う必要があります。
ステップ5:トレンド方向とスーパートレンドラインを決める
最終的な上限/下限バンドが存在したら、スーパートレンドは現在の価格(多くの場合終値)を関連するバンドと比較してトレンド方向を選びます:
- インジケーターが上昇トレンド状態にあり、価格が最終的な下限/上限の境界を(慣習に応じて)下抜けた場合、下降トレンドへ反転します。
- 下降トレンドで、価格がもう一方の境界を上抜けた場合、上昇トレンドへ反転します。
バー t におけるスーパートレンドの「ライン」は次のように設定されます:
- 状態が上昇トレンドなら最終的な下限バンド(または、下降トレンドなら最終的な上限バンド)。これはインジケーターのプロット規約に従います。
この反復的な状態機械(state machine)が、スーパートレンドが単なる1つの計算式ではない理由です。出力は、前のバーの最終化されたバンドと、前のトレンド状態に依存します。
例:計算(明示的な前提つき)
以下は、検証(verification)スタイルのミニ例で、何を計算するかを示しますが、厳密な数値結果ではありません。
例の前提:
- (H_t, L_t, C_t) が既知のバーを使う。
- TRは最大定義で計算する。
- ATRは (n) 本のバーに対するSMAとして計算する。
- 再現している計算機(calculator)が選ぶ (n) と (k) のパラメータを使う。
- 参照したい実装に一致する標準的なバンド最終化ルールを使う。
手順:
- (t = 2) から始まるバー((C_{t-1}) が必要なため)について、(TR_t) を計算する。
- 十分なTR値が存在する各バー (t)(SMAの意味で (t \ge n))について、(ATR_t) を計算する。
- (M_t = (H_t + L_t)/2) を計算する。
- 基本バンドを計算する:\
- (\text{BasicUpper}_t = M_t + k\cdot ATR_t)\
- (\text{BasicLower}_t = M_t - k\cdot ATR_t)
- 実装のバンド最終化(ラチェット)ルールを適用して (\text{FinalUpper}_t) と (\text{FinalLower}_t) を得る。
- トレンド状態を更新する:
- インジケーターの規約に従って、価格を関連する最終化バンドと比較する。
- スーパートレンド値を、最終化された下限(上昇トレンド)または最終化された上限(下降トレンド)として出力する。
正確性にとって重要なこと:
- 計算した系列が一致しない場合、通常はATRの平滑化タイプ(SMA vs Wilder)、バンド最終化ルールの違い、または初期状態の設定方法が原因です。
スーパートレンドを自分で計算するために必要なデータ
スーパートレンドを独立して再現するには、次が必要です:
- 分析対象の金融商品について、計算で使う正確な時間足での、時系列順のOHLCデータセット。
- TRとATRの平滑化の定義(SMA vs Wilderの平滑化)。
- パラメータ値 (n)(ATR期間)と (k)(マルチプライヤー)。
- 選択した定義で使われる、バンド最終化ルールとトレンド状態更新ルール。
同じ選択をしない限り、2つの計算機がどちらも「スーパートレンド」を計算すると主張しても、異なるラインが生成され得ます。
制約(limitations)と失敗パターン
スーパートレンドは機械的ですが、問題が起きないわけではありません。主な制約には次のようなものがあります:
-
パラメータへの感度 (n) または (k) を変えると、バンドの幅と、ボラティリティの変化がインジケーターへ伝わる速さが変わります。ある相場環境では滑らかに推移する設定でも、別の環境ではより頻繁に反転する可能性があります。
-
レンジ相場や値動きの荒い状況でのノイズの多い反転 価格がバンドの周りで行ったり来たりすると、トレンド状態が頻繁に切り替わることがあります。すると、持続的なトレンドを反映していない可能性がある、上昇/下降が交互に現れるパターンが生まれます。
-
初期化の影響 ATRや移動平均にはスタートアップ期間が必要です。最初に計算可能になるATR値(および初期のトレンド状態)が、その後の最終化バンドや状態の推移に影響するため、初期のバーは実装によって見え方が異なることがあります。
-
データの粒度とOHLCの慣習 異なるバー構成(時間足、データソース側での高値/安値の扱い、欠けたバーなど)は、(TR_t) を変え、それによってATRが変わり、結果としてバンドの位置がずれる可能性があります。