CCI / ウィリアムズ%R
CCI とウィリアムズ%R は、RSI やストキャスティクスとは異なる算出ロジックで過熱と売られすぎを別系統から確認する補助オシレーターです。両者とも RSI やストキャスティクスと似ているが違う指標であり、単体に依存せず、複数指標の一致(confluence)を確認する用途に向きます。

架空データによるイメージ図(実際の相場データではありません)。中段が CCI(±100)、下段がウィリアムズ%R(−20 / −80)の例。
CCI(Commodity Channel Index)
定義
CCI は Donald Lambert が 1980 年に Commodities 誌で発表しました。もともとサイクル性のある商品市場向けに設計され、平均からの乖離を統計的に正規化します。
- TP(Typical Price):高値、安値、終値の平均(中央価格)
- MAD(Mean Absolute Deviation):平均絶対偏差(標準偏差ではない)
- 0.015:Lambert が実証的に選んだ定数。CCI がおよそ ±100 内に約 70-80% 収まるように調整
- 標準は
CCI の 0.015 は Lambert の実験値です。統計理論から出るものではないため、他の指標と設計思想が異なります。
性質
- 範囲:理論上は無限。実際には -300 から +300 に収まることが多い
- 中心:0(プラス圏は平均より高い、マイナス圏は平均より低い)
- ±100:Lambert の閾値。過熱、売られすぎ判定の目安
- ±200:強い過熱、売られすぎ
- 符号変化:トレンド転換の初期兆候
パラメータと期間
| パラメータ | 標準 | 意味 |
|---|---|---|
| 20 | 期間 | |
| 分母定数 | 0.015 | Lambert 経験値 |
| 閾値 | ±100 | 過熱 / 売られすぎ |
| 強閾値 | ±200 | 極端値 |
| 価格 | TP (H+L+C)/3 | 中央価格 |
シグナル
- CCI > +100:過熱。売り候補(レンジ相場)
- CCI < -100:売られすぎ。買い候補(レンジ相場)
- CCI > +100 継続:強トレンド継続。逆張りは避ける(バンドウォーク相当)
- CCI < -100 継続:強下落トレンド継続
- 0 の上下抜け:トレンド転換の初期
- CCI > +200 からの反落:強い過熱後の反落で、短期の売り
- ダイバージェンス:価格が新高値、CCI は新高値なしで、上昇勢いの減衰
ウィリアムズ%R
定義
Larry Williams が 1973 年に発表しました(書籍 How I Made One Million Dollars Last Year Trading Commodities)。ストキャスティクス %K の逆スケール版です。
- 範囲:-100 から 0
- 標準は
- ストキャスティクス %K = 100 + ウィリアムズ%R(完全に逆スケール)
- ウィリアムズ%R が 0 なら終値は過去 N 期間の高値
- ウィリアムズ%R が -100 なら終値は過去 N 期間の安値
なぜストキャスティクスではなくウィリアムズ%R を使うのか
- スケールが -100 から 0 で、負の値として直感的に解釈できる
- 一部トレーダーが好むだけで、情報量はストキャスティクス %K と等価
- 実用上は、ストキャスティクスを見ている人と別のトレーダーが見ているという差別化以外の意味は薄い
パラメータと期間
| パラメータ | 標準 | 意味 |
|---|---|---|
| 14 | 期間 | |
| 閾値 | -20 / -80 | 過熱 / 売られすぎ |
| 価格 | H/L/C | 高値、安値、終値 |
Larry Williams 自身は 14 期間を推奨しましたが、彼の著書 Long-Term Secrets to Short-Term Trading では 10 期間も使われます。
シグナル
- ウィリアムズ%R > -20:過熱ゾーン(ストキャスティクス %K > 80 相当)
- ウィリアムズ%R < -80:売られすぎゾーン(ストキャスティクス %K < 20 相当)
- -50 の上下抜け:中心線抜け(勢いの変化)
- 過熱ゾーンからの反落:短期売りシグナル
- 売られすぎゾーンからの反発:短期買いシグナル
オシレーター 4 兄弟の比較
RSI、ストキャスティクス、CCI、ウィリアムズ%R の位置付けです。
| 指標 | 範囲 | 過熱 | 売られすぎ | 平滑法 | 主要用途 |
|---|---|---|---|---|---|
| RSI | 0-100 | 70+ | 30- | Wilder (α=1/n) | 過熱、ダイバージェンス、汎用 |
| ストキャスティクス %K | 0-100 | 80+ | 20- | SMA (K/D smoothing) | レンジ逆張り、反応速い |
| CCI | 無限 | +100+ | -100- | SMA/MAD | サイクル、トレンド初期の 0 抜け |
| ウィリアムズ%R | -100-0 | -20 以上 | -80 以下 | なし (raw scale) | ストキャスティクスの逆版、ノイズ多い |
情報の重複
- ストキャスティクス %K とウィリアムズ%R は数学的にほぼ同じ(逆スケール)
- RSI と CCI は違う系統(RSI は上下変動比、CCI は平均乖離)
- 4 つ同時に見る意味は薄い。RSI、ストキャスティクス、CCI かウィリアムズ%R の 3 つで十分
confluence 判定
- 4 つのうち 3 つ以上が同じ方向で過熱:強い一致
- 2 つだけ:弱い一致
- 1 つだけ:ノイズの可能性
USD/JPY での使いどころ
RSI とストキャスティクスでは拾えない局面
CCI は商品市場のサイクル性を前提に設計されているため、通貨ペアの週次、月次サイクルにも部分的に応用されます。
- 月次サイクル(10-20 営業日)の頂点、底
- 日足 CCI > +100 が 3-5 日続く:週次過熱
- 日足 CCI < -100 が 3-5 日続く:週次売られすぎ
ウィリアムズ%R の使い所は限定的
ストキャスティクス %K があるなら、ウィリアムズ%R は情報が等価で不要です。ただし例外があります。
- 一部プラットフォームでウィリアムズ%R しかない場合の代替
- ストキャスティクスを使っているトレーダーの逆張りとして、ウィリアムズ%R を意識するトレーダー層があるとされるが、実証は薄い
東京仲値(JST 09:55)
- 5分 CCI は仲値急変で ±200 到達も頻繁
- 過熱判定は形骸化するため、CCI 単体判断はしない
- 15分 CCI を上位足フィルタとして使う
ロンドンオープン(JST 16:00)、NYオープン(JST 22:30)
- ブレイク時に CCI が +100 を超えて継続するとバンドウォーク相当
- CCI の 0 抜けは方向転換の初期兆候
- 指標発表直後は CCI が極端値(±300 超)をつけることがある。ノイズ扱い
スイングでの CCI 活用
- 日足 CCI > +200 から下抜けて +100 割れ:週次高値からの反落開始
- 日足 CCI < -200 から上抜けて -100 上抜け:週次安値からの反発開始
- 週足 CCI は月次サイクルの目安(数か月に 1 回程度のシグナル)
落とし穴
- CCI と RSI、ストキャスティクスを混同しない:3 者は似ているが違う指標。同じ過熱でも計算式が違う。1 つが過熱でも他が過熱していないことは普通
- CCI の 0.015 定数を神秘化しない:Lambert の経験値。他の値でも使えるが、標準を変更すると閾値の意味(±100)が変わる
- CCI 無限範囲を誤解しない:100 / 200 は全部の期間で必ずそこに収まるではない。極端相場では 400 超もあり得る
- ウィリアムズ%R とストキャスティクス %K の重複に注意する:両方を独立指標として重ねると多重確認になる(実質同じ情報)。どちらか片方に絞る
- 強トレンドで逆張りしない:RSI と同様、CCI > +100 が続いてもトレンドは継続する。逆張りは ADX < 20 のレンジ確認とセット
- 短期化しすぎない:CCI のような短期はノイズが増大し、閾値が形骸化する
- 異なる時間足をミックスしない:5分 CCI と日足 CCI の同時判定は混乱の元。時間足別に用途を決める
- MAD の分母 0 に注意する:全く動きのない期間(連続同値)では MAD が 0 になり、CCI 計算が不能になる。実装で保護する
- ダイバージェンスを過信しない:CCI ダイバージェンスは反転する可能性を示すだけ。強トレンド下では機能しない
- 指標発表直後の CCI 急変に注意する:±300 超の極端値は情報というよりノイズ。指標後 30 分はシグナル判定を保留する
- 教科書シグナルの実データ有意性:CCI とウィリアムズ%R の単独検証は未実施だが、オシレーター系全般で単体の edge は薄いことが実証されている。補助 confluence 用途に限定する
Python 実装スケッチ
CCI
import numpy as npimport pandas as pd
def cci( high: pd.Series, low: pd.Series, close: pd.Series, n: int = 20, constant: float = 0.015,) -> pd.Series: tp = (high + low + close) / 3.0 sma = tp.rolling(window=n, min_periods=n).mean() mad = tp.rolling(window=n, min_periods=n).apply( lambda x: np.mean(np.abs(x - x.mean())), raw=True, ) return (tp - sma) / (constant * mad.replace(0.0, np.nan))apply の raw=True で NumPy 配列を渡し、パフォーマンスを維持します。MAD が 0 の期間は NaN 化します。
ウィリアムズ%R
def williams_r( high: pd.Series, low: pd.Series, close: pd.Series, n: int = 14,) -> pd.Series: highest = high.rolling(window=n, min_periods=n).max() lowest = low.rolling(window=n, min_periods=n).min() return -100.0 * (highest - close) / (highest - lowest)ストキャスティクス %K との等価変換は williams_r = stochastic_fast_k - 100 です。
confluence 判定
def oscillator_confluence( rsi: pd.Series, stoch_k: pd.Series, cci_val: pd.Series, wr: pd.Series,) -> pd.DataFrame: """4 オシレーターの過熱・売られすぎ一致数を集計。""" overbought = ( (rsi > 70).astype(int) + (stoch_k > 80).astype(int) + (cci_val > 100).astype(int) + (wr > -20).astype(int) ) oversold = ( (rsi < 30).astype(int) + (stoch_k < 20).astype(int) + (cci_val < -100).astype(int) + (wr < -80).astype(int) ) return pd.DataFrame({"overbought_count": overbought, "oversold_count": oversold})3 以上の一致で強い confluence として扱います。ただしストキャスティクス %K とウィリアムズ%R は情報が等価なので、実質は RSI、ストキャスティクス、CCI の 3 独立系統と考えます。
参考
- Donald R. Lambert, “Commodity Channel Index: Tool for Trading Cyclic Trends”, Commodities Magazine, October 1980
- Larry R. Williams, How I Made One Million Dollars Last Year Trading Commodities, Windsor Books, 1973
- Larry Williams, Long-Term Secrets to Short-Term Trading, Wiley, 1999 (2nd ed. 2011)
- Investopedia — “Commodity Channel Index (CCI)”
- Investopedia — “Williams %R”
- StockCharts — “CCI”
- StockCharts — “Williams %R”