🚀 AI 一键生成 ptrade 策略代码

为什么在ptrade周末启动策略时日志无打印内容?

ptrade | 发布时间: 2026/5/28
以下内容由 EasyQuant 生成。

问题描述

周末启动策略,日志无打印内容。

/

解决方案

在 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

总结:周末无日志输出通常是正常现象,表明策略引擎正确识别了非交易日并跳过了盘中撮合逻辑。如需调试,请利用 initializebefore_trading_start 函数。