Ultimate Oscillatorの計算方法は?
直接的な回答
Ultimate Oscillator(しばしば「UO」と略される)は、各バーのHigh、Low、Closeから計算された買い圧力比率の3つの滑らかな平均を組み合わせて計算されます。3つの平均は異なる見直し期間(一般的に7、14、28期間)を使用し、重み(通常は4、2、1)で結合して、最終的な0から100の値を生成します。
メカニズムと定義
1) 「買い圧力」と「真の範囲」から始める
各バーiについて定義します:
- 買い圧力(BP) = Closeᵢ − Lowᵢ
- 真の範囲(TR) = max(
- Highᵢ − Lowᵢ,
- |Highᵢ − Closeᵢ₋₁|,
- |Lowᵢ − Closeᵢ₋₁| )
これらの2つのコンポーネントは、買い圧力比率を形成するために使用されます:
- BP/TR
概念的には、BPはCloseがバーの上部にどれだけ強く位置しているかを測定します(Lowに対して)、TRはバーの範囲がどれだけ大きいかを測定します。これは、前のCloseに対するギャップを含みます。比率BP/TRは、買い圧力を動きの大きさに対して表現します。
2) 比率を3つの見直しウィンドウで滑らかにする
3つの見直し期間を選択します:
- a(しばしば7)
- b(しばしば14)
- c(しばしば28)
各ウィンドウ(バーiで終了)で3つの滑らかな合計を計算します:
- Average₁ = 最後のaバーのBPの合計 / 最後のaバーのTRの合計
- Average₂ = 最後のbバーのBPの合計 / 最後のbバーのTRの合計
- Average₃ = 最後のcバーのBPの合計 / 最後のcバーのTRの合計
この「分子の合計 / 分母の合計」のアプローチにより、UOは各ウィンドウの蓄積された圧力と蓄積された範囲に依存するようになり、最新のバーのBP/TRのみに依存することはありません。
3) 3つの平均を重み付けして0–100にスケーリング
Ultimate Oscillatorは、重み付けされた組み合わせとして計算されます:
- UO = 100 × (4 × Average₁ + 2 × Average₂ + Average₃) / (4 + 2 + 1)
一般的な重み付けスキームでは(4 + 2 + 1)= 7であるため、これは簡略化されます:
- UO = 100 × (4 × Average₁ + 2 × Average₂ + Average₃) / 7
結果は通常、0–100のスケールで解釈されます。
証拠または検証可能なワーク例(ライブデータなし)
計算を再現できることを確認するには、小さな仮想データセットを使用します。
前提条件:
- 標準ウィンドウa=2、b=3、c=4を使用(例をコンパクトにするために短縮)。
- 3つの重み4、2、1を使用(通常のアプローチと同じ)。
バー1–4のHigh、Low、Closeがあると仮定し、TRを計算する際に前のCloseを使用します(したがって、バー1のTRにはバー0が必要;簡単にするためにバー2から開始)。
各バーi(i=2から開始)について:
- BPᵢ = Closeᵢ − Lowᵢ
- TRᵢ = max(Highᵢ − Lowᵢ, |Highᵢ − Closeᵢ₋₁|, |Lowᵢ − Closeᵢ₋₁|)
- それぞれのウィンドウで累積します:
- sumBP(a) = 最後のaバーのBP
- sumTR(a) = 最後のaバーのTR
- Average₁ = sumBP(a) / sumTR(a)
- bとcについて繰り返します。
- 最後に:
- UO = 100 × (4×Average₁ + 2×Average₂ + Average₃)/7
慎重に再計算したときに見るべきこと:
- Closeが繰り返し低値付近に着地すると、BPが小さくなり、Average₁/₂/₃が低下し、UOが下がります。
- バーが広い(TRが大きい)が、クローズが高値付近にない場合、比率は中程度のままであることがあり、UOが高い範囲だけでスパイクするのを防ぎます。
ここで正確な数字が示されていない場合でも、計算ステップはHigh/Low/Close(およびTRの最初の計算に必要な少なくとも1つの前のClose)が与えられれば完全に決定論的です。
制限とリスク(重要な故障モード)
1) データの整列が重要
UOは一貫したバーの定義を必要とします。High/Low/Closeシリーズが1つのタイムフレームにあるが、別のタイムフレームにパラメータを適用すると、計算されたBPとTRは同じ「バー」に対応せず、予想される結果と異なる値が生成されます。
2) 「十分なバー」が必要
UOは3つのウィンドウ(a、b、c)を使用するため、完全な値を計算するには少なくともcバー(TRの最初の計算に必要な追加の前のCloseを含む)が必要です。初期の値は、異なる実装で欠けているか部分的であることがあります。
3) 除算によるゼロまたはほぼゼロのTR
比率Average = sum(BP)/sum(TR)はsum(TR)が非ゼロであると仮定します。典型的な市場データではTRはほとんどゼロにはなりませんが、非常に小さくまたは合成されたデータセットではsum(TR)が非常に小さくなることがあります。これにより、比率が不安定になることがあります。
4) 異なるソフトウェアは少し異なる慣例を使用する可能性があります
一部のプラットフォームでは一般的なデフォルト(a=7、b=14、c=28および重み4/2/1)を使用しますが、次のように実装する場合があります:
- Closeᵢ₋₁が利用できない最初のバー(複数)の処理方法が異なる。
- 数値精度が異なる。
- 非標準的なバー間隔の場合、期間の解釈が異なる。 したがって、独立した検証には、最初のTR値がどのように計算されるか、および早期のUO値がどのように扱われるかを確認する必要があります。
5) 解釈は独立したシグナルと同じではない
UOは価格変動コンポーネントの比率から派生したモーメンタムスタイルのオシレーターです。ほとんどのオシレーターと同様に、レジム変化、ボラティリティクラスタリング、タイムフレーム選択に敏感であることがあります。測定出力として見るべきであり、確実な決定ルールとして見るべきではありません。
検証と次の質問
計算を独立して検証するには:
- 明示的なパラメータを選択します(選択したa、b、cおよび重み4、2、1)。
- 各バーについて、BP = Close − Lowを計算します。
- 各バーについて、TR = max(High−Low, |High−priorClose|, |Low−priorClose|)を計算します。
- **sum(BP)/sum(TR)**を使用して3つのウィンドウ比率を計算します。
- UO = 100 × (4×Avg₁ + 2×Avg₂ + Avg₃)/7を使用してそれらをUOに組み合わせます。
必要に応じて、計算したUOをチャートツールが表示するものと比較することもできますが、タイムフレーム、バークローズの慣例、およびそのツールが使用するTRの正確な定義が一致することを確認してください。
また、UOを関連するモーメンタムオシレーターと比較し、設定(a、b、c)を変更して短期的な対長期的なホライズンでスムージングと応答性がどのように変化するかを確認したい場合もあります。