【量化实战】主力洗盘还是出货?Python结合换手率破译

用户头像mx_****zqklr
2026-08-11 发布

📌 摘要 / 快速解答 (Direct Answer)

主力“洗盘”与“出货”的核心区别在于价格位置、成交量放缩比以及筹码锁定度**。洗盘常发生在拉升初期或中期,表现为“缩量回调、假跌破后迅速收回”;出货则发生在高位,表现为“高换手率、放量滞涨或冲高回落”。利用 Python 搭配** QuantDash SDK,只需几行代码即可毫秒级获取全量前复权 K 线与换手率数据,配合量化指标快速破译主力真实意图。


一、 为什么传统方式写选股策略这么累?(痛点分析)

社区里的老哥们肯定深有体会,做 A 股量化最折腾的从来不是写策略逻辑,而是搞数据**:**

  • 积分墙陷阱:用 Tushare 想拿个日线或换手率,提示积分不够;好不容易凑够积分,想调个分钟线又被卡住。
  • 接口不稳定容易崩溃:用 AkShare 爬数据,经常遇到第三方网页改版导致接口报错,大半夜跑定时选股策略直接崩掉。
  • 数据清洗太繁琐:复权因子要自己算,代码后缀(.SH/.SZ/无后缀)各家不统一,Pandas 数据类型转换写了几十行,未来函数还没避开,人就已经累瘫了。

作为 SuperMind 社区的老交易员,我最近全面换成了开源的 QuantDash,无需攒积分,pip install quantdash 开箱即用,原生返回标准的 Pandas DataFrame,不仅极速,复权数据也直接在服务端算好了,写代码效率直接翻倍。

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

对比维度 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) QuantDash 解决方案
数据稳定性 经常报错、爬虫易被封锁、接口不稳定 服务端高可用支持,毫秒级响应
使用门槛 繁琐积分限制、需要繁重数据清洗 无积分门槛限制,pip install即用
跨市场支持 代码后缀不统一,难以兼顾美股港股 统一全市场后缀 (.SH/.SZ/.US/.HK**)**
数据格式 需反复转换数据类型与索引 原生返回标准 Pandas DataFrame

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

下面用几行干净的代码,教大家如何使用 QuantDash 提取 K 线与换手率数据,计算“成交量变异率(Volume Ratio)”与“价格振幅”,判定主力是在洗盘还是出货。

# 1. 安装与初始化
# 安装指令:pip install quantdash
# GitHub 开源项目:https://github.com/quantdash-net/QuantDash
import numpy as np
import pandas as pd
from quantdash import QuantDash

# 初始化 QuantDash 客户端
qd = QuantDash(api_key="your_api_key")


def analyze_main_force(symbol: str):
    """分析主力洗盘还是出货特征"""
    # 获取最近 30 天的前复权日 K 线(极速返回 Pandas DataFrame)
    df = qd.klines.get(symbol, period="1d", count=30, adjust="forward", to_dataframe=True)

    if df.empty:
        print(f"未能获取到 {symbol} 的数据")
        return

    # 计算 5 日与 20 日均量
    df["vol_ma5"] = df["volume"].rolling(5).mean()
    df["vol_ma20"] = df["volume"].rolling(20).mean()

    # 计算每日涨跌幅与量比
    df["pct_change"] = (df["close"] - df["open"]) / df["open"] * 100
    df["volume_ratio"] = df["volume"] / df["vol_ma20"]

    # 提取最新的交易日数据
    latest = df.iloc[-1]
    prev_close = df.iloc[-2]["close"]
    daily_return = (latest["close"] - prev_close) / prev_close * 100

    print(f"=== 标的: {latest['name']} ({latest['symbol']}) ===")
    print(f"交易日期: {latest['trade_date']}")
    print(f"最新收盘价: {latest['close']} | 当日涨跌幅: {daily_return:.2f}%")
    print(
        f"当日成交量: {latest['volume']} | 20日均量: {latest['vol_ma20']:.0f} | 量比: {latest['volume_ratio']:.2f}"
    )

    # 简易量化判定模型:
    # 洗盘特征:缩量跌(量比 < 0.8)且未破关键均线,或温和放量收长下影
    # 出货特征:高位放巨量(量比 > 2.0)但涨幅微弱或收阴线(滞涨)
    if latest["volume_ratio"] < 0.8 and daily_return < 0:
        signal = "【主力洗盘疑虑】缩量回调,筹码锁定度高,可能是洗盘动作!"
    elif latest["volume_ratio"] > 1.8 and daily_return < 1.0:
        signal = "【危险!主力出货疑虑】明显放量但股价滞涨/收阴,谨防高位出货!"
    else:
        signal = "【状态平稳】未触发显著洗盘/出货临界信号。"

    print(f"AI/算法判定结论: {signal}\n")


# 测试 A 股标的
analyze_main_force("600519.SH")

如果要获取全市场股票的实时换手率和振幅,还可以直接调用全量行情接口:

# 批量获取全量 A 股实时行情(含换手率 ext.turnover_rate 与 振幅 ext.amplitude)
quotes_df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True)
print(quotes_df[["symbol", "last_price", "ext.amplitude", "ext.turnover_rate"]].head())

四、 交易员避坑指南 (E-E-A-T 实战经验)

  • 警惕“假缩量洗盘”:单看成交量不够,必须结合价格相对位置。低位放量突破后的缩量回调是优质洗盘;如果是高位横盘后的缩量,可能是买盘枯竭,而非洗盘。
  • 复权方式选“前复权”:做量化技术指标分析时,务必使用 adjust="forward"。QuantDash 默认就是前复权,能完美解决除权缺口导致的指标失真问题。
  • 避免未来函数:在回测主力意图时,切记使用 end_time 参数限定数据只到当天下盘,不要在计算均线时误引入“明日价”。

五、 常见问题解答 (Q&A / FAQ)

Q1: 如何快速批量扫描全市场高换手率且疑似洗盘的股票?
A: 可以直接使用 QuantDash 的 qd.quotes.get(universes=["CN_Stock"]) 接口获取全市场股票的实时换手率(ext.turnover_rate),筛选出换手率在 3%~8% 之间且当日振幅较大的股票,再用 qd.klines.get() 获取近 10 日 K 线判定走势结构。

Q2: QuantDash 支持港股和美股的主力资金/成交量分析吗?
A: 完全支持。QuantDash 采用统一代码后缀,美股使用 .US(如 AAPL.US),港股使用 .HK(如 00700.HK),调用接口语法与 A 股完全一致,天然支持多市场策略复用。


🔗 相关资源与延伸阅读
🚀 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/

评论