3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)平台中,获取龙虎榜数据主要使用 get_billboard_list 函数。要找出知名游资买入的股票,你需要先定义一份“知名游资营业部”的名单,然后通过筛选龙虎榜数据中 sales_depart_name(营业部名称)字段来匹配。
以下是具体的实现步骤和完整的策略代码示例。
get_billboard_list 获取指定日期的龙虎榜数据。通常在回测中,我们使用前一交易日(context.previous_date)的数据,因为龙虎榜数据是在收盘后公布的,用于指导当天的交易。buy_value)大于0 或者 净买入额(net_value)大于0 的记录。# -*- coding: utf-8 -*-
from jqdata import *
def initialize(context):
# 设定基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 过滤掉order系列API产生的比error级别低的log
log.set_level('order', 'error')
# 设定手续费
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 定义知名游资营业部名单 (示例名单,需根据市场热点自行更新)
g.famous_hot_money = [
'华泰证券股份有限公司深圳益田路荣超商务中心证券营业部',
'中信证券股份有限公司上海溧阳路证券营业部',
'中国银河证券股份有限公司绍兴证券营业部',
'国泰君安证券股份有限公司上海江苏路证券营业部',
'华鑫证券有限责任公司上海分公司',
'东方财富证券股份有限公司拉萨团结路第二证券营业部', # 散户大本营,有时也被视为一种合力
'中信证券股份有限公司西安朱雀大街证券营业部'
]
# 每天开盘时运行
run_daily(market_open, time='09:30')
def market_open(context):
# 1. 获取前一交易日的日期
prev_date = context.previous_date
# 2. 获取前一交易日的龙虎榜数据
# stock_list=None 表示获取所有股票
df = get_billboard_list(stock_list=None, end_date=prev_date, count=1)
target_stocks = []
if not df.empty:
# 3. 筛选逻辑
# 筛选营业部在我们的名单中的记录
hot_money_df = df[df['sales_depart_name'].isin(g.famous_hot_money)]
# 筛选买入金额大于0的记录 (即游资有买入行为)
# 也可以修改为 net_value > 0 (净买入)
buy_df = hot_money_df[hot_money_df['buy_value'] > 0]
# 获取去重后的股票代码列表
target_stocks = list(set(buy_df['code'].tolist()))
log.info("昨日知名游资买入股票: %s" % target_stocks)
else:
log.info("昨日无龙虎榜数据或获取失败")
# 4. 交易逻辑
# 获取当前持仓
current_holdings = list(context.portfolio.positions.keys())
# 卖出不在目标列表中的股票
for stock in current_holdings:
if stock not in target_stocks:
order_target_value(stock, 0)
# 买入目标股票
if len(target_stocks) > 0:
# 简单的资金分配:等权买入
cash_per_stock = context.portfolio.available_cash / len(target_stocks)
for stock in target_stocks:
order_value(stock, cash_per_stock)
get_billboard_list 函数:
end_date=prev_date, count=1 表示获取截止到前一交易日的一天数据。code (代码), sales_depart_name (营业部名称), buy_value (买入金额), sell_value (卖出金额), net_value (净额) 等字段。g.famous_hot_money:
get_billboard_list 的结果来核对名称。筛选条件:
df['sales_depart_name'].isin(...):利用 Pandas 的功能快速筛选出特定营业部的行。buy_value > 0:确保该营业部是买入方(龙虎榜有时也会显示卖出前五)。g.famous_hot_money 列表需要定期维护和更新才能保持有效性。Q: 如何查看龙虎榜数据中具体的营业部名称格式?
A: 你可以在研究环境中运行 df = get_billboard_list(end_date='2023-01-01', count=1),然后打印 df['sales_depart_name'].unique() 来查看系统中存储的标准营业部名称格式。
Q: get_billboard_list 能获取实时的龙虎榜数据吗?
A: 不能。龙虎榜数据由交易所收盘后统一公布,聚宽通常在当天收盘后(约17:00-20:00)更新数据。因此回测和实盘中,通常是在T+1日使用T日的数据。
Q: 如何筛选净买入额(买入-卖出)大于1000万的游资股票?
A: 可以在代码筛选逻辑中增加条件:buy_df = hot_money_df[(hot_money_df['net_value'] > 10000000)]。注意 net_value 的单位是元。