问题描述
/
解决方案
在 ptrade 量化交易平台中,周末或法定节假日属于非交易日。如果在周末启动策略发现日志没有任何打印内容,通常是由 ptrade 引擎的事件触发机制决定的。以下是具体原因及解决方法:
1. handle_data 函数在非交易日不执行
根据 ptrade API 文档规定,handle_data 函数不会在非交易日触发。如果您的主要打印逻辑(如 log.info)写在 handle_data 中,那么在周末启动策略时,该函数根本不会被调用,因此不会有任何日志输出。
2. before_trading_start 的节假日执行配置
before_trading_start(盘前事件)在默认情况下(缺省配置)节假日是会执行的。但是,如果您在 initialize 中使用了 set_parameters 接口,并将 holiday_not_do_before 参数设置为了 "1",那么该函数在周末也不会执行。
# 如果设置了 holiday_not_do_before="1",节假日将不执行 before_trading_start
set_parameters(holiday_not_do_before="1")
解决方法与建议
如果您希望在周末启动策略时能够看到日志输出,以确认策略已成功拉起或进行某些初始化检查,可以采取以下措施:
方法一:将初始化日志放在 initialize 中
initialize 函数在策略启动时(无论是交易日还是非交易日)都会严格执行一次。您可以将启动确认日志放在这里。
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
log.info("策略已成功启动,当前处于 initialize 阶段。")
方法二:利用 before_trading_start 并确保配置正确
确保没有将 holiday_not_do_before 设置为 "1"(或者显式设置为 "0"),这样在周末启动时,盘前函数依然会执行。
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 确保节假日执行盘前函数(缺省即为0)
set_parameters(holiday_not_do_before="0")
def before_trading_start(context, data):
log.info("盘前函数执行,周末启动也能看到此日志。")
def handle_data(context, data):
# 周末不会执行到这里
pass
总结:周末无日志输出通常是正常现象,表明策略引擎正确识别了非交易日并跳过了盘中撮合逻辑。如需调试,请利用 initialize 或 before_trading_start 函数。