自己做量化交易软件2-通通量化python跨版本环境设置和使用
自己做量化交易软件(2) 通通量化python跨版本环境设置和使用
通通量化 python跨版本环境设置和使用
众所周知python的版本分为python2和python3,这两个版本有一些差异。另外他们的支持包也不同,因此用户要根据自己需求选择
合适的版本。
通通量化交易软件要适合python2和python3的平台运行,因此要做一些兼容性改变。
一、首先要能正确获取python所在的操作系统。
UseOS( )返回1=windows,2=Linux,3=MacOS
#操作系统类型
def UseOS( ):
import platform
sysstr = platform.system()
if(sysstr =="Windows" or sysstr =="windows"):
return 1
elif(sysstr == "Linux"):
return 2
else:
return 3
二、获取python版本号
我们只关注大版本号是什么,保存到变量G_pyver中,供以后使用。
G_pyver=2 #是2=python2, 3=python3
import platform
G_pyver=int(platform.python_version()[0:1])
三、python2和python3的版本差异
python3 和 python2 是不兼容的,而且差异比较大。好在python2.7以上版本,支持python3以上的部分语法,但又不是全部支持
和兼容。因此我们尽量使用同时支持python2.7和python3.6的语法命令。
实在没法同时兼容的语法命令,我们就用参考如下方法来做兼容功能函数。
#通用平均线计算
def G_MA(Series,n):
G_pyver=int(platform.python_version()[0:1])
G_ma=None
if G_pyver==2:
G_MAstr='pd.rolling_mean(Series,n)'
G_ma=eval(G_MAstr)
else :
G_MAstr='Series.rolling(window=n,center=False).mean()'
G_ma=eval(G_MAstr)
return G_ma
四、python2和python3的兼容性设计技巧
python是解释型语言,对于window和MacOS,Linux等系统的命令都不同,引用的包也是不同的。
1、在MacOS系统的python上引入window上面的包,以及使用命令都会出错。
2、在python2上使用了python3的包和命令,也会出现错误。
因此在python2中绝对不能出现python3的任何包引入和命令。
例如我们常用的tkinter,在python2上的包名为Tkinter,在python3的包名为tkinter。
为了解决兼容性命令,我们采用下面方法HP_init()来做兼容性设置,其他兼容性命令,我们都只需在这里来设置解决。
def HP_init():
#软件名称
G_tk='import tkinter as tk'
G_tk1='from tkinter import *'
G_tk2='from tkinter import ttk'
G_pyver=int(platform.python_version()[0:1])
G_os=UseOS( )
if G_pyver==3:这里写代码片
G_tk='import tkinter as tk'
G_tk1='from tkinter import *'
G_tk2='from tkinter import ttk'
else:
G_tk='import Tkinter as tk'
G_tk1='from Tkinter import *'
G_tk2='from Tkinter import ttk'
五、在程序使用兼容性方法
我们以tkinter绘图为例,量化软件需要绘制各种图形,我们只需在 def init (self, master=None): 方法中做必要初始化
就可以了。tkinter打多数绘图命令在python2和python3上没有区别。即使使用到有区别的命令,我们也可以按类似方式来解决。
初始化代码如下:
def __init__(self, master=None):
HP_init()
exec(G_tk)
exec(G_tk1)
self.w = 300
self.h = 180
self.root = master #定义内部变量root
self.staIco = G_ico
self.root.geometry('%dx%d' % (self.w, self.h )) #设置窗口大小
self.username = StringVar()
self.password = StringVar()
self.createPage()
self.loop()
六、完整量化软件演示
我通过边学习边尝试,做出了简单的股票历史行情和指标的显示框架。后面的工作将从量化分析,操作策略,历史回测及图形显示等方面,逐步开设设计。
完整代码下载,在我上传的资源中下载。