大数跨境
0
0

Python3版本引擎上线啦!

Python3版本引擎上线啦! JoinQuant聚宽
2019-05-24
1
导读:Python3 版本云端引擎上线啦!


由于 Python 社区将在2020年停止 Python2.7 的支持,在未来我们将逐步停止对 Python2 引擎的更新,所有的新特性也将只在 Python3 引擎上线,所以建议大家将已有策略迁移到 Python3 引擎上。在聚宽官网新创建的策略将默认使用 Python3 引擎创建,用户已有策略仍然使用 Python2 引擎。 一创聚宽将在近期进行升级以支持 Python3 引擎,敬请期待。


聚宽官网Python3版本云端引擎上线 


客户端升级 Python3 之后,聚宽工程师们不懈努力,聚宽官网 Python3 版本的云端回测/模拟交易引擎终于上线啦!新的 Python3 引擎使用与研究模块 Python3 内核相同的环境,大家终于可以在策略中使用心心念念的 TensorFlow 了。

 

除了更新 Python 版本之外,我们还引入了一系列广受欢迎的第三方库:

 

机器学习/神经网络库:tensorflow,chainer,keras,pytorch,theano

网络请求:aiohttp,selenium,websocket-client

短信/语音工具:twilio

微信机器人:wxpy

凸优化工具:cvxpy

自然语言处理:nltk

期货基本面数据:fushare

分级基金数据:easyquotation

 

Python3与Python2的区别 

 

  • Python3 中严格区分 byte 与 str例如 pickle.loads 传入的第一个参数若为字符串则会报错;

  • print 从 Python2 中的关键字转变为了函数,意味着以下写法:print "hello world" 将在 Python3 中报错(正确写法:print(“hello world”));

  • "/" 在 Python2 返回结果向下取整,在 Python3 中将直接返回结果不进行任何取舍,需要 Python2 中的行为时请使用//。这个有可能导致 Python2 和 Python3 相同策略回测结果不同;

  • 修改了一些语法:metaclass、raise、map、filter以及dict的items/keys/values 方法返回迭代对象而不是列表,描述符协议,保存类属性定义顺序,存关键字参数顺序;

  • 去掉了一些语法:cmp、<>(也就是!=)、xrange(其实就是 range)、不再有经典类;

 

另外就是 Python2 与 Python3 在回测、模拟等方面的区别。


  • 获取当前持仓标的(Python2 和 Python3 都可以这样使用,期货注意区分多仓和空仓)

# 多仓position = [p for p in context.portfolio.positions]# 多仓position = [p for p in context.portfolio.long_positions]# 空仓position = [p for p in context.portfolio.short_positions]

 

在回测及模拟交易中读取/写入研究中不同格式的文件


  • Python2 使用 from six import StringIO ,Python3 使用 from six import BytesIO

详情请查看:
在回测及模拟交易中读取/写入研究中不同格式的文件

 

有关 Pickle(.pkl文件)


  • pkl文件和运行环境有关,如何使用 pickle 模块将数据对象保存到文件并在回测中读取


详情请查看:在回测中读取或者写pkl文件
注意:Python2 环境生成的 pkl 文件不能在 Python3 下解析,反之亦然。

 

  • Python2 环境与 Python3 环境的区别:


Python3 环境新增第三方库:(节选)



Python3 环境移除的第三方库:

 


Python3 引擎中版本发生变化的第三方库:注意 Pandas 和 Numpy 的版本变化较大(节选)


常见问题 


Q1:如何编写 Python2 与 Python3 都兼容的代码?


A1:使用six模块来兼容 Python2 与 Python3 之间的差异,详情请查看 six项目主页

 

Q2:我在 Python2 环境下用 Pickle 保存了对象,在 Python3 环境下我该如何解析?


A2:可以尝试使用如下代码进行解析。由于 Python3 环境与 Python2 环境相比第三方库版本差异较大,若保存的对象依赖这些第三方库,则无法保证解析成功。例如在 Python2 环境下使用 pickle 保存的 DataFrame 对象由于 pandas 库的更改在 Python3 环境下进行解析会报错。注意设置 load 或 loads 函数的 encoding 参数为"latin1"。(Python2 环境下无法解析 Python3 环境中使用 Pickle 保存的对象;)


- 在研究环境下直接解析文件:

import picklewith open('research.pkl', 'rb') aspkl_file:temp =pickle.load(pkl_file, encoding="latin1")

 

- 在回测/模拟环境下解析研究环境中文件:

import pickletemp =pickle.loads(read_file('research.pkl'), encoding="latin1")

 

关于 Python3 与 Python2 环境更详细对比,请点击文末阅读原文。同时欢迎各位来提需求~


【声明】内容源于网络
0
0
JoinQuant聚宽
JoinQuant(聚宽)量化交易平台官方账号
内容 249
粉丝 0
JoinQuant聚宽 JoinQuant(聚宽)量化交易平台官方账号
总阅读357
粉丝0
内容249