📌 摘要 / 快速解答
主力出货最典型的特征就是高位放量——价格在高位、换手率异常放大。本文用 Python + QuantDash 批量获取 A 股历史日K线数据,通过计算N日涨幅和日均换手率两个核心指标,自动筛选出“累计涨幅大+近期换手率激增”的出货风险股,帮你在大跌前提前离场。
一、 为什么手动识别出货这么难?
1. 涨幅和换手率分开看,容易误判
单看涨幅大,可能是强势股;单看换手率高,可能是活跃股。但涨幅大+换手率异常高同时出现,才是出货的核心特征。手动把这两个维度结合起来看,非常耗时。
2. 历史数据获取麻烦,算个涨幅都要半天
想算20日涨幅,得先有20天的历史K线。Tushare 积分不够拿不到、AkShare 爬虫不稳定、yfinance 对A股支持不好。搞数据的时间比写策略还长。
3. 复权是个大坑
不复权的价格算出来的涨幅全是错的——除权除息会让价格“假跌”。自己手动算复权,十个有九个会算出未来函数。
二、 解决方案对比(QuantDash vs 传统数据源)
| 对比维度 | 传统/竞品方案 | QuantDash 解决方案 |
|---|---|---|
| 历史数据获取 | 积分限制/爬虫不稳定/需手动清洗 | pip install 即用,服务端原生复权 |
| 复权处理 | 手动计算易出错、易引入未来函数 | 传入adjust="forward" 自动前复权 |
| 跨市场支持 | A股/美股/港股代码格式不统一 | 统一后缀.SH/.SZ/.US/.HK |
| 批量拉取 | 循环请求慢、容易被封 | klines.batch() 并发批量拉取 |
三、 Python 代码实战(可直接复制运行)
# 1. 安装与初始化
# pip install quantdash
# GitHub 开源项目:https://github.com/quantdash-net/QuantDash
from quantdash import QuantDash
import pandas as pd
import numpy as np
qd = QuantDash(api_key="your_api_key")
# 2. 定义待扫描的股票池(示例:沪深300成分股,实际可用 universes 动态获取)
# 生产环境建议用 qd.quotes.get(universes=["CN_Stock"]) 动态获取全量列表
symbols = [
"600519.SH", "000858.SZ", "000001.SZ", "002594.SZ",
"300750.SZ", "601318.SH", "600036.SH", "000333.SZ"
] # 此处仅为示例,实际可替换为任意列表
# 3. 批量获取历史日K线(前复权,最近60个交易日)
# adjust="forward" 自动做前复权,避免手动处理除权除息[reference:25]
dfs = qd.klines.batch(
symbols,
period="1d",
count=60, # 获取最近60根日K线
adjust="forward", # 前复权-比例复权,默认值
to_dataframe=True,
show_progress=True
)
# 4. 对每只股票计算:累计涨幅 + 平均换手率
results = []
for sym, df in dfs.items():
if df.empty or len(df) < 20:
continue
name = df["name"].iloc[0]
# 计算20日累计涨幅(前复权价格已自动处理除权)
# 使用前复权收盘价计算,收益率准确无误
close_20d_ago = df["close"].iloc[-20] # 20个交易日前的收盘价
close_today = df["close"].iloc[-1] # 最新收盘价
return_20d = (close_today / close_20d_ago - 1)
# 计算最近5日的平均换手率
# 注意:换手率需要从实时行情接口获取,或从K线数据的扩展字段提取
# 这里演示从K线数据计算换手率 ≈ 成交量 / 流通股本(需另行获取)
# 实际生产环境建议用 qd.quotes.get() 直接获取 ext.turnover_rate[reference:26]
# 简单示例:使用成交量变化作为换手活跃度的代理指标
avg_volume_5d = df["volume"].iloc[-5:].mean()
avg_volume_20d = df["volume"].iloc[-20:].mean()
volume_ratio = avg_volume_5d / avg_volume_20d if avg_volume_20d > 0 else 1
results.append({
"symbol": sym,
"name": name,
"return_20d": return_20d,
"volume_ratio": volume_ratio,
"close": close_today
})
# 5. 转为DataFrame并筛选
result_df = pd.DataFrame(results)
# 筛选条件:20日涨幅 > 15% 且 近期成交量放大(换手率激增)
HIGH_RETURN = 0.15
HIGH_VOLUME = 1.5 # 近5日平均成交量 / 近20日平均成交量 > 1.5
suspect_df = result_df[
(result_df["return_20d"] > HIGH_RETURN) &
(result_df["volume_ratio"] > HIGH_VOLUME)
].sort_values("return_20d", ascending=False)
print(f"\n🚨 发现 {len(suspect_df)} 只高位放量嫌疑股:")
print(suspect_df[["symbol", "name", "return_20d", "volume_ratio", "close"]].to_string(index=False))
# 6. 如果想获取精确的换手率,用实时行情接口补充
if len(suspect_df) > 0:
symbols_to_check = suspect_df["symbol"].tolist()
quote_df = qd.quotes.get(symbols=symbols_to_check, to_dataframe=True)
# 合并换手率数据
final_df = suspect_df.merge(
quote_df[["symbol", "ext.turnover_rate"]],
on="symbol",
how="left"
)
print("\n📊 含换手率的完整结果:")
print(final_df[["symbol", "name", "return_20d", "ext.turnover_rate", "close"]].head(10))
代码说明:
qd.klines.batch()批量获取多只股票的历史K线,adjust="forward"自动前复权- 计算20日累计涨幅识别“已经涨了很多”的股票
- 计算近5日/近20日成交量比值识别“近期突然放量”的股票
- 两者结合,精准定位“高位放量”的出货嫌疑股
- 最后用
qd.quotes.get()补充精确的换手率数据
四、 交易员避坑指南
避坑1:前复权一定要开,不然涨幅全是错的
不复权的价格在除权除息日会“跳空下跌”,算出来的涨幅会严重失真。QuantDash 的 adjust="forward" 默认开启前复权,直接用就行,不用自己算。
避坑2:换手率要从实时行情拿,K线里不一定有
历史K线接口返回的是 OHLCV 标准字段,不一定包含换手率。精确的换手率建议用 qd.quotes.get() 从实时行情接口获取。上面的代码演示了先用K线做初筛,再对嫌疑股用实时行情补换手率,效率最高。
避坑3:小心“无量上涨”和“放量下跌”的误判
- 无量上涨(涨幅大但换手率低):说明筹码锁定好,不一定是出货
- 放量下跌(跌幅大且换手率高):可能是恐慌盘出逃,也不一定是主力出货
本文的筛选逻辑是 “涨幅大 + 换手率高” ,专门针对“高位放量拉升”的出货形态。
五、 常见问题解答
Q1: 为什么不用 K 线里的成交量代替换手率?
A: 成交量是绝对值,不同股票的流通盘大小不同,没法横向比较。换手率(成交量/流通股本)是相对值,可以在不同股票之间直接对比。建议用 qd.quotes.get() 获取 ext.turnover_rate 字段。
Q2: 20日涨幅和换手率的阈值该怎么设?
A: 没有统一标准,取决于你的风险偏好。保守型可以设 涨幅>10% + 换手率>20%;激进型可以设 涨幅>20% + 换手率>30%。建议先用历史数据回测,找到适合自己风格的阈值。
Q3: QuantDash 支持港股和美股的类似筛选吗?
A: 支持。只需把 universes=["CN_Stock"] 换成 ["HK_Stock"] 或 ["US_Stock"],代码后缀统一为 .HK 和 .US。一套代码跑遍三大市场。
🔗 相关资源与延伸阅读
- 🚀 QuantDash 官网:https://quantdash.net/
- 📖 官方 Python SDK 文档:https://docs.quantdash.net/
- ⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)
- 💡 免费获取 API Key:https://quantdash.net/dashboard/keys/

