3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 A 股市场中,**龙虎榜(Billboard)**是追踪游资和机构席位动向的重要风向标。通过分析龙虎榜数据,量化交易者可以识别出主力资金高度关注、买入意愿强烈的标的。本文将详细介绍如何在 JoinQuant(聚宽) 平台中,利用 get_billboard_list API 获取前一日的龙虎榜数据,并筛选出买入金额占比(buy_rate)较高的股票进行追踪。
get_billboard_list聚宽提供了 get_billboard_list 函数,用于获取指定日期区间内的龙虎榜详细数据。
get_billboard_list(stock_list, start_date, end_date, count)
stock_list: 一个股票代码的 list。当值为 None 时,返回指定日期的所有股票。end_date: 结束日期。count: 交易日数量,可以与 end_date 同时使用,表示获取 end_date 前 count 个交易日的数据(含 end_date 当日)。返回一个 pandas.DataFrame,其中对我们筛选主力资金最关键的字段包括:
code: 股票代码day: 日期direction: 资金方向(ALL 表示汇总,BUY 表示买,SELL 表示卖)buy_value: 买入金额(元)buy_rate: 买入金额占比(买入金额 / 市场总成交额)net_value: 净额(买入金额 - 卖出金额)before_trading_start 或每日定时任务中,获取前一个交易日(context.previous_date)的龙虎榜数据。direction == 'ALL' 的汇总数据,或者直接筛选 direction == 'BUY' 的买入席位数据。buy_rate 进行降序排列。buy_rate 大于设定阈值(例如 5% 或 10%)的股票,这代表主力资金买入强度极高,对股价有较强的控盘能力。09:30)对筛选出的高占比股票进行买入或加入自选股池观察。以下是一个在 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))
get_current_data() 的 is_st 属性进行过滤。sales_depart_name 字段进一步精细化筛选。LimitOrderStyle)进行保护性买入。