3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 Ptrade 实盘交易环境中,许多开发者在 before_trading_start (盘前函数) 中调用 get_Ashares(date=None) 时,会遇到返回空列表 [] 的情况。这不仅影响了股票池的初始化,还可能导致后续策略逻辑报错。
根据 Ptrade API 文档,get_Ashares(date=None) 的行为如下:
date 不入参,系统默认取当天日期。为了保证策略的稳定性,建议显式传入具体的日期,通常传入前一个交易日的日期,或者格式化后的当前日期。
使用 get_trading_day(-1) 获取上一个交易日,并将其格式化为 YYYYmmdd 字符串传入 get_Ashares。
import datetime
def initialize(context):
pass
def before_trading_start(context, data):
log.info('盘前函数运行')
previous_tradeing_func(context)
def previous_tradeing_func(context):
# 获取前一个交易日
pre_date_obj = get_trading_day(-1)
pre_date_str = pre_date_obj.strftime('%Y%m%d')
# 显式传入日期
all_stock_set = get_Ashares(date=pre_date_str)
if not all_stock_set:
log.error(f"获取 {pre_date_str} 的 A 股列表失败!")
else:
log.info(f"成功获取 A 股数量: {len(all_stock_set)}")
# print(all_stock_set[:10]) # 打印前10个查看
def handle_data(context, data):
pass
如果必须获取当天的列表,可以通过 context.blotter.current_dt 获取当前日期并格式化。但需注意,盘前过早调用仍可能为空。
def previous_tradeing_func(context):
# 获取当前日期并格式化为 YYYYmmdd
current_date = context.blotter.current_dt.strftime('%Y%m%d')
all_stock_set = get_Ashares(date=current_date)
log.info(f"{current_date} A股数量为: {len(all_stock_set)}")
sleep 几秒后重试,或者回退使用前一交易日的数据。run_daily 中指定 9:15 或 9:25 之后执行。