Pharos
TAMomentum

TA.CCI()

商品通道指标 (Commodity Channel Index)

衡量价格偏离统计平均值的程度,识别异常价格和趋势变化。

语法

python
TA.CCI(high, low, close, timeperiod=14)

参数

参数名类型必选默认值说明
highany-最高价数组
lowany-最低价数组
closeany-收盘价数组
timeperiodany-时间周期,默认 14

返回值

返回 CCI 值数组,通常在 -200 到 +200 之间波动

计算方法

CCI = (TP - SMA(TP)) / (0.015 × MD)

其中:

  • TP (典型价格) = (High + Low + Close) / 3
  • MD (平均偏差) = 平均绝对偏差

信号解读

超买超卖

  • CCI > +100: 超买区域
  • CCI < -100: 超卖区域
  • CCI > +200: 极度超买
  • CCI < -200: 极度超卖

零轴穿越

  • CCI 上穿 0: 上升趋势开始
  • CCI 下穿 0: 下降趋势开始

背离

  • 顶背离: 价格新高,CCI 未新高
  • 底背离: 价格新低,CCI 未新低

基础示例

python
def main():
    records = exchange.GetRecords()
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    cci = TA.CCI(highs, lows, closes, 20)
    
    Log(f"CCI: {cci[-1]:.2f}")
    
    if cci[-1] > 100:
        Log("CCI 超买:", cci[-1])
    elif cci[-1] < -100:
        Log("CCI 超卖:", cci[-1])
    else:
        Log("CCI 正常区间:", cci[-1])

高级应用

1. CCI 趋势跟踪策略

python
def main():
    records = exchange.GetRecords()
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    cci = TA.CCI(highs, lows, closes, 20)
    
    # 零轴上方
    if cci[-1] > 0 and cci[-2] <= 0:
        Log("CCI 上穿零轴,上升趋势确认")
    
    # 零轴下方
    elif cci[-1] < 0 and cci[-2] >= 0:
        Log("CCI 下穿零轴,下降趋势确认")
    
    # 突破 +100
    if cci[-1] > 100 and cci[-2] <= 100:
        Log("CCI 突破 +100,强势上涨")
    
    # 跌破 -100
    elif cci[-1] < -100 and cci[-2] >= -100:
        Log("CCI 跌破 -100,强势下跌")

2. CCI 背离检测

python
def detect_cci_divergence(prices, cci_values, period=10):
    """检测 CCI 背离"""
    if len(prices) < period or len(cci_values) < period:
        return None
    
    # 顶背离
    if (prices[-1] > max(prices[-period:-1]) and 
        cci_values[-1] < max(cci_values[-period:-1])):
        return "顶背离"
    
    # 底背离
    if (prices[-1] < min(prices[-period:-1]) and 
        cci_values[-1] > min(cci_values[-period:-1])):
        return "底背离"
    
    return None

def main():
    records = exchange.GetRecords()
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    cci = TA.CCI(highs, lows, closes, 20)
    divergence = detect_cci_divergence(closes, cci, 10)
    
    if divergence == "顶背离":
        Log("CCI 顶背离,价格可能回调")
    elif divergence == "底背离":
        Log("CCI 底背离,价格可能反弹")

3. CCI 极值反转策略

python
def main():
    records = exchange.GetRecords()
    highs = [r['High'] for r in records]
    lows = [r['Low'] for r in records]
    closes = [r['Close'] for r in records]
    
    cci = TA.CCI(highs, lows, closes, 14)
    
    # 极度超卖后反转
    if cci[-2] < -200 and cci[-1] > -200:
        Log("CCI 从极度超卖区域反转,买入信号")
    
    # 极度超买后反转
    elif cci[-2] > 200 and cci[-1] < 200:
        Log("CCI 从极度超买区域反转,卖出信号")

参数优化建议

周期推荐参数特点
短线CCI(14)标准配置
中线CCI(20)较平滑
长线CCI(30)减少噪音

与其他指标配合

CCI + KDJ

python
cci = TA.CCI(highs, lows, closes, 20)
k, d = TA.STOCH(highs, lows, closes, 9, 3, 0, 3, 0)

# 双重超卖确认
if cci[-1] < -100 and k[-1] < 20:
    Log("CCI + KDJ 双重超卖")

CCI + BOLL

python
cci = TA.CCI(highs, lows, closes, 20)
upper, middle, lower = TA.BOLL(closes, 20, 2)

# 超卖 + 触及下轨
if cci[-1] < -100 and closes[-1] <= lower[-1]:
    Log("CCI超卖 + 布林下轨,强支撑位")

注意事项

⚠️ 重要提醒

  1. 无固定边界: CCI 没有固定的上下限,可能超过 ±200
  2. 趋势跟踪: CCI 既可用于超买超卖,也可用于趋势跟踪
  3. 周期选择: 较长周期更适合趋势判断
  4. 假突破: 震荡市场中容易出现假突破

相关指标

返回目录

← 返回动量指标目录