フォレックスにおける究極オシレーターの仕組み
直接の答え
究極オシレーターは、複数のlookback periodにわたって「買い圧(buying pressure)」をトータルのトレーディング・レンジ(total trading range)と比較することで、価格アクションをオシレーターへ変換するモメンタム指標です。フォレックスでは、対象の高値・安値・終値の値から計算し、固定ウェイトで3つの中間的な読みを組み合わせて、単一の範囲が限定された数値を作ります。この出力はそれ自体で将来のリターンを予測するものではありません。入力と計算が明確に定義されたうえで、過去の相対的なモメンタムの測定として解釈する必要があります。
メカニクス:定義と入力
本質的には、究極オシレーターは「直近の高値–安値レンジの中で、終値がどこに位置しているか」を評価し、次の問いを投げかけます。
「終値は、典型的な値動きから考えられる以上に、レンジの上側へ押し上げられているのか?」
そして、各lookback periodごとに2つの中間量を使ってこれを行います。
- 買い圧(BP)
- 買い圧(Buying Pressure)は次のように定義されます:
- BP = Close − Min(Low, Previous Close)
- 終値が、現在の安値と前回の終値の最小値より上にある場合、BPは正になります。これは、その参照に対して終値がより高い位置で成立したことを示します。
- トゥルー・レンジ(TR)
- トゥルー・レンジ(True Range)は、次の3つの測定値の最大値として定義されます:
- TR1 = Current High − Current Low
- TR2 = Absolute(Current High − Previous Close)
- TR3 = Absolute(Current Low − Previous Close)
- TRは、前回の終値に対するギャップも考慮しながら、価格が関連する区間でどれだけ動いたかを表します。
各lookback period(一般的に短期・中期・長期として書かれ、しばしば7、14、28本のバーを用います)について、次の比率を計算します:
- Average BP / Average TR より厳密には、ある期間について:
- SumBP = Σ BP over the last N bars
- SumTR = Σ TR over the last N bars
- RawComponent = SumBP / SumTR
そして、3つの構成要素を固定ウェイトで組み合わせて、オシレーター入力を作ります:
- WeightedValue = (4 × ComponentShort + 2 × ComponentMedium + 1 × ComponentLong) / (4 + 2 + 1)
- オシレーターへのスケーリング 次に、結合されたモメンタム比率を、0〜100の範囲に収まるオシレーターへスケールします:
- Ultimate Oscillator = 100 × WeightedValue
重要なモデリング上の前提(フォレックス計算):「バー(bar)データ(高値・安値・終値)」は、使用しているチャートの時間軸(timeframe)と一貫して定義されている必要があります。データベンダーがバーを異なる形式で整形している場合(たとえば、特定の銘柄でセッションの扱いが異なる場合)、BPとTRは入力が変わるため変化し得ます。
ステップごとのシーケンス(何を、どの順で計算するか)
メカニズムを検証する実用的な方法は、OHLCデータから直接再計算することです。以下の手順は、「安定しているメカニクス」と「変動する入力」を分けています。
- 時間軸とバー定義を選ぶ
- 時間軸を選びます(例:1時間足、15分足など)。
- どの終値価格を使うかを決めます(通常はバーの終値)。
- 各バーについて、前回の終値を使ってBPとTRを計算する
- BPは、現在の終値、現在の安値、前回の終値を必要とします。
- TRは、現在の高値、現在の安値、前回の終値を必要とします。
- つまり、データセットの最初のバーは、直前のバーがないためBP/TRを完全には計算できません。
- 各lookback period N(短期・中期・長期)ごとにBPとTRを合計する
- SumBP(N) = Σ BP over N bars
- SumTR(N) = Σ TR over N bars
- Component(N) = SumBP(N) / SumTR(N)
- 固定ウェイトで構成要素を結合する
- WeightedValue = (4 × Component(short) + 2 × Component(medium) + 1 × Component(long)) / 7
- 7での割り算は、ウェイト4、2、1によって暗に示される正規化です。
- 0〜100のオシレーターへスケールする
- Ultimate Oscillator = 100 × WeightedValue
これがメカニズムです。「動く部分」はOHLC入力(可変)と、期間の長さ/ウェイト(通常は固定)だけです。期間の長さを変えたり、OHLCの定義が変わったりすれば、オシレーター出力が異なることを期待すべきです。
再現できる証拠または例(明確な前提つき)
ここではライブの市場データを前提としないため、小さな仮想データセットを考え、計算構造に注目してください。
例の前提
- 時間軸:1バーのステップ(式が必要なだけなので、これで十分です)。
- lookback periods:短期 N=3、中期 N=3、長期 N=3(この簡略化のため、すべて同じにします。実際の運用では異なる長さを使うことが多いです)。
- 各バーについて、次のOHLC値があるとします:High、Low、Close、そして必要な最初のバーのためのPrevious Close。
計算がどのように進むか
- 最初のバー以降の各バーについて計算します:
- BP = Close − Min(Low, Previous Close)
- TR = max(High − Low, abs(High − Previous Close), abs(Low − Previous Close))
- 直近3本のバーについて計算します:
- SumBP(3) = BP1 + BP2 + BP3
- SumTR(3) = TR1 + TR2 + TR3
- Component(3) = SumBP(3) / SumTR(3)
- ウェイトで結合します(この簡略化例では、すべての期間が等しいため):
- WeightedValue = (4C + 2C + 1C) / 7 = C
- Ultimate Oscillator = 100 × C
この簡略化をしていても、指標が「機能する」理由は見て取れます:
- 終値が一貫して、直近レンジの中で(Min(Low, Previous Close)の参照に対して)より高い位置に着地するなら、BPはTRに対して増加します。
- 価格の値動きが広いレンジ(大きな高値/安値、またはギャップ)に支配され、終値がレンジ上部付近に来ない場合、TRはBPに対して大きくなり、比率は低下し得ます。
これがフォレックスの解釈とどう結びつくか
- オシレーターの値が高い(100に近い)ほど、選択したウィンドウにおけるレンジに対する買い圧が強いことを反映します。
- オシレーターの値が低い(0に近い)ほど、選択したウィンドウにおけるレンジに対する買い圧が弱いことを反映します。
これは測定の説明です。これだけでは、次に何が起きるかを確定するものではありません。
限界と失敗パターン(何がうまくいかない可能性があるか)
究極オシレーターのメカニクスは一貫していますが、基礎となる前提や文脈が成り立たない場合、解釈が失敗することがあります。
- 市場レジームへの感度
- モメンタム指標は、トレンド相場とレンジ相場で挙動が異なることがあります。
- 強いレンジ相場では、オシレーターの動きが、持続的な方向性の圧力というより、レンジ内での振れを反映している可能性があります。
- データ定義の違い
- オシレーターは高値・安値・終値に依存し、TRは前回の終値を使います。
- データソースが異なるセッション境界を使っている場合、または「前回の終値」の連続性が異なる場合、BP/TRの比率は変わり得ます。
- パラメータの不一致
- 標準的なlookback長さとウェイトのスキームは、指標設計の一部です。
- 自分が考えているのと違う期間長を使っている場合、同等ではない値同士を比較してしまうかもしれません。
- 除算とエッジ条件
- TRは、高値/安値と、ギャップ調整された距離から構成されます。TRの合計が非常に小さい、または珍しいバーに支配されている場合、比率が不安定になることがあります。
DOCUMENT END