前十大券商免费的量化软件申请,ptrade模拟盘和实盘的注意事项

Connor 欧意交易平台 2024-09-18 49 0

前十大券商免费的量化软件申请,ptrade模拟盘和实盘的注意事项

模拟盘和实盘注意事项

关于持久化

为什么要做持久化处理

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

量化框架持久化处理

使用pickle模块保存股票池、账户信息、订单信息、全局变量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)

后续会持续更新关于量化ptrade的开通和策略编写的相关内容,感兴趣的投资者可以提前关注,也可以私信留言一起交流学习哦!

评论