一、CCI(顺势指标)简介
CCI(Commodity Channel Index,商品通道指数) 是由著名技术分析师Donald Lambert于1980年提出的一种技术分析工具。CCI原本用于商品市场的分析,但由于其对价格波动的高敏感性,后来被广泛应用于股市、期货、外汇等金融市场。CCI的核心作用是通过衡量当前价格与一段时间内的平均价格的偏离程度,来判断市场的超买和超卖状况,从而提供买卖信号。
二、CCI的计算公式
CCI指标的计算基于一个周期内的典型价格(Typical Price,TP),然后通过这个典型价格与其移动平均值的差异来计算。具体的计算公式如下:
- 典型价格(TP):

2. CCI公式:

- MA(TP):TP的移动平均值,通常使用的是N日简单移动平均(SMA)。
- Mean Deviation:TP值与其移动平均值的偏差的平均值。
- 0.015:是一个常数,用于标准化CCI的数值范围,通常将CCI控制在-100到+100之间。
三、CCI的应用
CCI作为一个趋势跟踪指标,主要用于以下几个方面:
1. 判断超买和超卖
- 超买区:当CCI大于+100时,说明市场可能过度上涨,存在回调的风险,通常会被视为卖出信号。
- 超卖区:当CCI小于-100时,说明市场可能过度下跌,存在反弹的潜力,通常会被视为买入信号。
2. 趋势反转信号
CCI在-100和+100之间波动,当CCI从负值区(例如-150以下)反转上升并突破-100时,可能表示市场开始出现上行趋势,适合寻找买入机会;反之,当CCI从正值区(例如+150以上)反转下降并突破+100时,可能表示市场开始出现下行趋势,适合寻找卖出机会。
3. CCI的平行性和背离
- CCI平行:如果CCI持续在某一高位(例如+200以上)或者低位(例如-200以下),则表明市场处于强势状态,适合跟随趋势交易。
- 背离:如果价格创出新高而CCI未能创出新高,或者价格创出新低而CCI未能创出新低,这种情况叫做“背离”,通常是趋势反转的先兆。
四、CCI的常用周期
CCI的周期一般使用14日,和RSI等指标一样,14日周期被广泛使用,因为它能有效捕捉到市场的短期波动。而根据具体市场的特性,也可以调整周期,适应不同的交易策略。较短的周期会增加CCI的波动性,适合短线交易;较长的周期则更能反映长期趋势。
五、在通达信中的实现
在通达信中,CCI指标可以通过简单的公式来实现。具体的代码如下:
CCI: (CLOSE - MA(TYPICALPRICE, 14)) / (0.015 * MD(TYPICALPRICE, 14));
TYPICALPRICE: (HIGH + LOW + CLOSE) / 3;
MD: (ABS(TYPICALPRICE - MA(TYPICALPRICE, 14))) / 14;
上述公式中:
TYPICALPRICE
是计算出来的典型价格;MA(TYPICALPRICE, 14)
是典型价格的14日简单移动平均;MD(TYPICALPRICE, 14)
是典型价格与其14日移动平均的绝对偏差。
六、用Python实现CCI指标
利用Python的Pandas和Numpy库,我们可以轻松地计算CCI指标。下面是实现CCI的Python代码:
import pandas as pd
import numpy as np
def calculate_cci(data, n=14):
"""
计算CCI(顺势指标)
:param data: 包含数据的DataFrame,必须包含'High', 'Low', 'Close'列
:param n: 计算CCI的周期,默认为14
:return: 包含CCI值的Series
"""
# 计算典型价格
data['TP'] = (data['High'] + data['Low'] + data['Close']) / 3
# 计算典型价格的移动平均
data['MA_TP'] = data['TP'].rolling(window=n).mean()
# 计算典型价格与其移动平均的偏差
data['MD'] = data['TP'].rolling(window=n).apply(lambda x: np.mean(np.abs(x - np.mean(x))), raw=False)
# 计算CCI
data['CCI'] = (data['TP'] - data['MA_TP']) / (0.015 * data['MD'])
return data['CCI']
# 示例数据(包含'High', 'Low', 'Close'列)
data = {
'High': [130, 132, 133, 135, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156],
'Low': [128, 130, 131, 132, 134, 136, 137, 139, 141, 143, 145, 147, 149, 151, 153],
'Close': [129, 131, 132, 134, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155]
}
df = pd.DataFrame(data)
# 计算CCI指标
df['CCI'] = calculate_cci(df, n=14)
# 输出结果
print(df[['High', 'Low', 'Close', 'CCI']])
代码解析:
- 典型价格(TP)的计算方式是
(High + Low + Close) / 3
,即每个交易日的三个价格(最高价、最低价和收盘价)取平均值。 - 使用
rolling(window=n)
方法计算典型价格的n日移动平均(MA_TP)。 - 使用
apply()
函数计算典型价格与其移动平均值之间的偏差(MD)。 - 最后使用公式计算CCI值,
CCI = (TP - MA(TP)) / (0.015 * MD)
。
七、CCI的应用实例
在实际操作中,CCI可以通过以下几种方式应用:
- 超买超卖信号:
- CCI > +100时,表示市场可能超买,可以考虑卖出。
- CCI < -100时,表示市场可能超卖,可以考虑买入。
- 趋势反转信号:
- CCI从负值区反转并突破-100时,通常预示着上涨趋势的开始。
- CCI从正值区反转并突破+100时,通常预示着下跌趋势的开始。
- 背离信号:
- 如果价格创新高,但CCI未创新高,则可能表示价格即将反转下跌。
- 如果价格创新低,但CCI未创新低,则可能表示价格即将反转上涨。
八、总结
CCI(顺势指标)是一个非常有效的市场趋势判断工具,通过计算当前价格与一定周期内的典型价格偏差,帮助投资者识别市场的超买、超卖情况和趋势反转信号。通过通达信和Python编程,我们能够轻松实现CCI指标,并应用于各种金融市场的技术分析中。结合其他技术指标,CCI可以为投资者提供更加全面的市场判断依据,帮助他们做出更为准确的投资决策。