自己做量化交易软件(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
进行交流。

猜你喜欢

转载自blog.csdn.net/hepu8/article/details/82821598
今日推荐