3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
可以的。
在 ptrade 平台中,你完全可以通过 run_daily 函数设置一个盘前的时间点(例如 time='09:15' 或 time='09:25')来调用 get_sort_msg 函数。
run_daily 的时间支持:根据 ptrade API 文档,在交易场景下,run_daily 的 time 参数可设置范围是 00:00~23:59。这意味着你可以将定时任务设定在盘前的任意时刻。run_daily 中指定交易时间(如 time='09:15')运行的函数。get_sort_msg 的可用性:get_sort_msg 属于交易模块可用的函数,并没有严格限制只能在 handle_data (盘中) 或 after_trading_end (盘后) 触发。虽然技术上允许在盘前调用,但你需要特别注意数据的有效性和业务逻辑的合理性:
get_sort_msg 返回的数据结构中包含 preclose_px (昨日收盘价)、open_px (今日开盘价)、last_px (最新价) 等。在盘前阶段,open_px 可能为 0 或者等于 preclose_px,trade_status (交易状态) 可能是 PRETR (盘前) 或 OCALL (集合竞价)。以下是一个在盘前(9:25 集合竞价结束时)通过 run_daily 调用 get_sort_msg 的示例:
def initialize(context):
g.security = '000001.SZ'
set_universe(g.security)
# 设定在每天 9:25 集合竞价结束时获取板块排名
run_daily(context, get_pre_market_sort_msg, time='09:25')
def get_pre_market_sort_msg(context):
# 获取概念板块(XBHS.GN)的涨幅排名信息
sort_data = get_sort_msg(sort_type_grp='XBHS.GN', sort_field_name='px_change_rate', sort_type=1, data_count=10)
if sort_data:
log.info("盘前(9:25)概念板块涨幅排名前三:")
for i in range(min(3, len(sort_data))):
log.info(f"Top {i+1}: {sort_data[i]['prod_name']} - 涨幅: {sort_data[i]['px_change_rate']}%")
else:
log.info("盘前未能获取到有效的板块排名数据")
def handle_data(context, data):
pass
总结:你可以通过 run_daily 在盘前调用 get_sort_msg,这在编写“集合竞价抓强势板块”等策略时非常有用,但务必清楚此时获取到的数据所代表的市场状态(昨日数据或集合竞价数据)。