🚀 AI 一键生成 joinquant 策略代码
立即体验

joinquant 龙虎榜数据应用:如何追踪主力机构席位资金?

joinquant | 发布时间: 2026/7/22
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 龙虎榜数据应用:如何追踪主力机构席位资金?

Question: 如何在聚宽策略中通过 get_billboard_list 获取前一日龙虎榜并筛选买入金额占比高的股票?

解决方案

joinquant 龙虎榜数据应用:如何追踪主力机构席位资金?

在 A 股市场中,**龙虎榜(Billboard)**是追踪游资和机构席位动向的重要风向标。通过分析龙虎榜数据,量化交易者可以识别出主力资金高度关注、买入意愿强烈的标的。本文将详细介绍如何在 JoinQuant(聚宽) 平台中,利用 get_billboard_list API 获取前一日的龙虎榜数据,并筛选出买入金额占比(buy_rate)较高的股票进行追踪。


一、核心 API 介绍:get_billboard_list

聚宽提供了 get_billboard_list 函数,用于获取指定日期区间内的龙虎榜详细数据。

1. 函数原型

get_billboard_list(stock_list, start_date, end_date, count)

2. 关键参数说明

  • stock_list: 一个股票代码的 list。当值为 None 时,返回指定日期的所有股票。
  • end_date: 结束日期。
  • count: 交易日数量,可以与 end_date 同时使用,表示获取 end_datecount 个交易日的数据(含 end_date 当日)。

3. 返回值关键字段

返回一个 pandas.DataFrame,其中对我们筛选主力资金最关键的字段包括:

  • code: 股票代码
  • day: 日期
  • direction: 资金方向(ALL 表示汇总,BUY 表示买,SELL 表示卖)
  • buy_value: 买入金额(元)
  • buy_rate: 买入金额占比(买入金额 / 市场总成交额)
  • net_value: 净额(买入金额 - 卖出金额)

二、策略实现思路

  1. 开盘前准备:在 before_trading_start 或每日定时任务中,获取前一个交易日(context.previous_date)的龙虎榜数据。
  2. 数据清洗与筛选
    • 过滤出 direction == 'ALL' 的汇总数据,或者直接筛选 direction == 'BUY' 的买入席位数据。
    • 按照买入金额占比 buy_rate 进行降序排列。
    • 筛选出 buy_rate 大于设定阈值(例如 5% 或 10%)的股票,这代表主力资金买入强度极高,对股价有较强的控盘能力。
  3. 执行交易:在开盘时(09:30)对筛选出的高占比股票进行买入或加入自选股池观察。

三、Python 策略源码示例

以下是一个在 JoinQuant 平台上运行的完整策略示例,展示了如何获取前一日龙虎榜并筛选买入占比高的股票进行买入操作:

# 导入聚宽函数库
import jqdata
import pandas as pd

def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 设定交易税费
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    # 设定筛选阈值:买入金额占当天总成交额的比例大于 8%
    g.buy_rate_threshold = 0.08
    # 每日最大持仓股票数
    g.max_hold_count = 5
    
    # 每天早上 9:30 运行交易函数
    run_daily(market_open, time='09:30')

def before_trading_start(context):
    # 获取前一个交易日的龙虎榜数据
    # stock_list=None 表示获取所有股票
    df = get_billboard_list(stock_list=None, end_date=context.previous_date, count=1)
    
    if df.empty:
        g.target_stocks = []
        log.info("前一日无龙虎榜数据")
        return
        
    # 筛选出方向为 BUY(买入席位)或 ALL(汇总)的数据
    # 这里我们选择 direction == 'ALL' 的汇总数据来评估整日主力买入占比
    df_all = df[df['direction'] == 'ALL']
    
    # 过滤出买入占比大于阈值的股票,并按占比降序排列
    df_filtered = df_all[df_all['buy_rate'] > g.buy_rate_threshold]
    df_sorted = df_filtered.sort_values(by='buy_rate', ascending=False)
    
    # 获取去重后的股票代码列表
    g.target_stocks = list(df_sorted['code'].unique())[:g.max_hold_count]
    log.info("今日龙虎榜主力高比例买入候选股: %s" % g.target_stocks)

def market_open(context):
    # 1. 卖出不在候选股池中的持仓股票(实现每日换仓)
    current_positions = list(context.portfolio.positions.keys())
    for stock in current_positions:
        if stock not in g.target_stocks:
            order_target(stock, 0)
            log.info("卖出非龙虎榜标的: %s" % stock)
            
    # 2. 买入新的候选股
    if not g.target_stocks:
        return
        
    # 计算可用资金并均分
    available_cash = context.portfolio.available_cash
    buy_count = len(g.target_stocks)
    
    if buy_count > 0:
        cash_per_stock = available_cash / buy_count
        for stock in g.target_stocks:
            # 检查是否停牌
            current_data = get_current_data()
            if not current_data[stock].paused:
                order_value(stock, cash_per_stock)
                log.info("买入龙虎榜高占比股: %s,分配资金: %.2f" % (stock, cash_per_stock))

四、注意事项与策略优化建议

  1. 剔除 ST 与退市股:龙虎榜中经常出现异常波动的 ST 股票,建议在筛选时结合 get_current_data()is_st 属性进行过滤。
  2. 结合席位类型:龙虎榜数据中包含“机构专用”席位和“营业部”席位。机构席位通常代表中长期价值资金,而著名游资营业部则代表短期热钱。可以通过解析 sales_depart_name 字段进一步精细化筛选。
  3. 防范追高风险:龙虎榜股票通常在前一日已经历了大涨(甚至涨停),次日开盘直接买入可能面临高开低走的“接盘”风险。建议配合技术指标(如均线、量比)或设置限价单(LimitOrderStyle)进行保护性买入。