《中文Python穿云箭量化平台二次开发技术07》用Tkinter模块开发一个【股票K线行情及显示自编公式指标软件】示例

117 篇文章 122 订阅
115 篇文章 108 订阅

《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行情软件、新的量化平台、以及各种量化研究工具。
穿云箭自带指标公式源码运行模块,可以为其他量化平台提供量化功能扩展或量化功能增强效果。
《中文Python穿云箭量化平台》包含有行情接口,指标运算模块,K线和指标显示模块。用户很容易重新搭建一个股票行情软件。

一、首先要了解股票行情软件。
在这里插入图片描述
一般行情软件K线图由3个指标窗口构成,主图指标(显示K线图),附图指标1(一般是成交量或成交额),附图指标2(客户自选指标,如MACD,KDJ等)。
当然用户可以按热键[alt+0]定义多达9个附图指标。
在这里插入图片描述

二、了解计算机图形系统设计方法。
在Tkinter设计中,计算机屏幕分为桌面,窗口,容器,小部件。
1、窗口一般由r=tk.Tk()来创建应用程序主窗口。
2、容器一般是Tkinter容器部件,例如Frame,Text,Canvas等,这些容器可以嵌套放置。
3、小部件,例如,Button、Entry、Label…等很多小部件。

三、了解K线图和指标显示方法
我们一般采用matplotlib库和mpl_finance来设计K线图和指标线。
1、首先做一些定义。
假定我们设计3指标画面,就如下定义窗口。

import matplotlib.pyplot as plt
#绘制图形
plt.figure(1,figsize=(10,6), dpi=100)
#绘制主图指标
ax1=plt.subplot(311)
#绘制副图指标1
ax2=plt.subplot(312)
#绘制副图指标2
ax3=plt.subplot(313)

如果设计5指标画面,就如下定义窗口。

#绘制图形
plt.figure(1,figsize=(10,6), dpi=100)
#绘制主图指标
ax1=plt.subplot(511)
#绘制副图指标
ax2=plt.subplot(512)
#绘制副图指标
ax3=plt.subplot(513)
#绘制副图指标
ax4=plt.subplot(514)
#绘制副图指标
ax5=plt.subplot(515)

代码中ax1一般是主图指标,ax2–ax5等是附图指标。当然我们可以设置更多的指标线。
绘制K线图,我们可以使用HP_plt模块。

2、获取行情,并计算自编指标公式
前面我们学习了行情获取,自编指标计算等很多知识。我们很容易写出一段显示K线图,并显示自编公式的代码。

import os,sys
sys.path.append(os.path.abspath('.'))
sys.path.append(os.path.abspath('..'))
import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
import HP_tdx as htdx#小白通达信行情库 
from HP_formula import *   #小白股票指标公式函数库
import HP_tdxgs as hgs  #小白通达信公式库
import HP_plt as hplt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

##股票数据
tdxapi=htdx.TdxInit()
code='601696'
m,c=(1,'601696')
#        #参数nCategory: 
#        #nCategory -> K 线种类 
#        #0 5 分钟K 线 
#        #1 15 分钟K 线 
#        #2 30 分钟K 线 
#        #3 1 小时K 线 
#        #4 日K 线 
#        #5 周K 线 
#        #6 月K 线 
#        #7 1 分钟 
#        #8 1 分钟K 线 
#        #9 日K 线 
#        #10 季K 线 
#        #11 年K 线     
df=hgs.get_security_bars(nCategory=4,nMarket =m,code=c,nStart=0, nCount=400)

#df2=pd.read_csv("股票数据源.csv"  , encoding= 'gbk')
gs1='''
N:=9;
M1:=3;
M2:=3;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1), CIRCLEDOT,COLORFF0000,LINETHICK2;
D:SMA(K,M2,1), LINETHICK3 , COLOR00FF00 ;
J:3*K-2*D, LINETHICK2, COLOR0000FF;
'''
gs2='''
SHORT:=12;
LONG:=26;
MID:=9;
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD2:(DIF-DEA)*2,COLORSTICK;
'''
gs3='''
N:=20;
P:=2;
MID:MA(CLOSE, N)
UPPER:MID + STD(CLOSE, N) * P
LOWER:MID - STD(CLOSE, N) * P
'''

gs4='''
B:CROSS(C,MA(C,5));
S:CROSS(MA(C,5),C);
'''

#开发者信息
#独狼荷蒲qq:2775205
#中文Python学习群:983815766
#电话微信:18578755056
#绘制图形
fig=plt.figure(1,figsize=(10,6), dpi=100)
#绘制主图指标
ax1=plt.subplot(511)
#绘制副图指标
ax2=plt.subplot(512)
#绘制副图指标
ax3=plt.subplot(513)
#绘制副图指标
ax4=plt.subplot(514)
#绘制副图指标
ax5=plt.subplot(515)

mydf=hgs.initmydf(df)
hplt.ax_K(ax1,mydf,c,n=0)  #显示主图K线图

tgs1=hgs.Tdxgs()
tgs1.loaddf(df)
mydf1=tgs1.rungs(gs1)   #计算指标1
tgs1.brawline(ax2)    #在附图1区,显示指标1

