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

PTrade量化平台中无法被持久化保存的变量类型详解

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

问题描述

PTrade中哪些变量无法被持久化保存?

解决方案

在PTrade量化框架中,持久化处理主要使用pickle模块保存全局变量 g 定义的内容。然而,并非所有变量都能被持久化保存。以下是无法被持久化保存的变量类型及注意事项:

1. 无法被序列化的对象

全局变量 g 中不能被序列化(pickle)的变量将不会被保存。例如,某些自定义的复杂类实例、生成器等。

2. 涉及 IO 的对象

涉及到输入/输出(IO)操作的对象是绝对不能被序列化的。常见的包括:

  • 打开的文件句柄(File objects)
  • 网络连接(Sockets)
  • 数据库连接
  • 实例化的特定类对象(如包含上述IO操作的类)

3. 私有变量(以 __ 开头)

框架规定,全局变量 g 中以双下划线 __ 开头的变量被视为私有变量,在持久化落地时将主动跳过,不会被保存。

正确的处理方法

如果您必须在策略中使用这些无法被持久化的对象,建议在 initialize 函数中进行初始化,并将其命名为以 __ 开头的私有变量。这样框架在持久化时会忽略它们,避免引发序列化错误。

示例代码:

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()