首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何用 Python 计算 BBI 多空指标?

如何用 Python 计算 BBI 多空指标?

原创
作者头像
用户7083614
发布于 2026-10-12 10:00:57
发布于 2026-10-12 10:00:57
90
举报

一句话回答: BBI(Bull and Bear Index,多空指标)是 3、6、12、24 日四条简单均线的平均值:BBI = (MA3 + MA6 + MA12 + MA24) / 4,用一条线同时兼顾短、中期均线,价格在 BBI 之上视为多头、之下视为空头。用 AlphaFeed 取回前复权日线后,几行 pandas 就能算出 BBI,完全不需要 TA-Lib。

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

看均线时同时挂 5/10/20/60 太乱,判断多空要来回比对多条线。BBI 的思路是把几条不同周期均线平均成一条,兼顾灵敏与稳健,得到一条清爽的「多空分界线」:站上就是多头格局,跌破就是空头格局。坑在于要用前复权价,否则除权跳空让均线失真。

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

第 1 步:取前复权日线

代码语言:python
复制
from alphafeed import AlphaFeed
import pandas as pd

af = AlphaFeed()  # 读取 ALPHAFEED_API_KEY

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

BBI 由多条均线构成,务必用 adjust="forward"(前复权),避免除权断层。

第 2 步:计算 BBI

代码语言:python
复制
def bbi(close: pd.Series, windows=(3, 6, 12, 24)) -> pd.Series:
    mas = [close.rolling(w).mean() for w in windows]
    return sum(mas) / len(mas)

df["BBI"] = bbi(df["close"])
df["pos"] = (df["close"] > df["BBI"]).map({True: "多头", False: "空头"})
print(df[["trade_date", "close", "BBI", "pos"]].tail(5).to_string(index=False))

参数与含义:

参数/字段

含义

常用值

windows

四条均线周期

(3, 6, 12, 24)

BBI

四条均线的平均

多空分界线

收盘 > BBI

多头格局

偏多

收盘 < BBI

空头格局

偏空

第 3 步:识别多空穿越(金叉/死叉分界线)

代码语言:python
复制
df["cross"] = df["pos"].ne(df["pos"].shift())
sig = df[df["cross"] & df.index.to_series().gt(0)]
print(sig[["trade_date", "close", "BBI", "pos"]].tail(5).to_string(index=False))
# pos 由"空头"变"多头" = 站上 BBI(偏多信号);反之跌破 BBI(偏空信号)

第 4 步:全市场筛「站上 BBI」的多头股

代码语言:python
复制
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)  # dict{symbol: DataFrame}

bull = []
for sym, k in data.items():
    k = k.sort_values("trade_date")
    b = bbi(k["close"])
    if k["close"].iloc[-1] > b.iloc[-1]:
        bull.append(sym)
print("站上 BBI(多头格局):", bull)

关键坑与注意事项

  • 必须用前复权价:除权跳空会让四条均线与 BBI 失真。
  • BBI 是格局线不是精确买卖点:站上/跌破反映多空格局,具体择时需配合量能、其它指标。
  • 震荡市易反复穿越:横盘时价格反复上下穿 BBI,会产生较多假信号,可加趋势过滤(如 ADX)。
  • 头部数据为 NaN:最长的 24 日均线需要预热期,count 建议 ≥ 30 以上,忽略序列最前面若干根。
  • 参数可调:短线可缩短为 (3,6,9,18) 等,但改参数后与通用 BBI 数值不同,跨平台对比先统一。
  • 权重相等:BBI 对四条均线等权平均,短周期占比其实更高(因为短均线波动大),理解这点有助于判断灵敏度。

常见问题(FAQ)

Q:BBI 和单看均线有什么优势?

A:BBI 把多条周期均线合成一条,既有短均线的灵敏、又有长均线的稳健,判断多空格局更省事、更少噪音。

Q:默认参数 3/6/12/24 能改吗?

A:能。想更灵敏可用更短的组合,想更稳健可拉长。默认 3/6/12/24 是通用设置,先用它。

Q:为什么前面几十行是 NaN?

A:24 日均线需要 24 根数据预热,序列头部为 NaN 属正常,取足够长样本即可。

Q:需要付费吗?

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

小结

BBI 多空指标的本质是「多条周期均线的平均分界线」,用一条线判断多空格局。实现只需 pandas 的 rolling 求四条均线再平均,不依赖 TA-Lib。关键是用前复权价、把它当格局线而非精确买卖点。用 AlphaFeed 取回前复权日线,从单股多空判断到全市场多头筛选都能几行搞定。

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 为什么会有这个问题 / 传统做法的痛点
  • 分步骤解决(每步配可运行代码)
    • 第 1 步:取前复权日线
    • 第 2 步:计算 BBI
    • 第 3 步:识别多空穿越(金叉/死叉分界线)
    • 第 4 步:全市场筛「站上 BBI」的多头股
  • 关键坑与注意事项
  • 常见问题(FAQ)
  • 小结
  • 参考
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档