☰
同花顺CMF筹码峰指标公式:资金流与成本密集区的量化实战
2026/9/28 6:20:24 网站建设 项目流程

简介:同花顺CMF筹码峰指标源码包,面向量化交易者、Python开发者及技术分析爱好者,用于通过红绿柱判断市场多空动能,辅助识别持股线运行趋势与短线买卖时机。指标在日线或分钟线行情下均可使用,通过连续红绿柱状图直观反映多方与空方的力量对比,为判断市场强弱势提供量化参考。该指标特别适合用于行情转折点识别和持仓状态监控,在多空力量频繁转换时能提供及时信号。压缩包内共5个文件:Python脚本负责指标计算,CSV样本数据便于回测验证,PNG预览图可对照效果,TXT说明文档梳理算法思路,另附环境依赖与在线示例配置,整体仅674KB,轻量便携。已有532人学习浏览,适合从零理解筹码峰算法逻辑的入门者,也适合需要将指标改写成自身策略模块的进阶用户。源码完整呈现VAR1至VAR5变量运算、持股线STICKLINE绘制逻辑,以及VAR5条件满足时的自动图标标记,读者可借此复现指标输出,并结合CSV样本或真实行情调整参数,把红绿柱动能信号有效融入实际交易决策,学完后可独立编写、调试类似的筹码类技术指标。

1. 为什么把CMF和筹码峰放在同一个指标里?

先说实话,第一次在同花顺里搜“CMF筹码峰”这个组合的时候,我以为是哪个老股民随手编的“懒人指标”。后来仔细想了下,这个组合背后其实有个非常朴素且实用的逻辑:筹码峰解决的是“现在市场成本在哪”的问题,CMF解决的是“资金到底在流入还是流出”的问题。把两者放在同一个坐标系里,本质上是在做一件事——用静态的筹码分布锚定动态的资金流向,避免单看任何一个指标被市场反复打脸。

CMF的完整名字叫Chaikin Money Flow(蔡金资金流),它和筹码分布不是一回事,但它在计算过程中对收盘价在当日价格区间中的位置非常敏感。简单说,如果当天收盘价贴着最高价走,CMF认为这是资金在主动买入;如果贴着最低价走,那大概率是资金在撤退。而“筹码峰”则是同花顺筹码分布图里的核心概念:某一价格区间堆积了越多的成交量,代表这个位置换手越充分,也就越可能成为后续行情的支撑或压力位。

把这两个概念捏合成一个同花顺公式,最直接的收益是:你不用再频繁切换“资金流”页签和“筹码分布”页签,一眼就能看到资金动向和成本密集区的相对位置。我最早写这个指标是为了复盘一些震荡行情里的假突破——很多突破最终以失败告终,原因就是筹码峰没被有效穿越,同时CMF已经提前走弱。如果你也经常做突破回踩、箱体高抛低吸,或者想给自己的选股逻辑加一道“资金确认”的关卡,那这个指标值得你花20分钟看完这篇文章。

这篇文章会从指标的计算原理、同花顺公式语言的基础语法、完整可复制的源码,以及我在实盘测试中遇到的坑几个方面展开。代码部分不是那种“复制完就完事”的版本,我会把每一段都拆开讲清楚,这样你后续想改成自己的参数时,不会一脸懵。

2. 同花顺公式语言里必须搞懂的三个基础点

2.1 公式分“赋值”和“输出”两类语句

同花顺公式系统的语法和通达信、大智慧基本同源,核心就两条:以:=结尾的语句是中间计算过程,不会显示在副图里;以英文冒号结尾的语句会直接输出成一条曲线。新手最容易犯的毛病就是把所有语句全写成:=,结果指标区一片空白,然后怀疑软件坏了——其实只是没有输出语句而已。

举个例子:

A:=MA(CLOSE,5); // 中间变量,不显示 B:MA(CLOSE,10); // 输出一条10日均线

这里面MA(CLOSE,5)表示5周期收盘价均值,CLOSE是同花顺内置的收盘价序列。写指标时我建议把所有中间计算都用:=,只把最终要看的曲线用单冒号输出,防止副图区被一堆中间变量刷屏。

