如何用 Python 计算蔡金资金流 CMF 指标?

一句话回答:CMF(Chaikin Money Flow,蔡金资金流)先用「收盘价在当日最高-最低区间里的相对位置」算出一个资金流乘数(±1 之间),乘以成交量得到「资金流量」,再把 N 日的资金流量之和除以 N 日成交量之和——结果在−1 到 +1之间,大于 0 代表这段时间资金净流入、小于 0 代表净流出。用 AlphaFeed 取回前复权日线(含 high/low/close/volume),十几行 pandas 即可,无需 TA-Lib。

为什么会有这个问题 / 传统做法的痛点

很多人想知道「最近是主力在吸筹还是在出货」,但单看成交量只有大小、没有方向。CMF 的巧思是:同样的放量,收盘收在当天高位(接近最高价)记为资金流入,收在低位记为流出,再用成交量加权累加。它和两个常被混淆的指标不同:

  • OBV:只看收盘价涨跌决定整笔成交量加减,是「全有全无」;CMF 用区间位置做连续加权,更细腻。
  • MFI:是「带量的 RSI」,用典型价(HLC 均值)× 量算成 0~100 的超买超卖摆动指标;CMF 直接给出 −1~+1 的资金净流入强度,口径不同。

TA-Lib 安装常年劝退(编译 C 库),其实 CMF 用 pandas 就能精确复现,还能顺手处理 A 股常见的一字板(最高=最低)除零问题。

分步骤解决(每步配可运行代码)

第 1 步:取前复权日线

fromalphafeedimportAlphaFeed af=AlphaFeed(api_key="your-api-key")# 或 export ALPHAFEED_API_KEY 后 AlphaFeed()df=af.klines.get("600519.SH",period="1d",count=120,adjust="forward",to_dataframe=True)df=df.sort_values("trade_date").reset_index(drop=True)

必须用前复权(adjust="forward"):除权缺口会制造假的「高低位置」,污染资金流乘数。

第 2 步:计算资金流乘数与 CMF

importnumpyasnpimportpandasaspddefcmf(df:pd.DataFrame,n:int=20)->pd.Series:high,low,close,vol=df["high"],df["low"],df["close"],df["volume"]rng=(high-low).replace(0,np.nan)# high==low(一字板)时无方向mfm=((close-low)-(high-close))/rng# 资金流乘数 ∈ [-1, 1]mfm=mfm.fillna(0.0)# 一字板当作中性 0,避免除零mfv=mfm*vol# 资金流量returnmfv.rolling(n).sum()/vol.rolling(n).sum()# N 日累加比值df["cmf20"]=cmf(df,20)print(df[["trade_date","close","cmf20"]].tail())

资金流乘数MFM = ((C−L) − (H−C)) / (H−L):收盘贴着最高价 → 接近 +1;贴着最低价 → 接近 −1;收在正中 → 0。

用真实数据实测(tools/verify_new_2026-10-04b.py,SDK 0.1.4):贵州茅台(600519.SH)近 120 日CMF(20) = −0.1981,落在 [−1, 1] 内、尾部无 NaN,说明近一个月资金温和净流出。

第 3 步:解读信号

last=df["cmf20"].iloc[-1]iflast>0.10:state="资金明显流入(偏多)"eliflast<-0.10:state="资金明显流出(偏空)"else:state="多空均衡"print(round(last,4),state)

常见用法:CMF 持续 > 0 且股价上行 = 量价配合;股价新高但 CMF 掉头向下 =顶背离,提示上涨动能衰竭。

参数与字段说明

参数/字段含义备注
period="1d"日线CMF 也可用于周线/分钟线
adjust="forward"前复权必须,否则除权缺口污染高低位置
n(窗口)累加天数常用 20;越大越平滑、越滞后
high/low/close/volumeOHLC + 量CMF 四者缺一不可
CMF 取值−1 ~ +1>0 净流入,<0 净流出

