一、CCI指标的基本原理
CCI(Commodity Channel Index,商品通道指标)由Donald Lambert于1980年开发,最初用于判断商品期货的周期性转折,后来被广泛应用于股票、外汇、加密货币等市场。

CCI的核心公式:
CCI = (Typical Price - MA_TP) / (0.015 × Mean Deviation)

其中:
- Typical Price(TP)= (高 + 低 + 收)/3
- MA_TP = TP的N周期简单移动平均(常见周期14)
- Mean Deviation = TP与MA_TP的平均绝对偏差
- 0.015是Lambert设定的常数,使约70%-80%的CCI值落在-100~+100之间
CCI的本质意义:
- 衡量价格相对于“正常波动区间”的偏离程度
- 当CCI > +100,价格显著高于近期平均,属于“超买”状态
- 当CCI < -100,价格显著低于近期平均,属于“超卖”状态
- 极端值(>200或<-200)通常预示短期动量过激,可能反转
二、为什么单纯的CCI超买超卖信号容易失效?
大多数教科书教的“CCI>100卖、CCI<-100买”在震荡市非常有效,但在单边趋势中会持续失效:
- 强多头趋势中,CCI可能长期维持在+150以上,不断触发“超买”假信号
- 强空头趋势中,CCI可能长期维持在-150以下,不断触发“超卖”假信号
因此,专业交易者很少单独使用CCI,必须加入趋势过滤。
三、信号核心逻辑拆解
核心算法:
开多条件:CCI < 120 + EMA差值 > 1200 + 当前无空仓
开空条件:CCI > 150 + EMA差值 > 1200 + 当前无多仓
CCI阈值的不对称设计(<120开多,>150开空)
- 多头趋势通常比空头趋势更持久、更强劲(行为金融学中的“上涨缓慢下跌迅速”现象)。
- CCI跌破120才允许开多,说明你接受多头趋势中CCI可以更高、更久;
- CCI超过150才允许开空,说明你对空头超买更敏感,防止在弱势反弹中被套。
- 这种不对称本身就是对市场真实偏度的尊重。
EMA差值 > 1200 的趋势过滤
- 假设你用的是长短周期EMA之差(比如EMA14 - EMA60,或者EMA20 - EMA100等)
- 差值 > 1200(点数)代表长期多头趋势已经非常明确,价格远远脱离长期均线。
- 这相当于一个“趋势强度+趋势持续性”的双重过滤:
- 差值大 → 趋势强
- 差值持续扩大 → 趋势仍在加速
- 在这种背景下,CCI的回撤就不再是反转信号,而是趋势中的正常回调。
当前无仓的单向持仓逻辑
- 避免多空双向持仓,降低手续费和风险
- 符合“让利润奔跑,及时止损”的经典原则
四、信号效果

(图 OKX - BTCUSDT 永续合约 1小时周期)
五 、 脚本源码
// @version=2
// CCI指标计算
cciValue = cci(close, 20, 'MA')
// EMA指标计算
ema14 = ema(close, 14)
ema60 = ema(close, 60)
_ema = abs(ema14 - ema60)
// === 仓位状态变量 ===
var long_count = 0
var short_count = 0
var long_price = nan
var short_price = nan
// === 信号条件定义 ===
// 开多条件:CCI < 120 ,EMA差值 > 1200,当前无空仓
entry_long_signal = cciValue < 120 and _ema > 1200 and long_count == 0
// 开空条件:CCI > 150, EMA差值 > 1200,当前无多仓
entry_short_signal = cciValue > 150 and _ema > 1200 and short_count == 0
// 平多条件:当前持有多仓,且满足开空条件
exit_long_signal = long_count == 1 and cciValue > 150 and _ema > 1200
// 平空条件:当前持有空仓,且满足开多条件
exit_short_signal = short_count == 1 and cciValue < 120 and _ema > 1200
// === 平仓操作(必须先于开仓) ===
// 平多
exitShortPercent(exit_long_signal, id = 'exitLong1',price='market', percent=100)
if exit_long_signal
long_count := 0
long_price := nan
// 平空
exitShortPercent(exit_short_signal, id = 'exitShort1',price='market', percent=100)
if exit_short_signal
short_count := 0
short_price := nan
// === 开仓操作 ===
// 开多
enterLongAmount(entry_long_signal, id='enterLong1', price='market', amount=1)
if entry_long_signal
long_count := 1
long_price := close
// 开空
enterShortAmount(entry_short_signal, id='enterShort1', price='market', amount=1)
if entry_short_signal
short_count := 1
short_price := close
// === 绘图标记 ===
plotText(entry_long_signal, title='多', text = '多', refSeries = low, bgColor='green', color='white', fontSize=11, placement='bottom' ,display=true)
// 开空图标
plotText(entry_short_signal, title='空', text = '空', refSeries = high, bgColor='red', color='white', fontSize=11, placement='top' ,display=true)
// === 预警设置 ===
alertcondition(entry_long_signal, title='开多信号', direction='buy')
alertcondition(entry_short_signal, title='开空信号', direction='sell')
alertcondition(exit_long_signal, title='平多信号', direction='sell')
alertcondition(exit_short_signal, title='平空信号', direction='buy')
六、总结
这套不对称CCI + EMA差值系统,本质就是八个字——“顺超级势,回调敢干”。
它不追求每天都有信号,也不追求抓顶抓底,它只做最确定、最肥、最舒服的那几波:
牛市里把“高位震荡”当成上车点,熊市里把“绝望反弹”当成逃命区。
用机械条件把情绪彻底剔除,用120和150的不对称阈值尊重了市场的真实偏度,用1200点的强趋势过滤把90%的震荡市直接扔进垃圾桶。
真正属于你的系统,一定是你跑过几轮牛熊、挨过几次爆仓、改过几十版参数之后,才最终沉淀下来的那一个。
祝我们都能在2026年的下一轮大行情里,把利润拿到手软。
免责声明:本文章仅代表作者个人观点,不代表本平台的立场和观点。本文章仅供信息分享,不构成对任何人的任何投资建议。用户与作者之间的任何争议,与本平台无关。如网页中刊载的文章或图片涉及侵权,请提供相关的权利证明和身份证明发送邮件到support@aicoin.com,本平台相关工作人员将会进行核查。



