《中文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设计股票行情软件。
我们还可以获取股票的分笔和盘口数据,也很容易实现分时图窗口。
好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。
超越自己是我的每一步!我的进步就是你的进步!