自己做量化交易軟體(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()
六、完整量化軟體演示 我通過邊學習邊嘗試,做出了簡單的股票歷史行情和指標的顯示框架。後面的工作將從量化分析,操作策略,歷史回測及圖形顯示等方面,逐步開設設計。
完整程式碼下載,在我上傳的資源中下載。