
摘要
拥挤指数(CI,Congestion Index)是一个用于判断市场当前处于趋势还是震荡状态的技术指标。其核心思想是通过比较一段时间内价格的实际涨跌幅与该段时间内的价格高低震荡区间,来衡量市场是否具有明确的方向性。当 CI 在 ±20 区间内运行时,通常表示市场处于震荡行情;当 CI 上穿 +20 时,可能预示上升趋势的启动;下穿 -20 时,则可能预示下跌趋势的开始。理解并应用这一指标,可以帮助交易者根据不同的市场状态选择更合适的技术分析工具与交易策略。
前言
在技术分析领域,几乎每一个交易系统都会反复遭遇同一个经典难题:
当前的市场,究竟是在走趋势,还是在横盘震荡?
如果对这个市场“状态”的判断出现偏差,那么即便你使用的是最经典、最有效的技术指标,也可能会频繁地遭遇信号失灵。
- 趋势指标(如均线、MACD)
👉 在震荡市里容易被反复“打脸”(whipsaw),产生大量虚假信号。
- 震荡指标(如 RSI、KDJ)
👉 在趋势市里往往过早地给出反向信号,导致你过早离场或逆势操作。
拥挤指数(Congestion Index, CI) 正是为解决这个根本性问题而设计的。它并不直接告诉你“买还是卖”,而是首先尝试回答一个更底层的问题:
市场当前是在“挤在一起来回震荡”,还是已经“开始朝某个方向持续运动”?
一、CI 的核心思想
Markos Katsanos 在其著作《Intermarket Trading Strategies》中将市场行为大致分为两类:
1️⃣ 趋势行情
- 价格在一段时间内,具有明显的方向性。
- 适合采用:均线系统、MACD、突破型策略等趋势跟踪工具。
2️⃣ 拥挤 / 震荡行情
- 价格在一个相对固定的区间内来回波动。
- 没有持续性的方向。
- 适合采用:RSI、随机指标(Stochastic)、基于超买超卖逻辑的区间交易策略。
问题的关键在于:大多数指标本身,并不擅长判断自己是否“应该被使用”。CI 的设计目标非常单一:
用一个数值,直观地衡量“价格的实际推进幅度”相对于其“潜在震荡区间宽度”的比例。
二、数学含义
CI 的基本逻辑可以用一句话概括:
在过去 N 个周期里,价格实际“走出去”的距离,占这段时间内价格所能“晃动”的总区间的多大比例?
情景一:
- 价格的实际变化幅度 很小。
- 但同期内的最高价与最低价 拉得很开。
👉 这说明价格在宽幅区间内来回折返,未能形成有效突破。
👉 这是典型的震荡市(Congestion)特征。
情景二:
- 价格的实际变化幅度 接近甚至超过了该时间段内的价格区间宽度。
👉 这说明价格在“单边推进”,有效脱离了之前的震荡区域。
👉 趋势正在形成。
三、原始公式
原书中的定义公式如下:
CI = 过去 D1-1 天的价格涨跌幅
÷
(过去 D1 天的最高价 - 最低价)/ 最低价
本质上,这是一个归一化的动量指标:
- 分子:代表价格“实际走了多远”(趋势强度)。
- 分母:代表这段时间里价格“理论上能晃多宽”(波动率)。
原书中给出的 MetaStock 平台实现代码如下:
D1:=Input("DAYS IN CONGESTION",1,500,15);
CI:=ROC(C,D1-1,%)/((HHV(H,D1)-LLV(L,D1))/(LLV(L,D1)+.01)+.000001);
Mov(CI,3,E)
代码解读:
ROC(C, D1-1, %):计算收盘价在过去 D1-1 日的百分比变动率。
HHV(H, D1) 和 LLV(L, D1):分别计算过去 D1 日内的最高价和最低价。
- 分母部分
(HHV(H,D1)-LLV(L,D1))/(LLV(L,D1)+.01)+.000001 用于计算归一化的价格区间宽度,其中的 +0.01 和 +0.000001 是为了防止除零错误的技术性处理。
Mov(CI,3,E):最后对计算出的 CI 值进行为期 3 日的指数移动平均(EMA)平滑,以滤除噪音。
✅ 这是一个典型的 “低波动 + 无趋势 = 拥堵” 识别指标,常用于寻找价格突破前的蓄势阶段。
四、脚本详解
下面我们使用更通用的 Pine Script(TradingView)语言来实现该指标,并穿插对应的图形化编程模块截图以便理解。
1️⃣ 指标声明

study("Congestion Index by Katsanos", overlay=false)
- 声明一个副图指标。
overlay=false 表示不叠加在主图K线上,CI 通常作为一个独立的振荡指标显示在下方窗口。
2️⃣ 参数:拥挤周期

D1 = input(15, title="Days in Congestion")
D1:这是判断市场是否“拥挤”的核心时间窗口。
- 默认值设为 15,这是一个偏短线和波段的常用参数,在 A 股等市场中也较为常见。
- 调整影响:
D1 值越大,判断越“稳重”,但信号发出会更滞后;值越小,则对市场状态变化更敏感,但也可能产生更多噪音。
3️⃣ 参数:平滑周期

Period = input(3, title="Moving Average")
- 此参数用于对原始 CI 值进行指数移动平均平滑。
- 默认值 3 是一个非常轻度的平滑,旨在减少毛刺干扰,同时不会过分掩盖指标的拐点信息。
4️⃣ CI 的核心计算公式

