一句话回答: 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 取回前复权日线,从单股多空判断到全市场多头筛选都能几行搞定。
参考
- AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
- AlphaFeed 官网:https://alphafeed.org/