ptrade从零开始学习量化交易第5期【ptrade模拟盘和实盘有哪些注意事项】

模拟盘和实盘注意事项

更加详细的调用方法,后续会慢慢整理。

也可找寻博主历史文章,搜索关键词使用方案,比如本文涉及initialize函数!

感谢关注,咨询开通量化回测与获取实盘权限,欢迎和博主联系!

关于持久

为什么要做持久化处理

服务器异常、策略优化等诸多场景,都会使得正在进行的模拟盘和实盘策略存在中断后再重启的需求,但是一旦交易中止后,策略中存储在内存中的全局变量就清空了,因此通过持久化处理为量化交易保驾护航必不可少。

量化框架持久化处理

使用pickle模块保存股票池、账户信息、订单信息、全局变量g定义的变量等内容。

注意事项:

  1. 框架会在before_trading_start(隔日开始)、handle_data、after_trading_end事件后触发持久化信息更新及保存操作;

  2. 券商升级/环境重启后恢复交易时,框架会先执行策略initialize函数再执行持久化信息恢复操作。如果持久化信息保存有策略定义的全局对象g中的变量,将会以持久化信息中的变量覆盖掉initialize函数中初始化的该变量。

  3. 全局变量g中不能被序列化的变量将不会被保存。您可在initialize中初始化该变量时名字以'__'开头;

  4. 涉及到IO(打开的文件,实例化的类对象等)的对象是不能被序列化的;

  5. 全局变量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()

策略中持久化处理方法

使用pickle模块保存 g 对象(全局变量)。

示例

import pickle from collections import defaultdict NOTEBOOK_PATH = '/home/fly/notebook/' ''' 持仓N日后卖出,仓龄变量每日pickle进行保存,重启策略后可以保证逻辑连贯 ''' def initialize(context): #尝试启动pickle文件 try: with open(NOTEBOOK_PATH+'hold_days.pkl','rb') as f: g.hold_days = pickle.load(f) #定义空的全局字典变量 except: g.hold_days = defaultdict(list) g.security = '600570.SS' set_universe(g.security) # 仓龄增加一天 def before_trading_start(context, data): if g.hold_days: g.hold_days[g.security] += 1 # 每天将存储仓龄的字典对象进行pickle保存 def handle_data(context, data): if g.security not in list(context.portfolio.positions.keys()) and g.security not in g.hold_days: order(g.security, 100) g.hold_days[g.security] = 1 if g.hold_days: if g.hold_days[g.security] > 5: order(g.security, -100) del g.hold_days[g.security] with open(NOTEBOOK_PATH+'hold_days.pkl','wb') as f: pickle.dump(g.hold_days,f,-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值