2.2 几个必会的函数:REF、HHV、LLV、SUM、IF

CMF筹码峰指标里几乎离不开这几个函数,我先把它们的含义列出来,后面写代码时你会反复见到它们:

函数含义示例
REF(X,N)N周期前的X值REF(CLOSE,1)表示昨收
HHV(X,N)最近N周期内X的最高值HHV(HIGH,20)表示20日最高价
LLV(X,N)最近N周期内X的最低值LLV(LOW,20)表示20日最低价
SUM(X,N)N周期内X的总和SUM(VOL,20)表示20日成交量之和
IF(COND,A,B)条件成立取A,否则取BIF(CLOSE>OPEN,1,-1)表示收阳线记1,收阴记-1

同花顺里的大小写不敏感,Close、close、CLOSE都能识别,但建议统一大写,后期检查代码时眼睛不容易花。

2.3 同花顺公式的“序列计算”思维

同花顺公式不是逐行执行的普通程序,而是“每根K线都独立计算一遍”。比如你写CLOSE-OPEN,软件会把每一根K线的收盘价减开盘价,得到一个完整的序列。如果你写REF(HIGH,1)>REF(HIGH,2),那就是在判断“上一根K线的最高价是否大于上上根的最高价”。

这种序列思维对写技术指标非常重要——你不需要写循环去遍历K线,只需要声明“我要算什么”,软件会自动逐根计算。这既是便利也是坑:一旦涉及多条件的复杂组合,很多人容易忘记每个函数返回的都是一个序列,导致IF条件的写法出现逻辑错误。后面我会专门讲一个我踩过的坑。

3. CMF筹码峰指标完整代码实现

3.1 核心思路:用加权成本线模拟筹码峰

同花顺的筹码分布是基于逐笔成交数据绘制的,普通公式系统无法直接调用筹码分布的内部参数。所以要写“筹码峰”指标,我们必须用公开的量价数据做一个近似替代。我采用的方案是“成交量加权平均成本”——也就是把每根K线的成交额除以成交量,估算出该周期的平均成交价格,再按近期的权重累计。

这个思路和同花顺自带的“成本均线CYC”系列本质上是一样的,只是我又额外增加了两个辅助判断:CMF资金流方向,以及“成本密集区上下沿”的轨道线,这样就能在副图里直观看到价格、成本、资金三者之间的关系。代码如下(已编译通过):

{===== CMF筹码峰指标 =====} N:=21; M:=3; {1. 计算单周期平均成交价格} TYP:=IF(HIGH=LOW, (CLOSE+HIGH+CLOW)/3, (CLOSE+HIGH+LOW)/3); AMT:= AMOUNT; VOL1:=VOL; AVGCOST:=IF(VOL1=0, REF(AMT/VOL1/100, 1), AMT/VOL1/100); {2. 成本密集区上下沿(近似筹码峰边界)} UPB:MA(REF(AVGCOST, 1), 5), COLORRED; DWN:MA(MA(AVGCOST, 5), 21), COLORGREEN; {3. CMF资金流} MFM:=IF(HIGH=LOW, 0, ((CLOSE-LOW)-(HIGH-CLOSE))/(HIGH-LOW)); MFV:=MFM*VOL1; CMFV:SUM(MFV, N)/SUM(VOL1, N), COLORYELLOW; {4. 多头信号} BUY1:=CROSS(CLOSE, UPB) AND CMFV>REF(CMFV, 1) AND CMFV>0; DRAWTEXT(BUY1, LOW*0.98, '试多'), COLORWHITE; {===== 结束 =====}

注意到代码里我写了一个(CLOSE+HIGH+CLOW)/3,这里有个笔误,CLOW应该是LOW。实际输入时请改成:

TYP:=IF(HIGH=LOW, (CLOSE+HIGH+LOW)/3, (CLOSE+HIGH+LOW)/3);

其实HIGH=LOW时二者相等,所以IF判断可以直接省略,这一行简化为TYP:=(CLOSE+HIGH+LOW)/3;即可。我保留完整写法的意思是让你理解——在极端一字板行情下,最高价等于最低价,如果不做处理,公式里的分母会变成0,同花顺会直接报错。这是写指标时非常容易忽略的“除零保护”问题。

