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

参考

相关推荐
深蓝AI3 分钟前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
道尔柯南1 小时前
C++ string 类详解:从常用接口到深拷贝,彻底掌握字符串处理
android·java·c++
岁月宁静1 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静1 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个2 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
唐诺2 小时前
5、Android JNI 动态注册中的“签名“详解
android·jni
小肝一下4 小时前
3.基础语法(3)
python
深蓝AI4 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python
心祭丫丫5 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱你真是太好了5 小时前
Skill 索引瘦身与渐进加载
python