一句话回答: 量价分析的核心是"用成交量给价格信号做验证"。用 AlphaFeed 取复权日线,用「今日成交量 > N 日均量的 K 倍」判断放量、用「收盘突破前 N 日最高价 + 放量」识别放量突破,再用 OBV(能量潮) 和价格比对识别量价背离——几十行代码就能把"量"这一维加进你的分析。
为什么会有这个问题 / 传统做法的痛点
只看价格容易被"假突破"骗:价格冲上新高,但如果没有成交量配合,往往是诱多,很快回落。反过来,价格还在创新高、但买盘动能(成交量)在衰竭,就是典型的顶背离,提示趋势可能见顶。
难点在两处:一是成交量要和复权价对齐(不复权跨除权日会把量价关系算乱);二是背离需要一个可量化的"动能"指标,而不是肉眼看 K 线。OBV 正是把成交量按涨跌方向累加的动能指标,配合 AlphaFeed 的复权日线,量价分析就能自动化。
分步骤解决(每步配可运行代码)
第 1 步:取复权日线,算放量与放量突破
import numpy as np, pandas as pd
from alphafeed import AlphaFeed
def volume_price(symbol, count=250, vol_k=1.5, win=20):
af = AlphaFeed() # 读取 ALPHAFEED_API_KEY
df = af.klines.get(symbol, period="1d", count=count, adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)
df["vol_ma"] = df["volume"].rolling(win).mean()
df["is_high_vol"] = df["volume"] > vol_k * df["vol_ma"] # 放量:量 > K 倍均量
df["hh"] = df["high"].rolling(win).max().shift(1) # 前 win 日最高价
df["breakout_vol"] = (df["close"] > df["hh"]) & df["is_high_vol"] # 放量突破前高
return df
df = volume_price("000001.SZ", count=250)
print("放量突破前高天数:", int(df["breakout_vol"].sum()))
print(df[df["breakout_vol"]][["trade_date", "close", "volume"]].tail(3).to_string(index=False))
真实跑通(000001.SZ 近 250 日):出现 9 次放量突破前高。用 shift(1) 取"前 N 日最高"是关键——突破要和过去的高点比,而不是把今天也算进去。
第 2 步:用 OBV 识别量价背离
OBV(On-Balance Volume):收盘上涨日累加成交量、下跌日减去,反映资金动能。价格创新高而 OBV 不创新高 = 顶背离。
def add_obv_divergence(df, win=20):
df = df.copy()
df["obv"] = (np.sign(df["close"].diff()).fillna(0) * df["volume"]).cumsum()
df["price_nh"] = df["close"] >= df["close"].rolling(win).max() # 价格创 win 日新高
df["obv_nh"] = df["obv"] >= df["obv"].rolling(win).max() # OBV 同期是否新高
df["bearish_div"] = df["price_nh"] & (~df["obv_nh"]) # 价新高但量能未跟上
return df
df = add_obv_divergence(df)
print("顶背离天数:", int(df["bearish_div"].sum()))
print(df[df["bearish_div"]][["trade_date", "close", "obv"]].tail(3).to_string(index=False))
真实跑通同一只票出现 7 次顶背离信号。底背离把条件对称改成"价格创新低但 OBV 未创新低"即可。
参数与字段说明
| 参数 / 字段 | 含义 | 备注 |
|---|---|---|
volume |
成交量 | A 股单位为股;另有amount(成交额) |
vol_k |
放量倍数阈值 | 常用 1.5~2.0,越大越严格 |
win |
均量/突破回看窗口 | 20 日约一个月 |
hh=high.rolling(win).max().shift(1) |
前 N 日最高 | shift(1) 避免把当日算进去 |
obv |
能量潮 | 涨日加量、跌日减量的累加 |
关键坑与注意事项
- 必须用复权价:
adjust="forward"。不复权跨除权日的价格跳空会让"突破/背离"全乱,成交量也要和复权价对齐看。 - 放量的"量"用相对值:不同股票量级差异极大,要用"相对自身均量的倍数"而非绝对量;
amount(成交额)有时比volume更稳(不受股价高低影响)。 - 背离是"提示"不是"命令":量价背离可能持续很久才兑现,甚至不兑现,属于滞后/主观信号,必须结合价格结构与风控,不能单独当买卖点。
- 一字板/停牌:涨停一字板成交量极小但价格新高,会干扰"放量突破"判断;停复牌会让 OBV 跳变,建议剔除或标注。
- 避免未来函数:突破要和"前 N 日"比(已用
shift(1));做回测时信号也应shift后再用次日成交。
常见问题(FAQ)
Q:放量突破就一定能追吗?
A:不一定。放量提高了突破为真的概率,但仍可能是出货放量;要结合突破后的回踩确认、大盘环境与止损,而不是见放量就追。
Q:OBV 和成交量直接看有什么区别?
A:单看成交量只有大小,没有方向;OBV 把量按涨跌方向累加,能刻画"资金是在进还是在出",因此更适合判断背离。
Q:用 volume 还是 amount?
A:判断放量两者都行;amount(成交额=价×量)不受股价绝对高低影响,跨股票比较更公平;OBV 传统上用 volume。
Q:需要付费吗?
A:单标的历史日线可用免费额度体验;批量/全市场量价扫描需 Starter 及以上,详见官网定价页。
小结
量价分析不神秘:用 AlphaFeed 的复权日线,把"放量"量化成相对均量的倍数、把"突破"对齐到前 N 日高点、把"动能"交给 OBV,就能自动识别放量突破与量价背离。记住量价配合看真假、背离看衰竭,但它们都是概率性、滞后性的提示,务必配合价格结构和风控使用。
参考
- AlphaFeed Python SDK 文档:https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart

