3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在PTrade量化框架中,持久化处理主要使用pickle模块保存全局变量 g 定义的内容。然而,并非所有变量都能被持久化保存。以下是无法被持久化保存的变量类型及注意事项:
全局变量 g 中不能被序列化(pickle)的变量将不会被保存。例如,某些自定义的复杂类实例、生成器等。
涉及到输入/输出(IO)操作的对象是绝对不能被序列化的。常见的包括:
__ 开头)框架规定,全局变量 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()