ボルテックス(Vortex)の計算方法:数式、入力、検証
ボルテックス(Vortex)とは何か、そして「calculated」とはどういう意味か
Vortexは、選択したlookback期間における方向性の強さを測定するために設計されたテクニカル指標です。実務上は、各価格バーの高値と安値から計算され、しばしばVI+とVI−と呼ばれる2つの値が得られます。
ここでの「calculated」とは、次のことを意味します。各バーについて、指標は方向性の値動きの成分を計算し、その後lookbackウィンドウ上で平均化します。これにより、最近の値動きがより上向きか、より下向きかを判断するために比較できる一対のラインが得られます。
重要なポイントは、指標の数値出力は、入力となる価格系列(高値と安値)と選択したパラメータ(特にlookbackの長さ)に対して決定論的である、という点です。市場、提供元、データセットによって変わるのは数式ではなく、入力データとバーの作り方です。
ボルテックスの計算(数式とパラメータ)
仕組みを説明するために、時系列で並んだバーの系列があると仮定します。次のようにします。
- High[t] は現在のバーの高値。
- Low[t] は現在のバーの安値。
- High[t−1] と Low[t−1] は前のバーの高値と安値。
lookbackの長さを選びます。通常は N と書きます(たとえば、多くの教育的な文脈では N = 14 のようにします)。十分な履歴が存在する各バー t について、Vortexは2つの方向性の「真のレンジ(true-range)に似た」動きを形成します。
- 上向き・下向きの値動き成分を計算する
- VM+(t) = |High[t] − Low[t−1]| if High[t] − Low[t−1] > 0, otherwise 0
- VM−(t) = |Low[t] − High[t−1]| if Low[t] − High[t−1] > 0, otherwise 0
(いくつかの公表された説明では、「関連する差が正ならそれを維持し、そうでなければ0にする」という考え方で表現されています。意図は、隣接する高値と安値を使って、上向きに傾いた動きと下向きに傾いた動きを分離することです。)
- 組み合わせたレンジ成分を計算する
- TR(t) = max(High[t], Low[t−1]) − min(Low[t], High[t−1])
- lookback期間で平均化する 直近N本のバー(t−N+1 から t)にわたって合計し、その後割ります。
- VI+(t) = (k = t−N+1 から t までの VM+(k) の合計) / (k = t−N+1 から t までの TR(k) の合計)
- VI−(t) = (k = t−N+1 から t までの VM−(k) の合計) / (k = t−N+1 から t までの TR(k) の合計)
これにより、典型的な定義ではそれぞれ0から1の範囲の2つの値が得られます。これは、各VM成分が、TRで使われるのと同じレンジ論理の「非負の部分」から構築されているためです。もしTRの合計が0になる場合(たとえば、病的または一定の入力の場合)には、割り算は未定義です。堅牢な実装では、欠損値を返す、または計算をスキップすることで対処します。
どのデータ要件が重要か
自分でVortexを計算するには、次が必要です。
- 時系列順に一貫したバーの系列。
- 各バーについて、高値と安値の値。
- 選択したlookback N。
一般的に説明されるコアのVortex計算では、終値は必須ではありません。方向性の強さは、前のバーとの高値/安値の関係から得られます。
実例を通じた、検証可能な例
ここでは特定のライブ価格を前提としないため、例は記号的ですが、それでも検証可能です。
N = 3 とし、バー t = 1, 2, 3, 4 を考えます。VI+(4) と VI−(4) を求めたいとします。この計算では、最後の3本のバーとして k = 2, 3, 4 を使います。
ステップA:{2, 3, 4} の各 k について計算します。
- High[k] と Low[k−1] を使って VM+(k) を計算
- Low[k] と High[k−1] を使って VM−(k) を計算
- High[k], Low[k], High[k−1], Low[k−1] を使って TR(k) を計算
ステップB:ウィンドウ内で合計します。
- SumVM+(4) = VM+(2) + VM+(3) + VM+(4)
- SumVM−(4) = VM−(2) + VM−(3) + VM−(4)
- SumTR(4) = TR(2) + TR(3) + TR(4)
ステップC:割り算します。
- VI+(4) = SumVM+(4) / SumTR(4)
- VI−(4) = SumVM−(4) / SumTR(4)
独立に確認できること:
- 選んだ「方向性の差」が正でない場合は VM+(k) を0に設定するなら、VI+(t) は、ウィンドウ内で上向きに傾いた動きが支配的なときにのみ増加し得ます。
- 高値/安値のパターンが対称的、または VM+ と VM− の値が似たものを生むように交互に現れるなら、VI+ と VI− は近くなりやすいです。
ラインを解釈しなくても、各バーについて中間成分(VM+ または VM− と TR)を再現し、合計と割り算があなたの計算機やチャートソフトの結果と一致することを確認することで、正しさを確かめられます。
重要な制限と、起こり得る失敗パターン
-
lookback長(N)への感度 より長い N は、より多くのバーにわたって方向性の強さを平滑化し、VI+ と VI− の反応を鈍らせます。短い N は、直近の変化に対してより速く反応します。失敗パターンとしては、タイミングの誤解釈があります。同じ市場の挙動でも、パラメータの選択だけで異なる読み取り結果が生じ得ます。
-
バーの作り方への依存 Vortexは各バーの高値と安値を使います。チャートが異なる時間足を使っていたり、異なる取引セッションを使っていたり、わずかに異なる高値/安値の値を持つ別のデータベンダーを使っていたりすると、計算した VI+ と VI− が異なる可能性があります。これは数式の問題ではなく、入力データの整合(アラインメント)の問題です。
-
単独のシグナルではない この指標は、方向性の強さを比較する指標を出力しますが、方向やタイミングを保証するものではありません。文脈なしに VI+ と VI− を解釈すると、過度な確信につながる可能性があります。特に、両ラインが揺れやすいレンジ(もみ合い)では注意が必要です。
-
ゼロ割れ、またはほぼゼロのレンジ ウィンドウ内で TR の合計が0になる場合(たとえば、一定または退化した入力系列からの場合)、比率は未定義です。厳密に0でなくても、非常に小さい TR の合計だと比率が不安定になり、ノイズが増幅されます。
予測(アウトカム)を前提にせずにVortex計算を検証する方法
実用的な検証アプローチは、指標を純粋な計算として扱うことです。
- N と、特定のバーインデックス t を選ぶ。
- チャートまたはデータファイルが使用している、正確な高値と安値の値を取り出す。
- lookbackウィンドウ内の各 k について、VM+(k)、VM−(k)、および TR(k) を再計算する。
- 合計して割り算し、VI+(t) と VI−(t) を求める。
- 同じ時間足とバーの整合(アラインメント)に対して、チャートの出力と比較する。
数値が一致しない場合のよくある原因は次のとおりです。
- 方向性成分の定義が異なる(正/ゼロのロジックの表現には、些細な差異が存在し得ます)。 - パラメータの慣習が異なる(たとえば、Nでラベル付けされた指標でも、内部では別の実効ウィンドウ長を使うことがあります)。