☰
如何用 Python计算 CR能量指标(中间意愿指标)?
2026/10/15 4:19:00 网站建设 项目流程

一句话回答:CR 指标以「前一日中价」(前高+前低)/2为基准,用过去 N 日「最高价高出中价的部分之和」比「中价高出最低价的部分之和」,衡量多方上冲能量与空方下探能量的对比。用 AlphaFeed 取回前复权日线后,几行 pandas 就能算出 CR,不需要 TA-Lib。

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

CR 和 BR 都衡量「意愿」,但基准不同:BR 以前一日收盘价为基准,CR 以前一日中价(最高最低的均值)为基准,对多空能量的刻画更中性。坑在于:一是要用前复权价,避免除权跳空;二是「高出/低出部分」要截断负值再求和,别直接相减;三是 CR 常配多条不同周期均线一起看。

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

第 1 步:取前复权日线

fromalphafeedimportAlphaFeedimportpandasaspd af=AlphaFeed()# 读取 ALPHAFEED_API_KEYdf=af.klines.get("600519.SH",period="1d",count=250,adjust="forward",to_dataframe=True)df=df.sort_values("trade_date").reset_index(drop=True)

CR 依赖每日最高/最低价,务必用adjust="forward"(前复权),避免除权跳空。

第 2 步:计算 CR(前一日中价为基准)

defcr(df:pd.DataFrame,n:int=26)->pd.Series:mid=(df["high"].shift(1)+df["low"].shift(1))/2# 前一日中价up=(df["high"]-mid).clip(lower=0)# 上冲能量(截断负值)dn=(mid-df["low"]).clip(lower=0)# 下探能量(截断负值)returnup.rolling(n).sum()/dn.rolling(n).sum()*100df["CR"]=cr(df,n=26)print(df[["trade_date","close","CR"]].tail(5).to_string(index=False))

参数与含义:

字段含义常用值/解读
n统计周期26
mid前一日中价(前高+前低)/2CR 的基准
CR上冲能量 ÷ 下探能量 ×100高=多方强,低=空方强

第 3 步:CR 均线与区间参考

# CR 常配多条均线(不同周期、且各自向前平移半个周期)作辅助df["CR_ma1"]=df["CR"].rolling(10).mean()df["CR_ma2"]=df["CR"].rolling(20).mean()cur=df["CR"].iloc[-1]ifcur<40:state="低能量区(超卖,可能筑底)"elifcur>300:state="高能量区(超买,注意风险)"else:state="正常区"print(f"CR={cur:.0f}→{state}")

CR 经验区间(参考,因品种而异):

CR 区间含义
< 40低能量/超卖区,常见相对底部
40 ~ 160正常区
160 ~ 300强势/活跃区
> 300~400高能量/超买区,警惕回落

第 4 步:全市场批量筛「低 CR」候选

codes=["600519.SH","000001.SZ","601318.SH","000858.SZ","300750.SZ"]data=af.klines.batch(codes,period="1d",count=60,adjust="forward",to_dataframe=True)low_cr=[]forsym,kindata.items():k=k.sort_values("trade_date")c=cr(k)ifpd.notna(c.iloc[-1])andc.iloc[-1]<=60:low_cr.append((sym,round(float(c.iloc[-1]),0)))print("低 CR 候选:",low_cr)

关键坑与注意事项

  • 必须用前复权价:除权跳空会让中价与能量计算失真。
  • 基准是「前一日中价」:(前高+前低)/2且用shift(1),别用当日中价或收盘价(那是 BR)。
  • 能量要截断负值:(high−mid)与(mid−low)取非负部分再求和。
  • 阈值是经验值:作相对参考而非绝对买卖点;高 CR 可能续强、低 CR 可能续弱。
  • 除以零风险:区间内下探能量趋近 0 时 CR 会极大,需处理异常值。
  • 样本足够:n=26需预热,count建议 ≥ 40,忽略头部 NaN。

常见问题(FAQ)

Q:CR 和 BR 有什么区别?
A:BR 以前一日收盘价为基准,CR 以前一日中价(高+低)/2为基准。CR 对多空能量的刻画更中性,常与 BRAR 配合使用。

Q:CR 的均线怎么用?
A:传统 CR 会配 a/b/c/d 四条不同周期均线判断趋势与买卖带。简化用法是配 1~2 条均线看 CR 与均线的交叉与相对位置。

Q:默认周期用多少?
A:常用 26。越短越灵敏。先用 26 观察区间与均线关系。

Q:需要付费吗?
A:单只历史日线有免费额度;全市场批量算 CR(klines.batch+universes)需 Starter 及以上。详见定价页。

小结

CR 能量指标的本质是「以前一日中价为基准,比较上冲与下探能量」。实现只需 pandas,不依赖 TA-Lib。关键是用前复权价、基准取前一日中价并shift(1)、能量截断负值、把阈值当相对参考。用 AlphaFeed 取回前复权日线,几行就能算出 CR 并做全市场筛选。

参考

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

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

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

立即咨询