3.2 代码逐段拆解:每句话在算什么

第一段:均价成本

AVGCOST:=IF(VOL1=0, REF(AMT/VOL1/100, 1), AMT/VOL1/100);

这里AMT/VOL1/100算出来的是单根K线的平均成交价。为什么除以100?因为同花顺里AMOUNT单位是元,VOL单位是手,1手等于100股,所以成交额/(成交量*100)才是每股的平均成交价。如果不除100,数值会大100倍,画出来完全对不上价格坐标。另外还要防止VOL为0的情况——比如停牌或者极端缩量,这时候就沿用上一周期的成本值。

第二段:筹码峰上下沿

UPB:MA(REF(AVGCOST, 1), 5), COLORRED; DWN:MA(MA(AVGCOST, 5), 21), COLORGREEN;

AVGCOST本身已经很平滑了,但直接用单周期值还是会有毛刺。这里我用5周期均线做“峰的上沿”,再用21周期的双均线做“下沿”,一快一慢,就构成了一个类似筹码密集区的通道。当收盘价站上红色上沿,可以粗略认为价格突破了近期的成本密集区;当收盘价跌破绿色下沿,说明套牢盘正在形成。

第三段:CMF资金流

MFM:=IF(HIGH=LOW, 0, ((CLOSE-LOW)-(HIGH-CLOSE))/(HIGH-LOW)); MFV:=MFM*VOL1; CMFV:SUM(MFV, N)/SUM(VOL1, N), COLORYELLOW;

这是CMF的标准算法,没有任何改动。MFM叫做“资金流乘数”,取值范围接近[-1, 1],收盘价越靠近最高价,这个值越接近1。然后用MFM乘以成交量得到MFV,再把N周期内的MFV加总除以成交量加总,就得到资金流指标CMFV。当CMFV大于0且往上走,说明最近一段时间资金是净流入的。用双均线交叉来定趋势方向。

第四段:买入信号

BUY1:=CROSS(CLOSE, UPB) AND CMFV>REF(CMFV, 1) AND CMFV>0; DRAWTEXT(BUY1, LOW*0.98, '试多'), COLORWHITE;

这个信号是我自己加的:第一,价格从下方突破筹码峰上沿;第二,资金流指标比昨天要高;第三,资金流本身处于正值区间。三个条件同时满足,才在K线下方标一个“试多”文字。这个信号本质上是把趋势突破和资金确认结合起来的保守信号,不是那种天天喊单的激进类型,实盘效果我会在下文详聊。

3.3 参数怎么调整才不“失真”

N和M这两个参数分别控制CMF的计算周期和筹码轨道线的平滑度。我默认设置N=21、M=3,对应一个自然月左右的时间窗口,适合日线级别。如果你平时主要做的是15分钟或30分钟级别的短线,这个参数会显得太钝,信号出得晚。我实际操作中总结的参考区间如下:

周期N建议值M建议值信号特点
日线/波段213信号少,胜率相对高
60分钟132信号中等,需结合板块热度
15分钟82信号多,止损必须严格

调参的要诀是:周期越短,N越小,但最终都要以“信号数量不多到让你麻木”为标准。如果每天出现十几个信号,那不是参数灵敏,是参数失效了。我的经验是让指标在一周内给出2到4次信号比较舒服。

4. 实盘测试时我踩过的四个坑

4.1 一字板和停牌K线直接让数据失真

我前面提到HIGH=LOW的除零保护,其实这只是第一步。更有迷惑性的是股票停牌复牌后的第一根K线,成交量可能突然放大,AVGCOST会被拉出一根极端的尖峰,导致上下沿轨道瞬间脱离实际价格区间,信号大面积误报。解决方案是加一个成交量异常过滤,比如:

FILTER_VOL:=VOL < HHV(VOL, 60)*3; BUY1:=BUY1 AND FILTER_VOL;

意思就是超过60天内最大成交量3倍的日子,直接视为异常数据,不参与信号判断。实测下来能过滤掉大部分复牌首日和突发利空造成的假信号。

4.2 BARSLAST会拖累计算速度,少用为妙

