自己做量化交易軟體(7)通通量化回測設計2-雙均線策略回測
阿新 • • 發佈:2018-12-11
前一篇介紹了回測類的設計,我們這篇簡單介紹一下回測程式設計。 我們以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 進行交流。