问题描述
解决方案
在 ptrade 平台中,before_trading_start(context, data) 函数本身不能随意指定时间执行,它有系统默认的触发时间。但如果您需要盘前定点执行某些逻辑,可以通过 run_daily 函数来实现。
1. before_trading_start 的默认执行时间
根据 ptrade API 文档,before_trading_start 的执行时间如下:
- 回测环境:在每个回测交易日的 8:30分 执行。
- 交易(实盘/模拟)环境:在开启交易时立即执行一次,从隔日开始每天 9:10分(默认)执行。
注意:当在9:10前开启交易时,受行情未更新原因,在该函数内调用实时行情接口会导致数据有误。
2. 盘前定点执行的替代方案:使用 run_daily
如果您希望在盘前的特定时间(例如 09:15 或 09:25)执行某个函数,可以在 initialize 中使用 run_daily 进行定时任务配置。ptrade 的交易环境支持运行在 run_daily 中指定盘前时间运行的函数。
代码示例:
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 使用 run_daily 设置盘前定点执行(例如每天 09:15 执行)
run_daily(context, my_pre_market_func, time='09:15')
def my_pre_market_func(context):
# 这里编写您需要在 09:15 执行的盘前逻辑
log.info("盘前定点任务执行,当前时间:09:15")
# 获取昨日收盘价等操作
history = get_history(1, '1d', 'close', g.security)
log.info(history)
def before_trading_start(context, data):
# 这里依然可以放置每天 9:10 默认执行的初始化逻辑
log.info("执行默认盘前函数 before_trading_start")
def handle_data(context, data):
pass
总结
before_trading_start只能在系统默认时间(回测8:30,实盘默认9:10)执行。- 盘前定点执行 请使用
run_daily(context, func, time='09:xx')在initialize中进行配置。