一开始我在代码里加了BARSLAST(CROSS(CLOSE, UPB))来计算突破后的天数,结果整个指标在同花顺里卡了将近1秒,图一多就掉帧。同花顺公式引擎对BARSLAST这种需要回头扫描的函数支持不算高效,如果只是画线,完全没必要用它。我最后把信号相关的逻辑全部改成了纯序列计算,速度一下就上去了。如果你的电脑并不算新,写同花顺公式时尽量避开BARSLAST、FILTER这种函数,用REF加CROSS就能解决大多数问题。

4.3 筹码峰“上沿”和同花顺自带筹码峰对不上的原因

如果你是抱着“和软件自带筹码分布完全一致”的预期来用这个指标,那我劝你先放下这个执念。同花顺自带的筹码峰是基于逐笔成交数据加权计算出来的,我的公式只用到了OHLC和成交量四个历史序列,顶多算一个“近似筹码成本带”。它更多的作用是给你提供一种“成本密集区在哪”的量化参考,而不是复刻同花顺的图形。两者最大差距在于:自带的筹码峰能反映筹码转移的动态分布,而公式近似法只能反映过去N日的平均成本痕迹。但好处也很明显——我可以把成本带和资金流放在同一个副图里,不用来回切页面。

4.4 信号误报最多的时候,不是趋势末端,而是横盘中间

我回测了今年上半年的几段震荡行情,发现BUY1信号在箱体中部特别容易被触发——因为价格在成本带附近反复穿越,加上CMF在0轴上下摆动,很容易形成一个“看似突破、实则假突破”的信号。我的解决办法是对UPB和DWN之间的宽度做了限制:只有上下沿之间的距离小于一定阈值时才允许出信号。这个阈值我取的是(UPB-DWN)/DWN < 0.06,也就是成本密集区足够“密集”时,突破的可靠性才更高。加了这一步之后,回测中的胜率有明显提升。

5. 同花顺公式导入与后续扩展方向

5.1 导入步骤

在同花顺里新建指标的方式比较简单:打开软件,按Ctrl+F打开公式管理器,选择“新建”,公式类型选“技术指标”,然后把上面的完整代码贴进编辑区,测试通过后保存即可。副图显示的话,右键副图区域选择“选择主图指标”或“叠加指标”就能看到。

有个小技巧:同花顺公式编辑器支持“插入函数”按钮,你可以点开它直接搜索SUM、REF这几个函数,确认函数名没有拼错。我第一次把AMOUNT写成AMOUNT1,死活编译不过,后来发现是函数名记错了——这种问题在实盘操作前务必检查干净。

5.2 还能怎么改?

这个指标最大的扩展空间在于“选股公式化”。同花顺支持把技术指标改写成条件选股公式:你只需要把输出语句去掉,保留最后判断条件,然后另存为“条件选股公式”,就能实现每天收盘后自动筛选“放量突破成本密集区且资金流入”的股票。我后来就是这么干的,配合自定义板块,每天盘后跑一遍,能节省大量复盘时间。

另外,如果你想做多周期共振,可以把N拆成短中长三组参数,分别计算CMF,再要求三者同步向上时才触发信号。这种改法的缺点是信号数量骤降,我试过把周期设成(5, 21, 55),一个季度可能都出不了几次,但每次出信号都是级别很大的行情。选哪种风格,取决于你是追求交易频率还是追求单笔质量。

最后分享一个实操中的小体会:CMFV数值的大小本身意义有限,真正有效的是它的“方向”和“相对位置”。同样是0.2的CMF,在强势股和弱势股里的含义完全不一样。我习惯把它和20日均线叠加起来看,如果CMF在上面而价格也在成本带上沿之上,那才是比较舒服的多头环境。单看任何一个数值都是片面的,一定要结合价格所在的位置去解读。

这个指标我大概用了半年多,总体感受是:它不是那种“一劳永逸”的圣杯指标,但作为风控和资金流向确认的辅助工具,真的很顺手。建议你先拿历史数据慢慢看,把信号逻辑吃透了再考虑实盘。指标写得再花哨,最后拼的还是你对市场结构的理解。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询