🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

ptrade量化平台持久化信息恢复是否会覆盖initialize函数中的变量?

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

问题描述

持久化信息恢复时会覆盖initialize函数中的变量吗?

/

解决方案

ptrade持久化信息恢复机制解析

在ptrade量化平台中,是的,持久化信息恢复时会覆盖initialize函数中初始化的同名变量

覆盖机制说明

当券商系统升级或环境重启后恢复交易时,ptrade框架的执行顺序如下:

  1. 首先,框架会执行策略的 initialize 函数,进行变量的初始化。
  2. 然后,框架会执行持久化信息恢复操作。

因此,如果持久化信息中保存了策略定义的全局对象 g 中的某个变量,那么在恢复时,持久化信息中的变量值将会覆盖掉 initialize 函数中刚刚初始化的该变量

如何避免变量被覆盖?

如果您希望某些变量在重启后重新初始化,而不被持久化信息覆盖(例如涉及到IO操作的类对象、打开的文件等无法被序列化的对象),您可以采用以下方法:

initialize 中初始化该变量时,将变量名以双下划线 __ 开头。在ptrade中,全局变量 g 中以 __ 开头的变量被视为私有变量,在持久化时将不会被保存,因此重启时也就不会发生覆盖现象。

示例代码

class Test(object):
    count = 5

    def print_info(self):
        self.count += 1
        log.info("a" * self.count)


def initialize(context):
    g.security = "600570.SS"
    set_universe(g.security)
    
    # 初始化无法被序列化类对象,并赋值为私有变量(以__开头)
    # 落地持久化信息时会跳过保存该变量,重启时不会被覆盖
    g.__test_class = Test()

def handle_data(context, data):
    # 调用私有变量中定义的方法
    g.__test_class.print_info()

总结

  • 普通全局变量 (g.var):会被持久化保存,重启时会覆盖 initialize 中的初始值。
  • 私有全局变量 (g.__var):不会被持久化保存,重启时依赖 initialize 重新初始化。