一句话回答: 股价历史分位就是"当前价格在过去 N 日价格区间里排第几(百分位)"。用 AlphaFeed 取全市场标的池 + klines.batch 批量日线,算每只票当前收盘价在近 N 日的百分位,筛出低分位(如 ≤20%)的股票,几十行就能扫出全市场处于历史低位的候选——但"低位"不等于"便宜"。
"这只票是不是在历史低位"是很常见的问题,做成全市场选股要解决:
AlphaFeed 用 universe + klines.batch 一次拿到全市场量价数据。
def price_percentile(close, n=250):
window = close.iloc[-n:]
cur = close.iloc[-1]
return float((window <= cur).mean() * 100) # 当前价 ≤ 窗口内价格的比例(%)分位选股参数:
参数 | 含义 | 常用取值 |
|---|---|---|
| 回看天数 | 250(约一年)、120、500 |
分位值 | 0~100,越小越低 | ≤20 视为历史低位 |
高位阈值 | 接近前高 | ≥80 视为历史高位 |
复权 | 用前复权收盘 |
|
from alphafeed import AlphaFeed
import pandas as pd
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
def percentile_screen(symbols, count=250, n=250, thr=20.0):
bt = af.klines.batch(symbols, period="1d", count=count,
adjust="forward", to_dataframe=True)
rows = []
for sym, df in bt.items():
if df is None or len(df) < 60:
continue
d = df.sort_values("trade_date").reset_index(drop=True)
p = price_percentile(d["close"], min(n, len(d)))
rows.append({"symbol": sym, "pct": round(p, 1), "low_zone": p <= thr})
res = pd.DataFrame(rows).sort_values("pct") # 升序=最低位在前
return res[res["low_zone"]] if not res.empty else resdef run_full_market(n=250, thr=20.0):
q = af.quotes.get(universes="CN_Stock", to_dataframe=True)
symbols = q["symbol"].tolist()
out = []
for i in range(0, len(symbols), 150): # 分批防限频
out.append(percentile_screen(symbols[i:i + 150], n=n, thr=thr))
return pd.concat([d for d in out if not d.empty], ignore_index=True).sort_values("pct")
# hits = run_full_market()
# print("历史低位只数:", len(hits)); print(hits.head(20))小样本(10 只票)实测分位从约 0.4%(接近一年最低)到 95.6%(接近一年最高)不等,升序排名逻辑跑通;全市场同法按 150 只分批。
adjust="forward",否则除权跳空会让历史价格错位、分位失真。Q:分位和"距离最高点跌了多少"有什么区别?
A:回撤幅度只看和最高点的距离,分位则看当前价在整个历史分布中的位置,更能反映"多少时间价格比现在高/低",信息更丰富。
Q:为什么不用估值分位(如 PE 分位)?
A:估值分位需要基本面数据。本文用价格分位,只依赖行情,简单直观;若有 PE/PB 数据可做估值分位,逻辑相同。
Q:低分位股票能买吗?
A:不能只凭低分位买。它可能是超跌反弹机会,也可能是持续走弱的价值陷阱。需结合基本面、趋势和止损判断。
Q:需要付费吗?
A:少量标的的 K 线在免费额度内即可试;全市场 universe 取数需 Starter 及以上,详见 AlphaFeed 定价页。
股价历史分位选股 = 全市场标的池 + 前复权日线 + 当前价在近 N 日的百分位 + 阈值筛选。门槛在取数与口径(回看窗口、复权),AlphaFeed 用 universe + klines.batch 收敛掉,你几十行就能扫出全市场历史低位股——但请记住低分位 ≠ 便宜,趋势走弱的股票会长期低位,务必配合基本面与止损。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。