1. 程式人生 > >自己做量化交易軟體(7)通通量化回測設計2-雙均線策略回測

自己做量化交易軟體(7)通通量化回測設計2-雙均線策略回測

前一篇介紹了回測類的設計,我們這篇簡單介紹一下回測程式設計。 我們以5日均線和20日均線的交叉作為買賣點策略,來計算對一隻股票交易的收益情況。這裡僅僅是一個雙均線策略演示的例子。讀者可以在此基礎上,修改為自己的策略。 程式test_df01.py 是雙均線回測程式,使用者自己修改為自己的策略。裡面有完整的說明資訊,我們不再介紹設計原理了。我們給出全部程式程式碼和結果。 我們使用了聚寬資料,使用者需要修改為自己的使用者和密碼。

##修改為自己的聚寬使用者或密碼
x=auth('電話號碼,'密碼')

程式test_df01.py全部程式碼如下。

import pandas as pd  
import numpy  as np
import datetime as dt
import time
import matplotlib.pyplot as plt
import math
from jqdatasdk import *
import HP_lib as mylib
from HP_sys import *


##修改為自己的聚寬使用者或密碼
x=auth('18578755056','??????')

code=normalize_code('000001')
ds='2017-01-01'
de=time.strftime('%Y-%m-%d',time.localtime(time.time()))
df1 = get_price(code,start_date=ds,end_date=de, frequency='daily') # 日線資料

##資料規格化 
df1.dropna(inplace=True)
df2=df1
df2.insert(0,'date',df2.index)
df2=df2.reset_index(level=None, drop=True ,col_level=0, col_fill='')  

##雙均線交易策略 
df2=mylib.MA(df2,'close',5,'C5') #把5日均線存放到C5列中
df2=mylib.MA(df2,'close',20,'C20') #把20日均線存放到C20列中
df2=mylib.CROSS(df2,'C5','C20','B1') #把5日均線上穿20日均線,存放列B1,買入訊號
df2=mylib.CROSS(df2,'C20','C5','S1') #把5日均線下穿20日均線,存放列S1,賣出訊號


##回測
tt=hpQuant()   ##初始化類

#下面是使用者可設定資訊。
#        self.money2=1000000.00  #總資金
#        self.code=""   #證券程式碼
#        self.stamp_duty=0.001   #印花稅 0.1%
#        self.trading_Commission=0.0005    #交易佣金0.05%
#        self.stop_loss_on=True #允許止損
#        self.stop_loss_max=50 #止損3次,就停止交易
#        self.stop_loss_range=0.05   #止損幅度

tt.code=code   #證券程式碼,必須輸入
tt.stop_loss_on=False    #關閉自動止損
df3=tt.Trade_testing(df2,'B1','S1','HL')   #開始回測
print('\n列印交易過程')
tt.PrintTrade()    #列印交易過程
print('\n列印持倉資訊')
tt.PrintSecurity()   #列印持倉資訊
print('\n 列印內部交易記錄資訊')
print(tt.text)     #列印交易資訊


######下面是繪圖
# 開啟一個雙圖例的視窗,定義為211和212
plt.figure(2, figsize=(12,8), dpi=80)
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
# ax1(211視窗)
plt.sca(ax1)
plt.title(code+'  價格均線')   
# 顯示網格:grid='on'
df3.close.plot(color='red', grid='on')
df3['C20'].plot(color='blue', grid='on')
ax2.axhline(0, color='blue')

# ax2(212視窗)
plt.sca(ax2)
df3.HL.plot(color='orange', grid='on')
df3.B1.plot(color='red')
df3.S1.plot(color='blue')
#新增標題
plt.title(code+'  獲利')
plt.show()

程式執行結果如下: 在這裡插入圖片描述 在這裡插入圖片描述 在這裡插入圖片描述

如果讀者有什麼問題諮詢,可加我QQ:2775205,或著加我的QQ群:524949939 進行交流。