CI = roc(close, D1-1) /
((highest(high, D1) - lowest(low, D1)) /
(lowest(low, D1) + .01) + .000001)
让我们拆解这个公式:
(1)分子:roc(close, D1-1)
roc 即变动率(Rate of Change)。
- 它计算的是从
D1-1 个周期前到当前收盘价的涨跌百分比。
- 这代表了价格的“实际趋势推进力”。
(2)分母:归一化的价格震荡区间
(highest(high, D1) - lowest(low, D1)):计算过去 D1 个周期内的价格总震荡区间(最高价 - 最低价)。
/(lowest(low, D1) + .01):用同期的最低价进行归一化处理,目的是消除不同价位股票之间的尺度差异,使指标在不同品种间具有可比性。+0.01 用于防止当最低价为0时出现除零错误。
+ .000001:另一层极端情况下的保护,确保分母永远不会为零。
✅ 整体含义总结
CI = 实际趋势推进力 ÷ 归一化的价格震荡区间
- CI 值越大:意味着价格的实际推进幅度占据了震荡区间的很大部分,表明价格正在“突破区间、单向推进”。
- CI 值越小:意味着价格的实际推进幅度相对于其震荡区间很有限,表明价格在“区间内来回折返”。
5️⃣ 市场状态颜色判断

dynamic_color = iff(
CI > 20, color.red,
iff(CI < -20, color.green, color.gray)
)
这是 CI 指标的核心判读标准,定义了不同数值区间对应的市场状态:
| CI 数值区间 |
市场状态 |
| +20 ~ -20 之间 |
拥挤 / 震荡行情 |
| 上穿 +20 |
上升趋势可能启动 |
| 下穿 -20 |
下降趋势可能启动 |
6️⃣ 绘制 CI(柱状图 + 曲线)

plot(ema(CI, Period),
title="Congestion Index",
color=dynamic_color,
style=plot.style_histogram)
- 使用柱状图绘制经过平滑的 CI 值。
- 柱状图的颜色由
dynamic_color 动态决定,能直观地展示市场处于何种状态(红色-上升趋势,绿色-下跌趋势,灰色-震荡)。
plot(ema(CI, Period),
title="Congestion Index",
color=dynamic_color)
- 叠加绘制一条曲线。
- 曲线有助于更清晰地观察 CI 值的走势,例如穿越 ±20 阈值的关键时刻、与价格走势的背离现象,以及平滑后的节奏变化。
7️⃣ 绘制关键参考线

plot(20, color=color.green, title="Upper")
plot(-20, color=color.red, title="Lower")
- 在指标窗口中绘制 +20 和 -20 两条水平参考线。
- 需要明确,这两条线不是传统的超买超卖线,而是市场结构可能发生切换的阈值线。它们的意义在于划分不同的市场模式区域。
五、实战用法
1️⃣ 先用 CI 选“工具”,再谈具体买卖
这才是 CI 最核心的价值所在:作为你选择技术分析工具的“模式过滤器”。
2️⃣ CI 在震荡区间内的辅助用法
在 CI 已确认市场处于震荡(即未突破±20)的前提下,CI 数值本身也可以在区间内提供一些有价值的参考:
- CI 值接近 +20(但未突破):暗示价格运行在震荡区间的上沿附近,向上的动量可能开始衰减,需警惕回落。
- CI 值接近 -20(但未跌破):暗示价格运行在震荡区间的下沿附近,下行动量可能开始钝化,可关注反弹机会。

⚠️ 核心前提:这种用法必须建立在 CI 没有有效突破 ±20 阈值的基础上。一旦发生突破,这种“区间内高抛低吸”的逻辑立即失效,必须转为趋势思维。
3️⃣ 实战建议总结
- 不要单独使用 CI 作为买卖点信号。它的强项是模式识别,而非精确择时。
- 更合理的流程:CI 负责宏观判断市场状态(趋势/震荡) -> 根据状态选择对应的指标类型 -> 由选定的指标(如 RSI 或 均线)来提供具体的进出场信号。
- 保持灵活性:一旦 CI 发出模式切换信号(突破±20),应迅速调整你的分析工具库和交易策略。
一句话概括:CI 帮你决定“何时该用震荡指标”,而不是直接替代震荡指标。 它与传统振荡指标(如 RSI)在原理上有着本质区别,后者更多关注价格相对于自身历史的动量强弱,而 CI 的震荡模式则关注价格在既定区间内的推进效率。理解并应用好时间序列分析中的这一经典算法思想,能有效帮助你在复杂的市场环境中过滤噪音,提高决策的系统性。
六、结语
拥挤指数(Congestion Index)的真正价值,并不在于直接提供一个“圣杯”般的买卖信号,而在于它能帮你构建一个更理性的交易框架,避免在错误的市场状态下执着地使用错误的工具。
在像 A 股这样趋势与震荡频繁切换、假突破屡见不鲜的市场环境中,CI 更像是一个“市场模式过滤器”或“策略切换开关”,它让你从“我该用什么指标去预测市场”的思维,转向“市场现在是什么状态,我该匹配什么工具去应对”的思维。这种思维模式的转变,对于构建稳健的交易系统至关重要。
附:完整指标脚本参考

上图展示了在一个图形化编程平台(如电商记超级图表)中实现该指标的完整模块拼接逻辑。你可以根据上述的 Pine Script 代码逻辑,在你熟悉的任何支持自定义指标的交易平台(如 TradingView, MT4/5 等)中进行实现和应用。
对于更深入的技术分析和量化交易知识,欢迎持续关注和探索云栈社区的相关内容。