Kamaはどのように計算されるか?
直接的な回答
Kamaは通常、変動する自己調整型の移動平均として計算されます。最も一般的な形式では、各新しいKama値は、以下の3つを使用します。
- 前回のKama値
- 時間とともに変化する平滑化係数
- 現在の価格
その平滑化係数は、最近の見直し期間内で価格がどれだけ「効率的に」動いたかに依存します。これは、通常、価格の純粋な変化と総絶対変化の比率として測定されます。
異なる名前やバリエーションが実践されているため、使用しているものを確認する最も安全な方法は、インジケーター設定で正確な定義を確認することです(例えば、見直し期間と平滑定数)。以下の計算は、広く使用されている安定した構造を示しています。プラットフォームのKamaが異なるパラメータ名や少し異なる効率公式を使用している場合、機械的な手順は似ていますが、定数は異なる場合があります。
メカニズムと定義
このメカニズムを説明する実用的な方法は、再帰的な平滑化プロセスとして説明することです。
- 入力価格シリーズの選択 Kamaは、時間系列の価格から計算されます。価格は異なる方法で定義できます(例えば、終値、典型価格、または他の派生シリーズ)。入力の選択は、再現したい実装と一致させる必要があります。
P[t]を時間tの選択された価格とします。
- 見直しウィンドウと平滑化境界の設定 典型的なKamaでは以下が使用されます。
- 見直し期間:N(効率を判断するために使用される期間数)
- 速い平滑化設定:通常、小さな「速い」期間または定数で表されます
- 遅い平滑化設定:通常、大きな「遅い」期間または定数で表されます
多くの実装では、平滑化境界は2つの定数に変換されます。
- SC_fastとSC_slowは、速いと遅い期間から導かれます
正確なマッピングは実装によって異なります。一般的なアプローチでは、指数平滑化スタイルの定数が使用されます。
- SC_fast = 2 / (fastPeriod + 1)
- SC_slow = 2 / (slowPeriod + 1)
- 最後のN期間における効率比率の計算 見直しウィンドウでは、2つの量が比較されます。
- 純粋な変化:|P[t] − P[t−N]|
- 絶対移動の合計:sum_{i=0..N−1} |P[t−i] − P[t−i−1]|
次に、効率比率ERは以下のように計算されます。
- ER = netChange / sumAbsMoves
このERは、ウィンドウ内の「行ったり来たり」の動きの量に対して、価格が強く始点から終点まで動いたときに高く設計されています。ERが0に近い場合、価格は混乱しています。ERが1に近い場合、価格はより直接的に動いています。
実装が明示的に処理する詳細:sumAbsMovesが0の場合(例えば、ウィンドウ全体で価格が変わらない場合)、ERは0に設定されるか、ゼロ除算を避けるために処理されます。ソースで使用されている同じルールを複製する必要があります。
- 効率比率を動的平滑定数に変換 次に、ERと平滑化境界を使用して、変動する平滑定数SC[t]が計算されます。一般的な構造は以下の通りです。
- SC[t] = (ER × (SC_fast − SC_slow) + SC_slow)^2
指数(通常は2)は、一般的に使用される形式の一部です。実装で異なる指数が使用されている場合、同じものを使用する必要があります。
- Kamaの再帰的な更新 最後に、Kamaは以下のように更新されます。
- Kama[t] = Kama[t−1] + SC[t] × (P[t] − Kama[t−1])
この形式は、SC[t]に依存する量で現在の価格に「引き寄せる」ようにKamaをします。SCが大きいほど調整が速くなり、SCが小さいほど調整が遅くなります。
- 初期化 Kamaには、初期開始値Kama[0](またはインデックスによってはKama[N−1])が必要です。多くの実装では、Kamaを最初に利用可能なポイントの価格または単純移動平均で初期化します。計算を独立して確認する場合は、テストしているインジケーター定義から正確な初期化ルールを確認してください。
証拠または例(明示的な仮定付き)
以下は、明示的な仮定を使用した小さな数値のウォークスルーです。これはライブ市場データではありません。自分のシリーズで繰り返しできる計算構造を示しています。
例の仮定:
- 入力価格Pは終値です。
- 見直し期間N = 3。
- fastPeriod = 2, slowPeriod = 30、したがって:
- SC_fast = 2/(2+1) = 0.666666…
- SC_slow = 2/(30+1) = 0.064516…
- SC[t]の指数は2です。
- 前回のKama値はKama[t−1] = 100です。
時間tで以下の値を想定します。
- P[t−2] = 99
- P[t−1] = 101
- P[t] = 100
ステップA:netChange
- netChange = |P[t] − P[t−N]| = |100 − 99| = 1
ステップB:sumAbsMoves N = 3の場合、|P[t]−P[t−1]| + |P[t−1]−P[t−2]| + |P[t−2]−P[t−3]|が必要です。しかし、マイニシリーズには2つの前回の価格しか表示されていません。デモンストレーションを一貫させるために、ウィンドウを拡張してP[t−3]を含めます。
P[t−3] = 98とします。 次に計算します。
- |P[t] − P[t−1]| = |100 − 101| = 1
- |P[t−1] − P[t−2]| = |101 − 99| = 2
- |P[t−2] − P[t−3]| = |99 − 98| = 1
- sumAbsMoves = 1 + 2 + 1 = 4
ステップC:ER
- ER = netChange / sumAbsMoves = 1 / 4 = 0.25
ステップD:動的平滑定数
- SC[t] = (ER × (SC_fast − SC_slow) + SC_slow)^2 まず(SC_fast − SC_slow)を計算します。
- 0.666666… − 0.064516… = 0.602150… 次に線形項:
- ER × (SC_fast − SC_slow) + SC_slow = 0.25 × 0.602150… + 0.064516… = 0.150537… + 0.064516… = 0.215053… これを2乗します。
- SC[t] ≈ (0.215053…)^2 ≈ 0.0463
ステップE:Kamaの更新
- Kama[t] = Kama[t−1] + SC[t] × (P[t] − Kama[t−1]) = 100 + 0.0463 × (100 − 100) = 100
この構成された例では、現在の価格が前回のKamaと等しいため、更新はゼロです。P[t]がKama[t−1]と異なる場合、SC[t]でスケーリングされた非ゼロ調整が見られます。
この例がアイデアを示す理由:ERが増加すると(価格がN期間でより直接的になる)、SC[t]はSC_fastに近づく傾向があり、Kamaの反応が速くなります。ERが減少すると(混乱した動き)、SC[t]はSC_slowに近づく傾向があり、Kamaがより平滑化されます。
制限とリスク
-
パラメータ不一致 KamaはN、速い/遅い設定、およびエッジケース(ゼロ除算など)の扱いと指数に依存します。インジケーターから正確なパラメータマッピングをコピーしない場合、異なる値を再現します。
-
入力価格の定義 異なるプラットフォームでは「価格」を異なる方法で定義しています。1つは終値を使用し、もう1つは派生価格(例えば、高値/安値/終値の平均)を使用する場合、全出力シリーズが変わります。