自己做量化交易软件(18)小白量化平台

自己做量化交易软件(18)小白量化平台

小白量化平台框架是本地化量化平台,用户的策略在用户自己电脑中执行,操作习惯仿股票软件,指标算法支持类通达信指标,回测也支持通达信大智慧等自定义股票格式。
小白量化平台框架是跨平台的,任何平台都能使用,但是要安装必要的支持模块。
(1)安装必要的包。
pygame,matplotlib,mpl_finance,PILlow,jieba
requests,bs4,sklearn,keras
(2)金融数据包
tushare,jqdatasdk,quantaxis,opendatatools,pytdx
安装好这些模块,我们的平台已经搭建好了。

小白全部模块以及全部代码随书
《零基础搭建量化投资系统――以Python为工具》下载。
在这里插入图片描述
书中提供的演示源码如下。
在这里插入图片描述
在这里插入图片描述
上面2套源代码随书下载。支持多种行情源。
作者又为读者设计了新一代小白量化平台系统,支持pytdx实时行情、期货等行情。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
#框架中[增强插件]在view目录中
#框架中[用户程序]在user目录中
#股票代码框输入:fst分时图 rxt日线图 f10 F10信息
在这里插入图片描述
在这里插入图片描述
下面我们看看[日线图]插件的写法。

# -*- coding: utf-8 -*-
#日线图.py
# 显示日线图的模板
import  tkinter  as  tk   #导入Tkinter
import  tkinter.ttk  as  ttk   #导入Tkinter.ttk
import  tkinter.tix  as  tix   #导入Tkinter.tix
import time
import pandas as pd
import numpy as np
import HP_global as g 
import HP_data as hp
from HP_view import * #菜单栏对应的各个子页面 
import HP_tdx as htdx

#系统设定了g.tab1--g.tab9,系统只是用了g.tab1--g.tab6
#控件结构 g.G_root -〉 g.tabControl  -〉g.tab1
#增加tab,用add()
#删除tab,用forget()
#当然用户可以设置更多的tab窗口。必须使用全局变量g.变量名
#重复建立新tab窗会出错,所以我们先检测是否None,不是就先做删除旧tab窗口。
g.gtype=g.book_s.get()
stockn=g.stock_i.get()
stockn=stockn.strip()
stockn=stockn.zfill(6)
stock.set(stockn)
g.stock=stockn
ds=date_s.get()
de=date_e.get()
g.sday=ds.strip()
g.eday=de.strip()
df2=htdx.get_k_data(g.stock,ktype='D',start=g.sday,\
                  end=g.eday,index=False,autype='qfq')
if g.tab3!=None:
    g.tabControl.forget(g.tab3)
    g.tab3=None

#用户自建新画面
g.tab3 = tk.Frame(g.tabControl)
g.tabControl.add(g.tab3, text='日线图') 
g.tabControl.select(g.tab3)
axview3x(g.tab3,df2,t=g.stock+' '+g.stock_names[g.stock],n=2,f1='VOL',f2=g.gtype)
g.tabControl.select(g.tab3)
g.tabs=3

下面是KDJ回测代码。

# -*- coding: utf-8 -*-
"""
#功能:小白股票分析软件框架 回测工具
#版本:Ver1.00
#设计人:独狼荷蒲
#电话:18578755056
#QQ:2775205
#百度:荷蒲指标
#开始设计日期: 2018-07-08
#公众号:独狼股票分析
#使用者请同意最后<版权声明>
#最后修改日期:2019年12月22日
"""

global CLOSE,LOW,HIGH,OPEN,VOL
ds=g.hcdate_s.get()  #获取框架开始日期
de=g.hcdate_e.get()  #获取框架结束日期
stockn=g.hcstock.get()  #获取框架股票代码
df2=htdx.get_k_data(stockn,ktype='D',start=ds,end=de,index=False,autype='qfq')
df3=df2

##数据规格化 
df3.dropna(inplace=True)

mydf=df3.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
VOL=mydf['volume']
C=mydf['close']
L=mydf['low']
H=mydf['high']
O=mydf['open']
V=mydf['volume']

##KDJ交易策略 
def KDJ(N=9, M1=3, M2=3):
    RSV = (CLOSE - LLV(LOW, N)) / (HHV(HIGH, N) - LLV(LOW, N)) * 100
    K = SMA(RSV,M1,1)
    D = SMA(K,M2,1)
    J = 3*K-2*D
    return K, D, J

k,d,j=KDJ(22,11,22)
mydf = mydf.join(pd.Series( k,name='K'))  
mydf = mydf.join(pd.Series( d,name='D'))  
mydf = mydf.join(pd.Series( j,name='J')) 
mydf['S80']=80  #增加上轨80轨迹线
mydf['X20']=20  #增加下轨20轨迹线
mydf['Z50']=50  #增加中轨50轨迹线

##下面开始生成RSI指标买卖点
##买点J上穿数值20
b1=CROSS(mydf['J'],mydf['X20'])
mydf = mydf.join(pd.Series( b1,name='B1'))  

##卖点J下穿80
s1=CROSS(mydf['S80'],mydf['J'])

#卖点J下穿50
s2=CROSS(mydf['Z50'],mydf['J'])

#合并所有卖点信号
s3=s1 | s2

mydf = mydf.join(pd.Series( s1,name='S1'))  
mydf = mydf.join(pd.Series( s2,name='S2'))  
mydf = mydf.join(pd.Series( s3,name='S3'))  

g.tabControl.select(g.tab5)
##回测
tt=hpQuant()   ##初始化类
tt.code=stockn  #证券代码,必须输入
tt.stop_loss_on=False    #关闭自动止损
df3=tt.Trade_testing(mydf,'B1','S3','HL')   #开始回测

tt.PrintTrade()    #打印交易过程
print('\n打印持仓信息')
tt.PrintSecurity()   #打印持仓信息


if g.UserCanvas!=None:

    g.UserPlot.cla() 
    g.UserPlot.close()
    g.UserCanvas._tkcanvas.pack_forget() 
    g.UserCanvas=None


######下面是绘图
# 开启一个双图例的窗口,定义为211和212
fig=plt.figure(2, figsize=(12,8), dpi=80)
g.UserFig=fig
g.UserPlot=plt
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)

# ax1(211窗口)
plt.sca(ax1)
#添加标题
ax_K(ax1,df3,stockn)  
plt.suptitle(stockn+' '+g.stock_names[stockn]+'  KDJ回测结果')

# ax2(212窗口)
plt.sca(ax2)
df3.HL.plot(color='orange', grid=True,label="获利")
df3.B1.plot(color='red',label="$B$")
df3.S3.plot(color='blue',label="$S$")

plt.legend() # 显示图中右上角的提示信息。
ax2.grid(True)
ax2.axhline(0, color='blue')
plt.gca().yaxis.set_major_locator(mticker.MaxNLocator(prune='upper'))
ax2.xaxis.set_major_locator(mticker.MaxNLocator(8))  #x轴分成几等分     
ax2.yaxis.set_major_locator(mticker.MaxNLocator(nbins=3, prune='upper'))
plt.close()
canvas =FigureCanvasTkAgg(fig, master=g.UserFrame)

canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
g.UserCanvas=canvas
canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

在这里插入图片描述
独狼荷蒲qq:2775205
Python Tkinter小白量化群:524949939
电话微信:18578755056
微信公众号:独狼股票分析

其他QQ群:
PythonTkinterGUI : 517029284
Python学习交流: 647866213

发布了56 篇原创文章 · 获赞 67 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/hepu8/article/details/103697783