CCI与DPO融合指标:通达信副图源码与实战用法解析
简介面向通达信软件用户的股票技术分析指标公式文档将CCI商品渠道指数与DPO去趋势价格振荡器两个经典指标融合在同一个副图公式中。文档利用DPO双线金叉与死叉捕捉价格短期波动幅度配合CCI趋势线的上拐与下折确认中长期走势当两者同步上穿零轴时给出强势上涨信号同步下穿时则提示强烈下跌风险形成双指标共振帮助投资者更清晰地识别买卖时机、降低误判概率。作者yifeng16888在文档内提供可直接复制到通达信公式管理器使用的完整源码并附指标原理、参数说明与结合应用解读便于读者理解公式逻辑和参数调整方法。该版本按副图形式设计指标显示直观信号以红绿柱和图标标注便于盘中快速判断。资源为单个doc文档大小仅131KB轻便易用目前已有972人学习下载适合有一定技术分析基础、希望优化交易系统或研究指标融合策略的投资者参考。1. CCI 和 DPO 融合单独用总觉得差一步CCI 单独用的时候最麻烦的是它动不动就在 100 和 -100 之间来回穿越震荡行情里经常刚给出超卖信号第二天继续往下走DPO 看着干净去趋势之后零轴上下摆动很规整却对单日动量强弱不敏感金叉死叉出现在半山腰也是常事。把这两个指标叠进同一个副图等于用 DPO 的波段节奏去过滤 CCI 的噪声再用 CCI 的上拐下折补齐 DPO 的钝感。这份源码不复杂核心就三层DPO 做平滑形成金叉死叉CCI 按阈值和方向叠色最后用一条 EXPMA 趋势线串起两个指标的确认关系。适合两类人一是手工盯盘想减少无效信号的人二是想把信号落到选股公式里的量化岗后者可以直接把 X、Y 条件提出来用。2. 公式骨架DPO 的双重平滑与 CCI 边界分层逻辑先把整个公式的数据流理清。源码看起来像一堆函数嵌套实际上只做了三件事第一用 DPO 计算出一个去趋势序列第二对这个序列再做一次 MACD 式的双平滑得到金叉死叉第三用 CCI 的绝对值区间和方向变化画柱状图。理解了这个骨架后面改参数和接选股条件都不会乱。2.1 DPO 去趋势再平滑RIFF 与 REA 从哪来DPO 这一行是DPO:CLOSE-REF(MA(CLOSE,20),20/21);。这里有两个容易看漏的点。一是20/21算出来是 11也就是把 20 日均线往前偏移 11 根 K 线再和当前收盘价做差。为什么要偏移 11 而不是 10这个细节后面排错部分再展开说。二是 DPO 本身是零轴上下摆动的序列直接拿它的上穿零轴做信号会非常碎因为价格在趋势行情里DPO 可以连续几十根 K 线不回零轴。所以源码里做了第二次平滑RIFF:EMA(DPO,12)-EMA(DPO,26); REA:EMA(RIFF,9);这个写法其实是把 DPO 当作价格套用了 MACD 的快慢线结构。RIFF 等于 DPO 的 12 期 EMA 减去 26 期 EMA反应的是 DPO 序列自身的短期动能与长期动能的差值REA 又是 RIFF 的 9 期 EMA作为信号线。这里的 12、26、9 沿用 MACD 经典参数不是随便选的因为 DPO 序列本身已经是 20 周期结构再用 12/26 做平滑生成的 RIFF 周期会落在 20 到 30 根 K 线的中等波段上正好匹配指数中期节奏。变量计算过程在公式中的作用DPOCLOSE - REF(MA(CLOSE,20),11)去掉 20 日趋势保留周期波动RIFFEMA(DPO,12) - EMA(DPO,26)DPO 的快慢差形成动量线REAEMA(RIFF,9)RIFF 的均化作为触发线XCROSS(RIFF,REA)金叉RIFF 上穿 REAYCROSS(REA,RIFF)死叉REA 上穿 RIFFX和Y是布尔变量通达信里返回 1 或 0。后面DRAWICON(X,趋势线,13)的意思是当 X 条件成立的这根 K 线上在趋势线位置画一个 13 号图标。13 和 14 号图标在通达信里是向上和向下的箭头这是系统内置的不需要额外下载资源。2.2 CCI 边界逻辑超买超卖与上拐识别CCI 的计算在源码里是两行TYP:(HIGHLOWCLOSE)/3; CCI:(TYP-MA(TYP,13))/(0.015*AVEDEV(TYP,13));TYP 是典型价格把最高、最低、收盘三者平均目的是降低单根 K 线上下影线对指标的干扰。分母用AVEDEV(TYP,13)而不是标准差是因为平均绝对偏差对极端值的敏感度比标准差低价格出现瞬间拉抬时 CCI 不会一下子冲到离谱的位置。0.015 是约定俗成的缩放系数让 CCI 在大部分时间里落在 -100 到 100 区间内超过这个区间就认为是超买超卖。后面四行 STICKLINE 是这个公式的核心视觉设计STICKLINE(CCI0,0,CCI,1,0),COLORWHITE; STICKLINE(CCI0,0,CCI,1,0),COLORYELLOW; STICKLINE(CCIREF(CCI,1) AND CCI0 AND CCI-100,0,CCI,1,0),COLORGREEN; STICKLINE(CCIREF(CCI,1) AND CCI100,0,CCI,1,0),COLORRED;第一层画的是 CCI 小于 0 的部分白色第二层画 CCI 大于等于 0 的部分黄色。第三层和第四层是叠加色当 CCI 上拐也就是CCIREF(CCI,1)时如果它还在负值区和 -100 之间画绿色如果它已经超过 100画红色。这里要注意绘制顺序后期画的红色和绿色会覆盖在白色或黄色柱之上所以一根柱子上最终呈现的颜色是优先级最高的那层。2.3 融合信号怎么理解谁负责时机、谁负责方向这个公式最巧妙的地方在于它没有把 CCI 和 DPO 的信号做简单的 AND 连接而是让它们各管一段。DPO 的金叉死叉负责告诉你当前是否处于一个周期拐点CCI 的颜色和上拐负责告诉你拐点处动量是否已经转向。比如 DPO 金叉出现时如果同时看到 CCI 柱从白色区域翻成绿色说明价格虽然还在零轴下方但下跌动能已经在衰减这时候的做多胜率比单纯看 CCI 上穿 -100 要高。反过来DPO 死叉出现但 CCI 依然在 100 上方收红柱表示强势行情里的正常回踩不一定要立刻离场。趋势线:EXPMA(CCI,5),COLORMAGENTA,LINETHICK2;这行把 CCI 再做 5 期指数平滑让方向变化更稳定。后面两行用IF(趋势线REF(趋势线,1),趋势线,DRAWNULL)分别画红色和绿色等于把趋势线的斜率变化可视化。这里有一个很实用的技巧DRAWNULL可以把不满足条件的部分设为空值这样红绿两条线不会重叠图上看起来就是一根线在变色而不是两根线交叉。3. 副图复现通达信完整源码与逐行参数说明源码可以直接用但如果想真正把这个指标变成自己的工具建议不要直接粘贴完事而是逐行确认每个函数含义。通达信公式编辑器对语法要求很严格一个中文字符或丢一个分号都会导致编译失败。3.1 可直接粘贴的完整源码以下是加入中文注释后的完整版本通达信 6.0 以上版本可以直接编译{CCI与DPO融合指标副图} {D1: DPO序列去掉20周期趋势} DPO:CLOSE-REF(MA(CLOSE,20),20/21); {D2: DPO二次平滑类MACD快慢线} RIFF:EMA(DPO,12)-EMA(DPO,26); REA:EMA(RIFF,9); {D3: 金叉死叉} X:CROSS(RIFF,REA); Y:CROSS(REA,RIFF); {D4: CCI计算} TYP:(HIGHLOWCLOSE)/3; CCI:(TYP-MA(TYP,13))/(0.015*AVEDEV(TYP,13)); {D5: 四层柱状图绘制} STICKLINE(CCI0,0,CCI,1,0),COLORWHITE; STICKLINE(CCI0,0,CCI,1,0),COLORYELLOW; STICKLINE(CCIREF(CCI,1) AND CCI0 AND CCI-100,0,CCI,1,0),COLORGREEN; STICKLINE(CCIREF(CCI,1) AND CCI100,0,CCI,1,0),COLORRED; {D6: 趋势线与变色处理} 趋势线:EXPMA(CCI,5),COLORMAGENTA,LINETHICK2; IF(趋势线REF(趋势线,1),趋势线,DRAWNULL),COLORRED,LINETHICK2; IF(趋势线REF(趋势线,1),趋势线,DRAWNULL),COLORGREEN,LINETHICK2; {D7: 金叉死叉图标} DRAWICON(X,趋势线,13); DRAWICON(Y,趋势线,14);粘贴时注意趋势线这个中文变量名在通达信里是允许的但如果后续要引用它做选股建议改成英文变量名T1或TL避免某些版本在选股公式里对中文变量名支持不完整。3.2 STICKLINE 四层绘制顺序与颜色覆盖规则STICKLINE 的函数签名是STICKLINE(COND, PRICE1, PRICE2, WIDTH, EMPTY)前面四个参数分别是条件、起止价格、柱体宽度、是否空心。这里 WIDTH1 表示柱体占满整个 K 线宽度的一半左右EMPTY0 表示实心柱。绘制顺序是自上而下执行的所以第三层绿色会覆盖第一层白色第四层红色会覆盖第二层黄色。这意味着你在图上看到一根绿色柱时它的原始底色其实是白色说明 CCI 为负但在回升看到红色柱时原始底色是黄色说明 CCI 为正且加速上行。绘制层触发条件覆盖效果实际含义第一层CCI 0白色零轴下方运行第二层CCI 0黄色零轴上方运行第三层CCI 上拐且 -100 CCI 0绿色覆盖白色弱势区域出现反弹动量第四层CCI 上拐且 CCI 100红色覆盖黄色超买区域继续加速这种层级绘制的好处是一眼就能分辨出 CCI 是在绝对值区间内运行还是在边界处发生动能转变。需要注意的是绿色条件里写的是CCI0 AND CCI-100所以 CCI 跌破 -100 之后的任何上拐都不会触发绿色柱只有在 -100 到 0 之间的上拐才有意义。这个设计意图是过滤掉极端超卖后的第一次反弹因为那种反弹往往只是技术性修复不一定是趋势反转。3.3 建立副图指标的具体操作在通达信里新建这个指标路径是功能 → 公式系统 → 公式管理器 → 新建。选择技术指标公式画线方法选副图公式名称建议用CCI_DPO然后粘贴源码点测试公式。如果提示错误九成是两种原因一是复制过程中中文引号或句号混入了代码二是DRAWICON的函数ID 13 和 14 在当前版本的图标库中不存在后者多见于通达信精简版。测试通过后在 K 线图下方空白处右键选择副图指标找到CCI_DPO即可显示。副图默认高度可能不够看建议把副图高度拉高一些因为柱状图、趋势线和图标都挤在一起高度太小时图标和柱体容易重叠。4. 实际使用DPO 金叉死叉与 CCI 上拐的判别规则指标装上之后最怕的是看着满屏红红绿绿不知道先看哪个。我的建议是给自己定一个固定观察顺序先找 DPO 金叉死叉的箭头再确认趋势线颜色是否同步变化最后看柱状图颜色细节。这个顺序能把信号数量降下来留下来的信号质量明显更高。4.1 金叉死叉旁边的“上拐”确认DPO 金叉的定义是X:CROSS(RIFF,REA)也就是 RIFF 从下方穿越 REA。单独出现金叉时如果 CCI 趋势线还是绿色向下说明 DPO 说周期转强但 CCI 说动量还没跟上。这时候不必急着操作等一根 K 线确认看趋势线是否翻红。反过来如果金叉出现的同时CCI 正好处于上拐状态并且柱体呈绿色这就是两个指标同步确认是这套公式里最值得关注的信号。死叉逻辑同理但要注意一个不对称性源码里红色柱只在 CCI 100 时出现而绿色柱发生在 -100 到 0 之间。也就是说上涨过程中的动能确认用的是超买加速下跌过程中的动能确认用的是负值区反弹。这种设计的实质是右侧交易思维追求的是趋势已经明朗后的追入而不是左侧抄底。4.2 三种常见误读与修正方法第一种误读是把白色柱直接当看空信号。白色只代表 CCI 小于 0不代表正在下跌。有些股票会在零轴下方横盘很久CCI 一直在 -50 附近波动白色柱持续几十根这时候并不是持续看空而是趋势不明。第二种误读是看到黄色柱就认为是多头。CCI 在 50 到 100 之间运行时也是黄色但此时并没有突破超买边界只能算是零轴上方运行。第三种误读是过于关注 -100 以下的走势实际上 CCI 一旦跌破 -100 且没有上拐说明处于极弱状态此时买入等于接刀。观察对象常见误读正确理解白色柱看空信号CCI 在零轴下方未确认方向黄色柱多头信号CCI 在零轴上方但可能横盘绿色柱反弹信号仅在 -100 到 0 之间的上拐有效红色柱超买风险超买加速趋势延续概率更高把CCI-100这个条件单独拿出来说它过滤掉了极弱状态下的伪反弹。我一般会用它再叠加一个条件CCIREF(CCI,1)也就是当天 CCI 高于昨天。这两个条件合并之后绿色柱出现的频率会显著减少但每一次出现的质量都更高。4.3 改编成选股条件的一段代码如果你要把这个指标用于盘后选股不需要把整个副图代码搬过去只需要提取核心逻辑{选股条件DPO金叉 CCI上拐 未深跌} DPO:CLOSE-REF(MA(CLOSE,20),11); RIFF:EMA(DPO,12)-EMA(DPO,26); REA:EMA(RIFF,9); TYP:(HIGHLOWCLOSE)/3; CCI:(TYP-MA(TYP,13))/(0.015*AVEDEV(TYP,13)); X:CROSS(RIFF,REA); COND:X AND CCIREF(CCI,1) AND CCI-100 AND CCI100; FILTER(COND,5);最后一行FILTER(COND,5)的意思是满足条件后 5 个交易日内不再重复选出。这是一个很实用的防重复技巧否则连板股会连续几天被选出来干扰排序。CCI100的限制是为了避开已经超买加速的个股如果追求强势可以去掉这个条件并改为CCI100选出的就是金叉后动量最强的标的。两种风格差异很大建议分别保存为两个选股公式。5. 参数微调与验证技巧把 13 改成自适应最后聊一聊参数修改和验证方法。这个公式里最值得调整的参数不是 20而是 CCI 的 13 周期和趋势线的 5 周期。这两个参数决定了指标的反应速度改小了信号多、噪声大改大了信号少、滞后明显。不要同时调多个参数一次只动一个否则无法判断是哪个改动影响了效果。5.1 参数化改造步骤在通达信公式管理器里把需要调整的数字改成参数变量。以 N 代替 13、M 代替 20、P1/P2/P3 代替 12/26/9N:13; M:20; P1:12; P2:26; P3:9; DPO:CLOSE-REF(MA(CLOSE,M),M/21); RIFF:EMA(DPO,P1)-EMA(DPO,P2); REA:EMA(RIFF,P3); TYP:(HIGHLOWCLOSE)/3; CCI:(TYP-MA(TYP,N))/(0.015*AVEDEV(TYP,N));在公式编辑器顶部参数区填入默认值N13、M20、P112、P226、P39优化步长分别设为 1、2、1、2、1。这里不建议把 0.015 也改成参数它影响的是 CCI 的绝对值尺度改了之后 ±100 的分界线含义就会漂移整个颜色逻辑都要重排风险太大。参数默认值建议范围调整方向NCCI 周期138-21大周期更平滑小周期更灵敏MDPO 周期2015-30影响 DPO 去趋势的频率P1/P2EMA 快慢12/26按 MACD 习惯微调改变金叉死叉的触发频率P3信号线95-12越小信号越密集5.2 用通达信“时段统计”验证信号质量验证信号最直接的方法是通达信的“时段统计”功能。在副图指标上右键选择“时段统计”框选一段上涨行情系统会列出该区间内所有信号的分布情况。重点看两点一是金叉信号出现后趋势线是否在 3 根 K 线内翻红如果翻红时间过长说明 P1/P2 参数偏钝二是绿色柱和红色柱是否频繁交替如果一根白柱后面马上跟一根绿柱第二天又变回白柱说明 N 参数太敏感需要增大周期。更严格的验证方式是写一个简易统计公式统计金叉信号后 5 日的最高涨幅DPO:CLOSE-REF(MA(CLOSE,20),11); RIFF:EMA(DPO,12)-EMA(DPO,26); REA:EMA(RIFF,9); X:CROSS(RIFF,REA); SIG:FILTER(X,5); 涨幅:(HHV(HIGH,5)-REF(CLOSE,1))/REF(CLOSE,1)*100; TEST:IF(SIG,涨幅,0);把这个公式作为副图挂上去回看历史上每个信号点对应的 5 日最高涨幅。如果大部分 TEST 值集中在 2% 以下说明信号质量偏弱优先考虑增大 N 到 16 或 18如果 TEST 值出现极端大数但成功率低说明选出的都是当天已经启动的个股需要再加入REF(CCI,1)0这样的前置条件只保留 CCI 从负值区刚翻上的信号。5.3 复盘时容易忽略的一个细节最后说一个我复盘时碰过的坑。REF(MA(CLOSE,20),20/21)里的偏移量可以写成 11也可以写成20/21但不要想当然改成20/2即 10。DPO 的原始定义是CLOSE - REF(MA(CLOSE, N), N/2 1)多偏移一个周期是为了避免当前均线值里包含当前收盘价自身从而产生未来函数嫌疑。改成 10 之后均线里还残留了当天的价格信息指标会领先于价格变动回测数据会异常漂亮但实盘时效果对不上。交易软件里拿到源码的第一件事就是检查所有 REF 的偏移量是否包含当前周期这是判断指标是否过度拟合的最快方法。本文还有配套的精品资源点击获取