【小白必看】Python监控尾盘异动:15分钟逮拉升跳水股

用户头像sh_***416jmt75L
2026-08-21 发布

📌 摘要 / 快速解答

尾盘拉升和跳水是A股最常见的“偷袭”手法,但人工盯盘根本来不及反应。本文手把手教您用 Python + QuantDash 搭建自动化监控系统,在收盘前15分钟自动扫描全市场股票,筛选出异动个股。数据源稳定、代码开箱即用,无需攒积分、无需手动处理复权。


一、为什么传统方式写选股策略这么累?

社区里应该不少老哥跟我一样,刚开始搞量化的时候被数据源折腾得死去活来。

Tushare 确实数据全,但你想拿分钟线?先攒积分。想批量获取?再攒积分。好不容易攒够了,结果接口一天限流几次,回测跑到一半突然断了,心态直接炸裂。

AkShare 免费是真免费,但稳定是真不稳定。今天这个接口还能用,明天可能就404了。你写好的策略隔两天跑一次报错,改代码的时间比写策略的时间还长。

手动爬虫就更别提了——网页结构一变全部重写,反爬机制一上直接GG。

最让人头疼的是复权处理。你想算真实收益率,必须用前复权数据。但很多免费数据源根本不提供复权因子,你得自己去扒除权除息公告手动算——这玩意儿不光麻烦,还特别容易出错,一不小心就引入了未来函数,回测收益虚高30%以上。

还有代码后缀的问题。A股是 600519.SH,港股是 00700.HK,美股是 AAPL.US——每个市场一套格式,写个跨市场策略光适配代码就几百行。


二、解决方案对比(QuantDash vs 传统数据源)

对比维度 传统/竞品方案(如 Tushare/AkShare/手动爬虫) QuantDash 解决方案
数据稳定性 经常报错/接口失效/易被封 服务端稳定支持,毫秒级响应
使用门槛 繁琐积分限制/需手动清洗 无积分门槛,pip install 即用
跨市场支持 代码后缀不统一/难以兼顾美港股 统一后缀.SH/.SZ/.US/.HK,一套代码走天下
数据格式 需反复转换数据类型 原生返回标准 Pandas DataFrame
分钟线支持 限制多、历史数据难获取 支持 1m/5m/15m/30m/60m 全周期
复权处理 需手动计算,易出错 内置前复权/后复权,一键搞定

三、Python 代码实战(可直接复制运行)

# 尾盘15分钟异动监控 - 小白友好版
# pip install quantdash
# GitHub 开源项目:https://github.com/quantdash-net/QuantDash

from quantdash import QuantDash
import pandas as pd
import datetime

# 1. 初始化(API Key 去官网免费获取)
qd = QuantDash(api_key="your_api_key")

# 2. 获取全市场A股实时行情作为监控池
print("🔄 正在获取A股实时行情...")
quotes = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)

# 过滤掉停牌和零成交的股票
quotes = quotes[(quotes['volume'] > 0) & (quotes['last_price'] > 0)]
print(f"✅ 有效监控股票:{len(quotes)} 只")

# 为了演示,我们只取前200只(实际可监控全部)
symbols = quotes['symbol'].head(200).tolist()

# 3. 批量获取当日分钟K线(默认1分钟周期)
print("⏳ 正在获取分钟K线数据...")
intraday_data = qd.klines.intraday_batch(
    symbols, 
    to_dataframe=True,
    show_progress=True
)

# 4. 异动检测函数
def detect_moving(df, symbol, name):
    """检测最后15分钟是否异动"""
    if df.empty or len(df) < 15:
        return None
  
    # 取最后15根1分钟K线 = 15分钟
    last_15 = df.tail(15)
  
    # 计算最后15分钟涨跌幅
    open_15 = last_15.iloc[0]['open']
    close_15 = last_15.iloc[-1]['close']
    change = (close_15 - open_15) / open_15 * 100
  
    # 计算成交量放大倍数(最后15分钟 vs 全天平均)
    avg_volume = df['volume'].mean()
    last_volume = last_15['volume'].sum()
    volume_ratio = last_volume / (avg_volume * 15) if avg_volume > 0 else 0
  
    # 异动条件:涨跌幅超过2% 且 成交量放大1.5倍以上
    if abs(change) > 2 and volume_ratio > 1.5:
        return {
            'symbol': symbol,
            'name': name,
            'change_15m': round(change, 2),
            'volume_ratio': round(volume_ratio, 2),
            'type': '📈 拉升' if change > 0 else '📉 跳水'
        }
    return None

