自己做量化交易软件(36)小白量化实战9–小白量化回测面板设计
在股市中,没有很高文化知识的散户,也可以成为股市赢家。例如,有一位看自行车的大妈,每到一段时间存车的人很少时她就去买股票,看到一段时间存车的人多的时候就她去卖股票,每年都有所获。
因此散户有好的经验和技术分析的前提下,散户投资者也可以利用好的操作方法,可以在股市中经常保持获利。这个好的操作方法,例如数自行车数量,可以当作会用“股票技术指标”,技术指标是谁写的?当然是能看我博客的各位读者了。
作者出版的《看盘秘籍》不仅教炒股知识、炒股方法、炒股技术、炒股理念,还从宏观和微观介绍了股票价格波动的原理,并以此开发出荷蒲指标、独狼指标、貔貅指标系列。最后教读者如何编写大智慧和通达信软件指标公式,以及用c++来开发和加密指标的方法。
随着计算机科学的发展,投资分析由以前的简单指标分析,发展为量化投资分析技术。
现在是人工智能的量化时代,没有很高文化知识的小白散户,能用小白量化软件吗?
购买作者出版的<零基础搭建量化投资系统――以Python为工具>,并好评,除了得到随书提供的小白量化第一代源代码外,还赠送小白量化第二代源代码。
小白量化第二代能够编译为exe文件,做成仿通达信软件Python版,提供给没有安装过Python环境的电脑小白使用。
这篇文章给大家介绍如何定制小白量化二代的量化工具,这个工具可以称为小白量化软件的插件,增强小白量化平台的功能,更加简化用户量化分析回测。
假如小白量化目录的:d:\xb2d
小白量化中[增强插件]在view目录中 d:\xb2d\view
小白量化中[用户程序]在user目录中 d:\xb2d\user
其中文件都以.py文件存在,这些文件会在重新启动后,增加到导航目录树中。
上图是小白量化二代的启动画面。这些关键控制变量与书中第一代小白量化一样。
通过这些全局控制变量来控制或改变小白量化框架的外观,功能和形态。
下面我们看看[三画面.py]的插件代码。
# -*- coding: utf-8 -*-
# 显示3个K线图的模板
import time
import tkinter as tk
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窗口。
if g.tab8!=None:
g.tabControl.forget(g.tab8)
g.tab8=None
#用户自建新画面
g.tab8 = tk.Frame(g.tabControl)
g.tabControl.add(g.tab8, text='三画面')
g.tabControl.select(g.tab8)
#把window划分3个子容器,在不同子容器中显示不同股票K线图
xxx=view3(g.tab8)
##读取股票数据
g.gtype=g.book_s.get()
stockn=g.stock_i.get()
stockn=stockn.strip()
stockn=stockn.zfill(6)
g.stock_i.set(stockn)
g.stock=stockn
ds=g.date_s.get()
de=g.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')
ds=g.mds
de2=time.strftime('%Y-%m-%d',time.localtime(time.time()))
de=time.strftime('%Y-%m-%d',time.localtime(time.time()))+' 15:01:00'
g.mde=de
stockn=g.stock_i.get()
stockn=stockn.strip()
stockn=stockn.zfill(6)
g.stock_i.set(stockn)
g.stock=stockn
st=g.stock
st2=st
if int(time.strftime('%H%M',time.localtime(time.time())))<=930:
ds=time.strftime('%Y-%m-%d',time.localtime(time.time()-24*60*60))+' 09:30:00'
de=time.strftime('%Y-%m-%d',time.localtime(time.time()-24*60*60))+' 15:00:00'
else:
ds=time.strftime('%Y-%m-%d',time.localtime(time.time()))+' 09:30:00'
de=time.strftime('%Y-%m-%d',time.localtime(time.time()))+' 15:00:00'
#if g.login:
df2b=htdx.get_security_bars(7,code=st)
a=[x[0:10] for x in df2b.date]
df2b['date2']=a
df2b=df2b[df2b.date2==de2]
df2b=df2b.reset_index(level=None, drop=True ,col_level=0, col_fill='')
axview3x_m(xxx.v[0],df2b,g.stock+' '+g.stock_names[g.stock]+' 分时图',6)
df3=htdx.get_security_bars(nCategory=5,nMarket = 0,code=g.stock,\
nStart=0, nCount=240)
df3.date=[x[0:10] for x in df3.date.astype(str)]
#6均线2指标图,现实KDJ指标线
axview2x(xxx.v[1],df3,g.stock+' '+g.stock_names[g.stock]+' 周线图',6)
# 3指标图
axview4x(xxx.v[2],df2,g.stock+' '+g.stock_names[g.stock]+' 日线图',f1='VOL',f2='HPYYX',f3=g.gtype)
xxx.pack(fill=tk.BOTH, expand=1)
我们再看看[F10窗口.py]基本面信息的插件程序如下:
# -*- coding: utf-8 -*-
import time
import threading, time
import pandas as pd
import numpy as np
import tkinter as tk #装载tkinter模块,用于Python3
from tkinter import ttk #装载tkinter.ttk模块,用于Python3
import HP_tk as htk #导入htk
from tkinter import scrolledtext #装载scrolledtext模块
from PIL import Image, ImageTk, ImageDraw, ImageFont
import sys
sys.path.append("..")
import HP_tk as htk #导入ht
import HP_tdx as htdx
import HP_global as g
if g.tab7!=None:
g.tabControl.forget(g.tab7)
g.tab7=None
#用户自建新画面
g.tab7 = tk.Frame(g.tabControl)
g.tabControl.add(g.tab7, text='F10信息')
mk=htdx.get_market(g.stock)
class UserF10(tk.Frame): # 继承Frame类
def __init__(self, master=None,stock=''):
tk.Frame.__init__(self, master)
self.stock=stock
if self.stock=='':
self.stock=g.stock
self.root = master #定义内部变量root
self.button2=None
self.r=1
self.c=8
self.b=[]
self.F10text=scrolledtext.ScrolledText(self,undo=True,bg='#FFF8DC')
self.F10text.pack(side=tk.TOP, fill=tk.BOTH, expand=1,ipady=1,pady=1,ipadx=1,padx=1)
self.init()
self.pack(fill=tk.BOTH, expand=1,)
def bt(self,n=0):
import HP_tdx as htdx
mk=htdx.get_market(self.stock)
df=htdx.get_company_info_category(mk,self.stock)
self.F10text.delete(2.0,tk.END)
self.F10text.insert(tk.INSERT,'\n\n')
t=htdx.get_F10(self.stock,df.name[n])
self.F10text.insert(tk.INSERT,t)
def bt2(self):
stockn=g.stock_i.get()
stockn=stockn.strip()
stockn=stockn.zfill(6)
self.stock=stockn
g.stock=stockn
self.init()
g.status.text(2,'查看'+self.stock+' F10信息!')
self.bt(n=0)
def init(self):
import HP_tdx as htdx
mk=htdx.get_market(self.stock)
df=htdx.get_company_info_category(mk,self.stock)
fr=tk.Frame(self.F10text)
k=0
for i in range(self.r):
for j in range(self.c):
def kk(self=self, k=k):
self.bt(k)
self.button = tk.Button(fr,text=df.name[k],command=kk,cursor='hand2')
self.b.append(self.button)
self.button.grid(row=i, column=j, padx=1, pady=1, sticky=tk.E)
k+=1
self.button2 = tk.Button(fr,text='切换股票',command=self.bt2,cursor='hand2')
self.button2.grid(row=0, column=self.c+1, padx=1, pady=1, sticky=tk.E)
fr.pack(side=tk.TOP)
self.F10text.window_create(tk.INSERT,window=fr)
self.F10text.insert(tk.INSERT,'\n\n')
t=htdx.get_F10(self.stock,df.name[0])
self.F10text.insert(tk.INSERT,t)
g.UserF10View=UserF10(g.tab7)
g.UserF10View.pack(fill=tk.BOTH, expand=1)
g.tabControl.select(g.tab7)
g.tabs=7
程序运行结果如下:
无论是输入什么股票代码,敲回车后,日线图,分时图,三画图,F10基本信息,股票代码都会自动切换。
通过阅读我的文章,你是不是有更丰富的想法呢?
一位读者找到我,他的目前只会写通达信指标,一时半会学不会Python,希望花钱订制一个量化回测插件,于是我的其中一位读者为他订制了这个[小白回测]插件。使用者只需要写相应的通达信指标公式,就能实现自动回测。
#双均线策略
#买信号B
B=CROSS(MA(C,5),MA(C,20))
#卖信号S
S=CROSS(MA(C,20),MA(C,5))
你觉得定制这样的插件能赚多少钱呢?一本书<零基础搭建量化投资系统――以Python为工具>全价才99元。
我相信,我们的读者看了我的帖子,设计类似的插件非常容易。
请持续关注我的博客,我的进步,就是你的进步!