小白量化平台框架是本地化量化平台,用户的策略在用户自己电脑中执行,操作习惯仿股票软件,指标算法支持类通达信指标,回测也支持通达信大智慧等自定义股票格式。
小白量化平台框架是跨平台的,任何平台都能使用,但是要安装必要的支持模块。
(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