CMOの計算方法(計算式、入力、検証)
直接の答え:CMOはどのように計算されるか
CMO(Chande Momentum Oscillator)は、固定されたlookbackウィンドウの中で、直近の上昇の変化の合計(“gains”)と直近の下落の変化の合計(“losses”)を比較し、その比較をオシレーター値に変換することで計算されます。
一般的な表現は次のとおりです:
CMO = 100 × (SumGains − SumLosses) / (SumGains + SumLosses)
ここで:
- SumGainsは、lookback期間における正の価格変化の合計です。
- SumLossesは、lookback期間における負の価格変化の絶対値の合計です。
これにより、分母がゼロでない限り、値は通常−100〜+100の範囲になります。
仕組み:入力を定義し、手順を追って計算する
1) lookback lengthを選ぶ
整数のlookback lengthを選びます。通常Nと表します。この計算は、ある時点で系列の直近N個の「価格→価格」の変化を使います。
検証のための前提:比較可能にするには、CMOを計算するたびに同じNを使う必要があります。
2) 価格系列を選ぶ
CMOは、価格の時系列から計算されます。価格は複数の方法で定義できます(たとえば終値など)が、どれを使うにせよ一貫している必要があります。
例としての前提:以下の計算では、単一の価格系列P(t)を使い、ある時点から次の時点への変化を定義します。
3) 各ステップの価格変化を計算する
lookbackウィンドウ内の各時点iについて、変化を計算します:
- ΔP(i) = P(i) − P(i−1)
次に、この変化を2つの成分に分けます:
- Gain(i) = ΔP(i)(ただしΔP(i) > 0のとき)、それ以外は0
- Loss(i) = −ΔP(i)(ただしΔP(i) < 0のとき)、それ以外は0
符号の取り扱いに注意:lossは正の大きさとして保存されます。
4) lookbackウィンドウでgainsとlossesを合計する
- SumGains = Σ Gain(i)(直近Nステップについて)
- SumLosses = Σ Loss(i)(直近Nステップについて)
5) オシレーターの式を適用する
計算します:
- CMO = 100 × (SumGains − SumLosses) / (SumGains + SumLosses)
重要:SumGains + SumLosses = 0の場合、ゼロで割ることになるため、オシレーターは数学的に未定義です。実装によっては、空欄にする、特定の値を割り当てるなど、異なる扱いをすることがあります。独立した検証をしたい場合は、ゼロ分母のケースであなたの方法が正確にどう処理するかを確認してください。
証拠または例:小さな数値のウォークスルー
N = 4とし、連続する時点で次の値を持つ価格系列Pを使うと仮定します:
- P(0)=100, P(1)=102, P(2)=101, P(3)=103, P(4)=103
ステップ1:直近4ステップの変化を計算します:
- ΔP(1)=102−100=+2 → Gain=2, Loss=0
- ΔP(2)=101−102=−1 → Gain=0, Loss=1
- ΔP(3)=103−101=+2 → Gain=2, Loss=0
- ΔP(4)=103−103=0 → Gain=0, Loss=0
ステップ2:gainsとlossesを合計します:
- SumGains = 2 + 0 + 2 + 0 = 4
- SumLosses = 0 + 1 + 0 + 0 = 1
ステップ3:CMOを計算します:
- CMO = 100 × (4 − 1) / (4 + 1)
- CMO = 100 × 3/5
- CMO = 60
計算の意味:選択したウィンドウでは、合計のgainsが合計のlossesを上回るため、ネットの方向性は正になります。
制限とリスク:何がうまくいかず、なぜ変わるのか
1) gainsとlossesが両方ゼロのときの未定義または不安定な値
lookbackウィンドウの間に価格が一度も上がらず下がらない(すべての変化がゼロ)場合、SumGains = 0かつSumLosses = 0となり、分母がゼロになります。異なるプラットフォームでは、表示される出力が異なる場合があります。これは独立したチェックにおける重要な失敗モードです。
2) 入力価格の定義方法への感度
CMOの値は、選択した価格系列に依存します(たとえば終値と、別の一貫した価格定義)。「lookback」と式が同じでも、別の入力系列を使うと、計算されるgainsとlossesが変わり得ます。
3) lookback length(N)への感度
Nを変えると、どの過去の変化を含めるかが変わるため、CMOはシフトします。長いウィンドウはより多くのステップを集約して変動をなめらかにし、短いウィンドウは直近の変化により反応します。これは式の問題ではありませんが、チャート間の比較可能性に影響します。
4) 将来の値動きを保証するものではない
CMOは固定されたウィンドウ内の過去の変化を要約します。CMOにおける過去のパターンは、将来の方向性がそれに従うことを示しません。コスト、執行の違い、そして市場レジームの変化は、特定のオシレーター読みに続いた後に価格がどう振る舞うかをすべて変え得ます。
5) データとサンプリングの違い
異なるタイムフレームからCMOを計算する(または時点の作り方が異なるデータから計算する)場合、ΔPの集合が変わり、それによってCMOも変わります。
検証と次の質問:自分の計算をどう確認するか
CMOを正しく計算できているかを独立して検証するには:
- 価格定義(どの系列を使ったか)とlookback length Nを確認します。
- ウィンドウ内の各ステップについてΔP(i)を再計算します。
- 同じ符号ルールを使って、各ΔPをGainとLossの大きさに分けます。
- gainsとlossesを合計し、分母(SumGains + SumLosses)がゼロでないことを確認します。
- CMO = 100 × (SumGains − SumLosses) / (SumGains + SumLosses) を適用します。
次に考えるべき質問:「CMOの設定は、その挙動をどのように変えますか?」これはNと価格系列の選択に行き着きます。どちらも、gains/lossesの合計に直接影響します。
DOCUMENT END