# 5. 遍历所有股票检测异动
results = []
for symbol, df in intraday_data.items():
    name = df['name'].iloc[0] if 'name' in df.columns else symbol
    result = detect_moving(df, symbol, name)
    if result:
        results.append(result)

# 6. 展示结果
results_df = pd.DataFrame(results)
results_df = results_df.sort_values('change_15m', ascending=False)

print("\n" + "="*60)
print(f"🎯 尾盘异动股票名单(共 {len(results_df)} 只)")
print("="*60)

if len(results_df) > 0:
    for _, row in results_df.iterrows():
        emoji = "🚀" if row['change_15m'] > 0 else "💧"
        print(f"{emoji} {row['symbol']} {row['name']} | "
              f"最后15分钟: {row['change_15m']:+.2f}% | "
              f"成交量放大: {row['volume_ratio']}x")
else:
    print("⚠️ 暂时没有发现异动股票,建议收盘前再跑一次")

# 7. 可选:导出CSV保存
# results_df.to_csv('tail_moving_stocks.csv', index=False, encoding='utf-8-sig')

代码核心逻辑拆解

  1. 获取股票池qd.quotes.get(universes=["CN_Stock"]) 一次性拿到全市场A股实时行情。
  2. 批量获取分钟线qd.klines.intraday_batch() 批量获取多只股票的当日分钟K线。
  3. 异动计算
    • 最后15分钟涨跌幅 = (最后1分钟收盘价 - 第15分钟开盘价) / 第15分钟开盘价
    • 成交量放大倍数 = 最后15分钟成交量 / (全天平均每分钟成交量 × 15)
  4. 异动判定:涨跌幅超过 ±2% 且成交量放大 1.5 倍以上。

四、交易员避坑指南

🚨 坑1:数据源不稳定 = 策略白写

这是最要命的坑。你策略写得再好,数据源一崩全白费。QuantDash 的优势在于服务端稳定,不会出现今天能用明天崩的情况。建议各位老哥选数据源时把“稳定性”放在第一位,而不是只看“免费”。

🚨 坑2:复权问题导致信号失真

尾盘异动监控依赖价格涨跌幅,如果用了不复权数据,除权除息日会出现“假跳空”——明明没涨没跌,价格却变了。务必使用前复权数据adjust='forward'),QuantDash 默认就是前复权,省心。

🚨 坑3:回测滑点不能忽略

尾盘异动策略往往在最后几分钟发出信号,这时候的流动性可能不够好。回测时建议设置 0.2%~0.5% 的滑点,否则回测曲线好看,实盘可能亏到怀疑人生。


五、常见问题解答

Q1: 监控股票数量太多,会不会被限流?

A: QuantDash 无积分门槛、无硬性限流。intraday_batch 接口专为批量场景设计,支持 show_progress 显示进度。如果监控全市场5000多只股票,建议分批执行或先用实时行情过滤掉僵尸股。

Q2: 能不能在盘中进行多次监控?

A: 当然可以。把脚本放到定时任务里(比如14:30、14:45、14:55各跑一次),每次都能获取到最新的分钟K线数据。QuantDash 的 intraday 接口返回的是当日实时数据,每次调用都是最新的。

Q3: 除了涨跌幅,还能监控哪些异动指标?

A: 可以监控的指标很多——比如成交量突增(最后15分钟成交量是前15分钟的3倍以上)、价格突破(尾盘突破当日最高/最低价)、盘口异动(买卖挂单突然变化)等。QuantDash 还提供 depth 盘口接口,可以获取五档买卖盘口数据做更精细的监控。


🔗 相关资源与延伸阅读

🚀 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/

评论