1. 程式人生 > >循序漸進:用python做金融量化分析(二)一條移動平均線策略系統建立

循序漸進:用python做金融量化分析(二)一條移動平均線策略系統建立

在前言中我們講了些基礎知識,這一節正式開始從最簡單的移動平均線講起,移動平均線是在趨勢行情中應用最廣泛的策略,移動平均線有簡單算術平均線,指數平均線,加權平均線,還可以分為一條均線,兩條均線,三條均線策略等等,在這裡我們從最簡單的一條移動算術平均線開始,因為這個最簡單,最好理解。策略的觸發條件是當價格在移動平均線之上的時候,此時如果移動平均線趨勢是向上的(即當日移動平均線價格大於上一日移動平均線價格),哪麼就發出買入開倉訊號,同理,當價格在移動平均線之下的時候,此時如果移動平均線是向下的,哪麼就賣出平倉,另外還要加一個判斷是否持倉的訊號(即程式中的a==0),因為不加這個訊號,系統按照前兩個條件,就會不停的發出買入訊號。感興趣的朋友可試試if條件中去掉a==0這個條件看看結果有什麼不同。
下面一段就是全部程式,很簡單吧,懂點程式設計的應該都能看懂了,可以直接複製下來在spyder中直接執行,hs300.xls資料檔案和執行檔案放在同一個目錄下就行了。這個系統可以算是量化系統的雛形了,要讓它更加的自動化,智慧化,後面還要進行優化完善,在後面的學習中,我們會逐步的增加新功能。


import xlrd
import matplotlib.pyplot as plt
buy=[]
sell=[]
a=0  #用於判斷是否持倉,0代表空倉
xls = xlrd.open_workbook('hs300.xls')#開啟檔案
sheet = xls.sheets()[0]#開啟表1
col = sheet.col_values(0)#開啟第一列
ret=0
nrows = sheet.nrows #行數
Sma=[0.0 for i in range(nrows)]
for j in range(19,nrows):  #計算20日均線數值
    Sma[j]=sum(col[(j-19):(j+1)])/20
for k in range(19,nrows):  #收盤價在20日均線之上,且均線是向上的,空倉的時候買入
    if Sma[k-1]<Sma[k] and col[k]>Sma[k] and a==0:
        buy.append(col[k])
        a=1
    elif col[k]<Sma[k] and Sma[k]<Sma[k-1] and a==1:  #收盤價在20日均線之下,且均線是向下的,持倉的時候賣出   
        sell.append(col[k])
        a=0
for l in range(0,len(sell)): #用賣出數列減去買入數列得到收益點數,然後對所有收益求和
    ret += sell[l]-buy[l]
print("總的收益點數:" "%.2f"% ret) #總的收益點數,絕對數值,不是百分比
plt.ylim(2000,6000)
plt.plot(Sma[0:len(Sma)],'r')
plt.plot(col,'k')