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

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

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

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

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

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

python 复制代码
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 步:计算各阶自相关

python 复制代码
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/√N 95% 显著性近似阈值 超出才算显著
多阶自相关 记忆的衰减/周期 看回归/动量持续几日

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

python 复制代码
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 步:批量给一篮子股票"贴标签"

python 复制代码
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))

关键坑与注意事项

  • 用前复权收益:除权日伪跳变会污染自相关。
  • 看统计显著性 :小样本的自相关易是噪音,用 ±1.96/√N 近似阈值,别把不显著的值当信号。
  • 自相关会随时间变化:某段均值回归、另一段动量,可滚动计算观察稳定性,别用一段结论套所有时期。
  • 日频 vs 其它频率:结论依赖频率,日频回归/动量与周频可能不同。
  • A 股整体偏弱动量/短期回归:个股差异大,务必逐只检验,别套用笼统结论。
  • 这是方向性参考不是圣杯:自相关只提示适合哪类策略,具体仍需完整回测验证。

常见问题(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 + 方差比几行就能给个股贴标签。关键是用前复权、看显著性、滚动验证,并最终以完整回测确认。

参考

相关推荐
素师良码1 小时前
第10篇:屏ESD Check内核逻辑驱动代码完整拆解
android
随遇丿而安1 小时前
第18周:ViewModel 基础功能 + 架构优化
android
denlaku1 小时前
JDK 15 新特性详解
java·开发语言
用户7783366132111 小时前
选 SERP API 别靠感觉:用 SerpBase 实测的评估脚本与判定标准
python·api
用户019027581611 小时前
如何用 Python 计算 BRAR 情绪指标(AR/BR)?
python
荣码1 小时前
LangSmith可观测性:AI应用出bug根本不知道哪里出了问题,我踩了4个坑
java·python
滴滴答答哒1 小时前
C# 技巧:优雅实现对象的“局部更新”与“字段合并”
开发语言·c#
在世修行1 小时前
智学文枢:AI 产出的持久化之道
python
CaptainT1 小时前
第 1 卷:执行模型与基础语法
python