AlphaFeed Blog

如何用 Python 判断一只股票是“追涨”还是“抄底”更有效?(收益率自相关检验)

分析与指标 · 代码验证于 2026-10-02

如何用 Python 判断一只股票“追涨”还是“抄底”更有效?

一句话回答: 看收益率的自相关:lag-1 自相关显著为负说明今天涨明天倾向跌(短期均值回归,抄底/低吸更合理);显著为正说明涨势会延续(动量,追涨/突破更合理)。用 AlphaFeed 取回前复权日线算日收益率,用 pandas 的 autocorr 与方差比就能量化判断一只票更适合哪类策略。

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

均值回归(跌了买)和动量(涨了追)是两类相反策略,用错方向越努力越亏。到底该用哪种,不该拍脑袋,而要看这只票的收益率有没有记忆、是什么方向的记忆。收益率自相关正是衡量这种「记忆」的工具。坑在于:要用前复权收益、样本要足够、并关注统计显著性(小样本的自相关可能只是噪音)。

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

第 1 步:取前复权日线算收益率

from alphafeed import AlphaFeed
import numpy as np
import pandas as pd

af = AlphaFeed()  # 读取 ALPHAFEED_API_KEY

df = af.klines.get("600519.SH", period="1d", count=750,
                   adjust="forward", to_dataframe=True)
df = df.sort_values("trade_date").reset_index(drop=True)
ret = df["close"].pct_change().dropna()

第 2 步:计算各阶自相关

def autocorrs(ret, lags=5):
    return {f"lag{k}": round(float(ret.autocorr(lag=k)), 4) for k in range(1, lags + 1)}

ac = autocorrs(ret, 5)
print("收益率自相关:", ac)

lag1 = ret.autocorr(lag=1)
# 近似 95% 显著阈值:±1.96/sqrt(N)
n = len(ret); thr = 1.96 / np.sqrt(n)
if lag1 < -thr:
    verdict = "显著负自相关 → 短期均值回归(抄底/低吸更合理)"
elif lag1 > thr:
    verdict = "显著正自相关 → 动量延续(追涨/突破更合理)"
else:
    verdict = "自相关不显著 → 短期近似随机游走,别过度拟合方向"
print(f"lag1={lag1:.4f},阈值±{thr:.4f} → {verdict}")
指标含义解读
autocorr(lag=1)相邻日收益相关性<0 回归 / >0 动量
±1.96/√N95% 显著性近似阈值超出才算显著
多阶自相关记忆的衰减/周期看回归/动量持续几日

第 3 步:方差比(Variance Ratio)辅助判断

def variance_ratio(ret, q=5):
    # VR(q) = Var(q日收益) / (q * Var(1日收益));<1 均值回归,>1 动量
    r = ret.dropna()
    var1 = r.var(ddof=1)
    varq = r.rolling(q).sum().dropna().var(ddof=1)
    return varq / (q * var1)

for q in (2, 5, 10):
    vr = variance_ratio(ret, q)
    print(f"方差比 VR({q})={vr:.3f} → {'均值回归' if vr < 1 else '动量'}倾向")

第 4 步:批量给一篮子股票“贴标签”

codes = ["600519.SH", "000001.SZ", "601318.SH", "000858.SZ", "300750.SZ"]
data = af.klines.batch(codes, period="1d", count=500, adjust="forward", to_dataframe=True)
rows = []
for s, k in data.items():
    r = k.sort_values("trade_date")["close"].pct_change().dropna()
    a1 = r.autocorr(lag=1); t = 1.96 / np.sqrt(len(r))
    tag = "回归" if a1 < -t else ("动量" if a1 > t else "随机")
    rows.append({"symbol": s, "lag1": round(float(a1), 4), "类型": tag})
print(pd.DataFrame(rows).to_string(index=False))

关键坑与注意事项

常见问题(FAQ)

Q:lag-1 自相关为负代表什么? A:代表短期均值回归——今天涨明天倾向回落、今天跌明天倾向反弹,这类票做低吸/抄底比追涨更合理。

Q:方差比 VR 怎么解读? A:VR(q)<1 表示多日收益方差小于单日方差×q,呈均值回归;>1 表示动量延续。与自相关互相印证。

Q:多少样本才够? A:至少 250+(约一年)日收益,越多越稳。小样本的自相关显著性低,容易误判。

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

小结

判断一只票适合「追涨」还是「抄底」,可用收益率自相关量化:lag-1 显著为负→均值回归(抄底),显著为正→动量(追涨),不显著→别硬套方向。用 AlphaFeed 取前复权日收益,autocorr + 方差比几行就能给个股贴标签。关键是用前复权、看显著性、滚动验证,并最终以完整回测确认。

相关链接:


免责声明:本文仅为技术与数据接口使用示例,代码与策略仅供学习研究,不构成投资建议。市场有风险,历史数据不代表未来表现。