tgs2=hgs.Tdxgs()
tgs2.loaddf(df)
mydf2=tgs2.rungs(gs2) #计算指标2
tgs2.brawline(ax3)  #在附图2区,显示指标2

tgs3=hgs.Tdxgs()
tgs3.loaddf(df)
mydf3=tgs3.rungs(gs3)  #计算指标3
tgs3.brawline(ax4)  #在附图3区,显示指标3

tgs4=hgs.Tdxgs()
tgs4.loaddf(df)
mydf4=tgs4.rungs(gs4)  #计算指标4
tgs4.brawline(ax5)  #在附图4区,显示指标4
plt.show()

程序运行结果。
在这里插入图片描述

四、将生成指标K线图显示到Tkinter窗口中。
我们将上面程序中最后一行注释,再增加几行代码,就能实现再Tkinter窗口中显示K线图指标。

import os,sys
sys.path.append(os.path.abspath('.'))
sys.path.append(os.path.abspath('..'))
import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
import HP_tdx as htdx#小白通达信行情库 
from HP_formula import *   #小白股票指标公式函数库
import HP_tdxgs as hgs  #小白通达信公式库
import HP_plt as hplt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

##股票数据
tdxapi=htdx.TdxInit()
code='601696'
m,c=(1,'601696')
#        #参数nCategory: 
#        #nCategory -> K 线种类 
#        #0 5 分钟K 线 
#        #1 15 分钟K 线 
#        #2 30 分钟K 线 
#        #3 1 小时K 线 
#        #4 日K 线 
#        #5 周K 线 
#        #6 月K 线 
#        #7 1 分钟 
#        #8 1 分钟K 线 
#        #9 日K 线 
#        #10 季K 线 
#        #11 年K 线     
df=hgs.get_security_bars(nCategory=4,nMarket =m,code=c,nStart=0, nCount=400)

#df2=pd.read_csv("股票数据源.csv"  , encoding= 'gbk')
gs1='''
N:=9;
M1:=3;
M2:=3;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1), CIRCLEDOT,COLORFF0000,LINETHICK2;
D:SMA(K,M2,1), LINETHICK3 , COLOR00FF00 ;
J:3*K-2*D, LINETHICK2, COLOR0000FF;
'''
gs2='''
SHORT:=12;
LONG:=26;
MID:=9;
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD2:(DIF-DEA)*2,COLORSTICK;
'''
gs3='''
N:=20;
P:=2;
MID:MA(CLOSE, N)
UPPER:MID + STD(CLOSE, N) * P
LOWER:MID - STD(CLOSE, N) * P
'''

gs4='''
B:CROSS(C,MA(C,5));
S:CROSS(MA(C,5),C);
'''

#开发者信息
#独狼荷蒲qq:2775205
#中文Python学习群:983815766
#电话微信:18578755056
#绘制图形
fig=plt.figure(1,figsize=(10,6), dpi=100)
#绘制主图指标
ax1=plt.subplot(511)
#绘制副图指标
ax2=plt.subplot(512)
#绘制副图指标
ax3=plt.subplot(513)
#绘制副图指标
ax4=plt.subplot(514)
#绘制副图指标
ax5=plt.subplot(515)

mydf=hgs.initmydf(df)
hplt.ax_K(ax1,mydf,c,n=0)  #显示主图K线图

tgs1=hgs.Tdxgs()
tgs1.loaddf(df)
mydf1=tgs1.rungs(gs1)   #计算指标1
tgs1.brawline(ax2)    #在附图1区,显示指标1

tgs2=hgs.Tdxgs()
tgs2.loaddf(df)
mydf2=tgs2.rungs(gs2) #计算指标2
tgs2.brawline(ax3)  #在附图2区,显示指标2

tgs3=hgs.Tdxgs()
tgs3.loaddf(df)
mydf3=tgs3.rungs(gs3)  #计算指标3
tgs3.brawline(ax4)  #在附图3区,显示指标3

tgs4=hgs.Tdxgs()
tgs4.loaddf(df)
mydf4=tgs4.rungs(gs4)  #计算指标4
tgs4.brawline(ax5)  #在附图4区,显示指标4

#plt.show()  #注释这行

############免费培训课################
#会议主题:零基础学量化课(周四固定课)
#重复周期:2024/08/22-2024/08/29 19:30-20:30, 每周 (周四)
#腾讯会议:423-1511-5645
#####################################
#会议主题:Python量化培训(周日固定课)
#重复周期:2024/08/25-2024/09/22 19:30-20:30, 每周 (周日)
#腾讯会议:366-1282-4806
############下面是增加内容
import tkinter as tk
root=tk.Tk()
root.title('在Tkinter窗口中显示K线图')
canvas =hplt.setplt(root,fig)  # 在tkinter窗口中显示K线图和指标。
root.mainloop()

在这里插入图片描述
本文给了一个在TKinter窗口中显示K线图和指标的例子。因此我们可以参照这些技术,来用Python设计股票行情软件。
我们还可以获取股票的分笔和盘口数据,也很容易实现分时图窗口。

好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。

超越自己是我的每一步!我的进步就是你的进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值