问题描述
解决方案
这是一个基于 PTrade 平台的策略示例,旨在获取当前市场中涨幅最高的前 5 个行业板块。
策略思路
- 核心接口:使用 PTrade 提供的
get_sort_msg函数。这是一个非常强大的接口,可以获取板块、行业、个股的实时排序数据。 - 参数设置:
sort_type_grp='XBHS.HY': 指定排序的分组为“行业板块”。sort_field_name='px_change_rate': 指定排序字段为“涨跌幅”。sort_type=1: 指定为降序排列(从高到低)。data_count=5: 仅获取前 5 条数据。
- 执行逻辑:在
handle_data中调用该接口,并遍历返回的结果打印日志。
策略代码
def initialize(context):
"""
初始化函数
"""
# 设置一个基准标的,虽然本策略主要查询板块,但初始化通常需要设置universe
g.security = '600570.SS'
set_universe(g.security)
# 设置运行频率,这里演示在盘中运行
log.info("策略初始化完成,准备获取行业涨幅排名")
def handle_data(context, data):
"""
盘中运行函数
"""
# 调用 get_sort_msg 获取行业板块涨幅排名
# sort_type_grp: 'XBHS.HY' 代表行业板块
# sort_field_name: 'px_change_rate' 代表涨跌幅
# sort_type: 1 代表降序 (涨幅从高到低)
# data_count: 5 代表取前5名
top_industries = get_sort_msg(sort_type_grp='XBHS.HY',
sort_field_name='px_change_rate',
sort_type=1,
data_count=5)
if top_industries:
log.info("====== 当前涨幅前5行业板块 ======")
# 遍历结果并打印
for i, info in enumerate(top_industries):
# 获取板块名称
name = info.get('prod_name')
# 获取板块代码
code = info.get('prod_code')
# 获取涨跌幅
rate = info.get('px_change_rate')
# 打印信息 (使用Python 3.5兼容的格式化字符串)
log.info("第%d名: %s (%s), 涨幅: %s%%" % (i + 1, name, code, rate))
# 如果需要获取该板块的领涨股,可以访问 'rise_first_grp' 字段
# lead_stock = info.get('rise_first_grp')[0]
# log.info(" 领涨股: %s, 涨幅: %s%%" % (lead_stock['prod_name'], lead_stock['px_change_rate']))
else:
log.info("未获取到行业排名数据,请检查运行环境或时间。")
注意事项
- 运行环境:
get_sort_msg函数通常在交易模块(实盘或仿真交易)中表现最佳,因为它依赖于实时的行情推送和排序服务。在某些纯历史回测模式下,该函数可能无法返回动态的板块排序数据,或者数据更新频率较低。 - 板块代码:代码中使用的
XBHS.HY是 PTrade 中通用的行业分类代码。如果你想查询概念板块,可以将该参数改为XBHS.GN;如果想查询地域板块,可以改为XBHS.DY。 - Python 版本兼容性:代码使用了
%格式化字符串,完全兼容 Python 3.5 及以上版本。
Q&A
Q1: get_sort_msg 函数还可以用来查询哪些类型的排名?
A1: get_sort_msg 非常灵活,通过修改 sort_type_grp 参数,你可以查询:
XBHS.HY: 行业板块XBHS.GN: 概念板块XBHS.DY: 地域板块XBHS.ZS: 指数- 也可以传入具体的股票代码列表来对特定股票池进行排序。
Q2: 如何获取跌幅最大的板块?
A2: 只需将 get_sort_msg 函数中的 sort_type 参数改为 0(升序),即可获取涨跌幅最小(即跌幅最大)的板块。
Q3: 返回的数据中除了涨幅和名称,还有什么有用的信息?
A3: 返回的字典中包含丰富的信息,例如:
business_amount: 总成交量business_balance: 总成交额rise_first_grp: 领涨股票列表(包含领涨股代码、名称、涨幅)fall_first_grp: 领跌股票列表turnover_ratio: 换手率(部分板块支持)
你可以通过log.info(info)查看完整的字段结构。