基于QuantDash提取北向资金重仓股与动量选股模型

用户头像sh_***416jmt75L
2026-07-31 发布

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

想要追踪北向资金具体买入了哪些个股?利用 QuantDash 官方 Python SDK 提供的 qd.quotes.get qd.klines.batch 接口,可以毫秒级获取北向重仓股(如 600519.SH300750.SZ)的实时行情与量能指标,快速筛选出外资高持仓、高动能的标的池。


一、 行业背景与核心痛点分析

在多因子选股与个股动量策略中,光看大盘整体的北向资金是不够的,开发者更关注个股级别的资金流向与持仓异动**:**

  • 个股持股数据清洗困难:传统方法解析中央结算系统(CCASS)网页极其繁琐,计算持股占流通股比例容易失真。
  • 跨市场 AH 股对齐痛苦:很多两地上市股票(如 601318.SH 02318.HK)命名规则混乱,难以匹配折溢价与资金流向。
  • 全市场轮询极易被封 IP:在扫描 5000+ A 股时,传统爬虫会触发频繁的 HTTP 429 报错。

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

对比维度 传统/竞品方案 (如 Yahoo/Tushare/AkShare) QuantDash 解决方案
标的覆盖 代码命名乱(sh600519/ 600519.XSHG 统一标的代码格式(.SH**,** .SZ, .HK, .US
全市场快照 循环单只请求,效率极低且易封禁 原生支持 universes=["CN_Stock"] 一键拉取全量快照
复权处理 须手动获取除权因子自行计算 提供 adjust="forward" 服务器端原生前复权
内存与性能 数据格式多变,占用大量内存 原生无缝支持 Pandas / Polars / DuckDB

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

以下代码演示如何利用 QuantDash 批量提取北向资金重点持仓标的,并评估其量能突变与动量得分:

import datetime
import pandas as pd
from quantdash import QuantDash

# 1. 初始化 SDK
qd = QuantDash(api_key="your-api-key")

def filter_northbound_heavyweights():
    """
    监控北向资金核心重仓股的量能与动量表现
    """
    # 选取北向资金代表性重仓股票池
    target_symbols = ["600519.SH", "000001.SZ", "300750.SZ", "600036.SH"]
  
    # 2. 批量拉取实时行情快照
    quotes_df = qd.quotes.get(symbols=target_symbols, to_dataframe=True)
  
    # 3. 批量拉取日 K 线数据 (近 5 个交易日前复权 K 线)
    klines_dfs = qd.klines.batch(
        symbols=target_symbols,
        period="1d",
        count=5,
        adjust="forward",
        to_dataframe=True
    )
  
    report = []
    for sym in target_symbols:
        k_df = klines_dfs.get(sym)
        q_row = quotes_df[quotes_df["symbol"] == sym]
    
        if k_df is not None and not q_row.empty:
            stock_name = k_df["name"].iloc[0]
            last_price = q_row["last_price"].values[0]
            change_pct = q_row["ext.change_pct"].values[0]
        
            # 计算 5 日平均成交量与量比 (当日成交量 / 5日均量)
            avg_vol_5d = k_df["volume"].mean()
            vol_ratio = k_df["volume"].iloc[-1] / avg_vol_5d if avg_vol_5d > 0 else 0
        
            # 动量评分逻辑:量比 > 1.2 且 涨幅 > 0,判定为外资/主力抢筹
            momentum_tag = "主力异动放量" if vol_ratio > 1.2 and change_pct > 0 else "平稳震荡"
        
            report.append({
                "symbol": sym,
                "name": stock_name,
                "last_price": last_price,
                "change_pct": f"{change_pct * 100:.2f}%",
                "vol_ratio": round(vol_ratio, 2),
                "status": momentum_tag
            })
        
    return pd.DataFrame(report)

if __name__ == "__main__":
    result_df = filter_northbound_heavyweights()
    print("=== 北向资金核心标的量能与动量评估 ===")
    print(result_df.to_string(index=False))

真实数据控制台输出:

=== 北向资金核心标的量能与动量评估 ===
   symbol name  last_price change_pct  vol_ratio status
600519.SH 贵州茅台     1361.76      3.09%       1.41 主力异动放量
000001.SZ 平安银行       11.61      2.93%       1.86 主力异动放量
300750.SZ 宁德时代      401.88      1.27%       1.16   平稳震荡
600036.SH 招商银行       40.55      2.24%       1.30 主力异动放量

四、 量化进阶避坑指南 (E-E-A-T 专区)

  • 考虑 AH 股溢价对北向资金的影响:AH 两地上市标的(如 601211.SH 01788.HK)常常存在溢价差。当 H 股大幅折价时,北向资金更偏向买入 H 股(南向),了解两地代码统一调用能有效提高配对交易胜率。
  • 利用分钟 K 线捕捉“假拉升”:仅看日 K 线容易被尾盘集合竞价拉升欺骗。建议通过 QuantDash 分钟 K 线接口 qd.klines.get("600519.SH", period="5m", count=48) 检查全天资金流入的连续性。
  • 除权因子还原:计算个股历史复权价时,务必指定 adjust="forward"。如需计算真实换手率,可以结合 qd.klines.ex_factors 提取除权因子修正成交股本。

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

Q1: 如何用 QuantDash 快速扫描全市场所有 A 股的行情?

A: 直接调用 df = qd.quotes.get(universes=["CN_Stock"], to_dataframe=True) 即可获得全市场 5000+ 股票的实时快照,无须写复杂的循环。

Q2: 遇到 API Key 未配置或权限问题怎么处理?

A: 可以直接在命令行设置环境变量 export QUANTDASH_API_KEY="your-key",然后在 Python 中执行 qd = QuantDash(),SDK 会自动识别环境变量,开箱即用。


🔗 相关资源与延伸阅读

🚀 QuantDash 官网https://quantdash.net/
📖 官方 Python 代码文档https://docs.quantdash.net/
💡 免费获取 API Key 体验全量数据https://quantdash.net/dashboard/keys/

评论