关键坑与注意事项

  • 一字板除零:A 股涨跌停常出现high == low,(H−L)=0会得到 inf/NaN。本文把该乘数置 0(中性),实测构造一字板序列不会产生 inf/NaN。
  • 前复权:务必用adjust="forward",否则高低位置被除权缺口扭曲。
  • 不是择时圣杯:CMF 是量价辅助,背离信号会失败;需结合趋势与风控,别单指标梭哈。
  • 成交量口径:CMF 对成交量单位不敏感(分子分母同量纲抵消),但停牌后首日放量会放大当日权重,解读需留意。

常见问题(FAQ)

Q:CMF 和 MFI、OBV 到底选哪个?
A:想要 −1~+1 的「资金净流入强度」用 CMF;想要 0~100 的超买超卖摆动用 MFI;想要最简单的累计量能方向用 OBV。三者可互为印证。

Q:窗口 N 选多少?
A:原始定义常用 20。短线可用 10 更灵敏,但假信号更多;长线可用 40~60 更稳。

Q:需要付费吗?
A:单只股票的日线在免费额度内即可拉取;若要对全市场批量算 CMF 做选股扫描,需要universes(标的池)能力,属 Starter 及以上,详见官网定价页。

小结

CMF 的本质是「用收盘在日内区间的位置给成交量定方向,再做 N 日加权累加」。有了 AlphaFeed 的前复权 OHLCV,十几行 pandas 就能精确复现,还顺手解决了 A 股一字板的除零坑——比折腾 TA-Lib 省心得多。

参考

  • AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart

相关新闻

Gemini2深度相机Python SDK图像采集与保存实战

Gemini2深度相机Python SDK图像采集与保存实战

最近在几个开发者社群里隔三差五就能看到类似的问题&#xff1a;Gemini2拿到手&#xff0c;系统是Ubuntu20.04&#xff0c;第一步只想拍一张彩色图像存到本地目录看看效果&#xff0c;结果从插上USB线到代码跑通&#xff0c;硬是折腾了整整一个下午。这个需求听起来确实简单&am…

2026/11/12 13:57:21 阅读更多 →
WxBit调用阿里云文本翻译API实现——app同声翻译

WxBit调用阿里云文本翻译API实现——app同声翻译

一、阿里云1、调用阿里云文本翻译API登上 阿里云 &#xff08;或者别的平台&#xff0c;会调用 文本翻译API 就行&#xff09;登上后在这里搜索“文本翻译”然后然后下翻&#xff0c;找到这个&#xff08;不一样的需要自己调试&#xff09;然后点免费试用详细看看这些信息点击…

2026/11/13 1:34:24 阅读更多 →
Netty线程模型详解:bossGroup与workerGroup如何协同工作?

Netty线程模型详解:bossGroup与workerGroup如何协同工作?

接触Netty的开发者&#xff0c;十有八九第一眼看到bossGroup和workerGroup都会有点懵。其实这俩名字起得挺传神&#xff0c;但真正理解它们的职责、协作关系和底层机制&#xff0c;还是要花点功夫。这篇文章我尽量用大白话加源码视角&#xff0c;把这两个线程组彻底讲透&#x…

2026/11/9 18:14:26 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年&#xff0c;我大部分时间都在跟浏览器标签页打交道&#xff0c;直到第一次把桌面应用跑起来&#xff0c;才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词&#xff0c;最开始是在某段时间频繁出现在同事的讨论里&#xff0c;一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档&#xff0c;主要面向智能锁安装人员、终端用户及售后维护者&#xff0c;帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件&#xff0c;大小4.37MB&#xff0c;内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统&#xff0c;整车要求空载跑到8m/s&#xff0c;电机转速已经拉到额定点&#xff0c;驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令&#xff0c;转速纹丝不动&#xff0c;三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年&#xff0c;用它写过嵌入式驱动、做过游戏服务端&#xff0c;也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词&#xff0c;我其实挺感慨的——这门语言的难点从来不是语法多&#xff0c;而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介&#xff1a;亚太天能T109滑盖智能锁产品说明书以PDF格式发布&#xff0c;适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开&#xff0c;先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能&#xff0c;再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历&#xff1a;翻开源码注释、论文摘要或者一份专业报告&#xff0c;每个字都认识&#xff0c;连在一起却像天书。想找人聊聊&#xff0c;身边要么没人懂&#xff0c;要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型&#xff0c;几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