ストキャスティクス・オシレーターはどのように計算されますか?
直接の答え
ストキャスティクス・オシレーターは、ローリング・ウィンドウの価格の極値から計算されます。まず、%K を「直近の終値が、最近の高値-安値レンジのどの位置にあるか」として求めます。次に、%D を %K の移動平均による平滑化として計算します(多くの場合、より短い、または異なる平均設定を用います)。この計算には、過去の価格データ(通常は high、low、close の値)と、lookback window および平滑化期間として選んだパラメータだけが必要です。
メカニズムと定義
基本的な考え方はシンプルです。現在の終値が直近レンジの中でどこに位置しているかを、上限と下限がある数値に変換します。
1) 入力となる価格系列を選ぶ
標準的な実装では、各時点(タイムステップ)について少なくとも次が必要です:
- High:その期間における最も高い取引価格。
- Low:その期間における最も低い取引価格。
- Close:その期間の終値。
検証のために、データソースが提供するフィールドを正確に記録してください(たとえば、「close」がその期間の終値を意味するのか、また high/low がそのバーにおける真の極値なのか、など)。
2) レンジの lookback window を選ぶ
n を lookback の長さ(しばしば %K の period と呼ばれます)とします。直近 n 期間について、次を計算します:
- Highest High (HHn) = ウィンドウ内の High の最大値。
- Lowest Low (LLn) = ウィンドウ内の Low の最小値。
3) %K(生のストキャスティクス)を計算する
C を、現在のタイムステップにおける最新の Close とします。生のストキャスティクス %K は次の通りです:
%K = 100 × (C − LLn) / (HHn − LLn)
解釈:
- C が LLn に等しい場合、%K = 0。
- C が HHn に等しい場合、%K = 100。
- C がその間にある場合、%K は通常のデータ条件のもとで 0 から 100 の範囲に収まります。
4) %D(平滑化されたストキャスティクス)を計算する
m を %D の平滑化期間(しばしば %D の period と呼ばれます)とします。一般的な方法は、直近の %K 値の移動平均を取ることです:
%D = MovingAverage(%K, m)
移動平均の種類が重要です:
- ある実装では 単純移動平均(SMA) を使います。
- 別の実装では 指数移動平均(EMA) や別の平均を使います。
独立して検証可能な結果が欲しい場合は、期間の長さ m と、特定の移動平均メソッドの両方を一致させる必要があります。
5) 端のケース(エッジケース)の扱い
正しい計算のために押さえておくべき実務上のエッジケースが2つあります:
- スタートアップ・バー:最初の n−1 期間では、HHn と LLn を計算するのに十分な履歴がない可能性があります。
- ゼロ・レンジ:もし HHn − LLn = 0(たとえば、ウィンドウ内で high と low が同一の場合)なら、分数は未定義です。実装によって扱いは異なります(たとえば、欠損値を出力する、ある値を強制的に定義する、など)。検証時には、この状況をあなたの方法がどう扱うか確認してください。
証拠または例(明示的な前提つき)
ここでは、式がどのように機能するかを示す小さな数値例を示します。前提:
- lookback window n = 5 期間。
- 現在のタイムステップでの値を計算しています。
- 計算された LLn と HHn は直近の 5 期間に基づいています。
- 簡単のため、まずは生の %K だけを計算します。
直近の 5 期間が次を生むと仮定します:
- LLn = 1.1000(ウィンドウ内の最も低い Low)
- HHn = 1.1200(ウィンドウ内の最も高い High)
- 現在の Close C = 1.1150
すると:
- HHn − LLn = 1.1200 − 1.1000 = 0.0200
- C − LLn = 1.1150 − 1.1000 = 0.0150
よって:
- %K = 100 × 0.0150 / 0.0200 = 75
%D を計算するには、次に直近 m 期間分の %K 値を作り、選択した移動平均を適用します。検証のために、選んだ m と、実装が SMA、EMA、または別の平均を使うかを書き留めてください。そうしないと、生の %K が同じでも %D は異なり得ます。
制限とリスク(計算に焦点)
1) パラメータとデータ頻度への感度
lookback の長さ n と、%D の平滑化設定 m は、指標の反応性を直接変えます。短いウィンドウは直近の動きに対して %K がより速く反応しやすく、一方で長いウィンドウは一般にレンジの文脈をより滑らかにします。
また、異なるタイムフレーム(たとえば 5分足と日足)を使うと、「high」「low」「close」が何を意味するかが変わり、その結果 HHn、LLn、そして %K も変わります。
2) high/low レンジの挙動への依存
ストキャスティクス・オシレーターはトレンドを直接測っているわけではありません。直近レンジの中で終値がどこに位置しているかを測ります。市場が狭いレンジ、または値動きの荒い(チャッピーな)帯で動く場合、high–low レンジが小さくなり、%K がバーごとに不安定に見えることがあります。
3) 定数レンジ条件での未定義または誤解を招く値
もし HHn − LLn = 0 なら、%K は数学的に未定義です。実装が何らかの形で値を埋めたとしても、その結果の数値が意味のある情報を持つとは限りません。
4) 平滑化の選択が比較可能性に影響する
%D は移動平均の種類と期間長に依存するため、2つのプラットフォームで生の %K が一致していても、%D の線は異なる表示になる可能性があります。独立して検証するには、指標名だけでなく、あなたの全設定を比較してください。
検証と次の質問
自分自身のストキャスティクス・オシレーター計算を独立して検証するには:
- パラメータ n(lookback)と m(平滑化)を固定します。
- 各タイムステップで、定義通りに LLn と HHn を正確に計算します(Low のローリング最小値、High のローリング最大値を n 期間で行う)。
- %K = 100 × (C − LLn) / (HHn − LLn) を適用します。
- ツールが使っているのと同じ移動平均メソッドと期間長で %D を計算します。
さらに進めたい場合、次の有用なステップは、%K と %D の挙動が指標設定によってどう変わるかを比較すること、または移動平均の定義が異なると平滑化された線がどう変わるかを確認することです:
- /forex-indicators/momentum-indicators/stochastic-oscillator/how-do-settings-change-stochastic-oscillator/
- /forex-indicators/momentum-indicators/stochastic-oscillator/what-can-signals-from-stochastic-oscillator-mean/