《中文Python穿云箭量化平台二次开发技术06》Tkinter高级模块HP_tka的说明、及应用示例【1分钟JDK指标实时预警窗口】

112 篇文章 121 订阅
110 篇文章 107 订阅

《中文Python穿云箭量化平台》是纯Python开发的量化平台,因此其中很多Python模块,我们可以自己设计新的量化工具,例如自己新的行情软件、新的量化平台、以及各种量化研究工具。
穿云箭自带指标公式源码运行模块,可以为其他量化平台提供量化功能扩展或量化功能增强效果。
HP_tka模块是对Tkinter的二次封装,同时简化的一些接口,方便用户使用。这个模块主要用在穿云箭量化平台中,可以生成各种复杂的及可视化GUI窗口。
HP_tka不是开源模块,无法用pip安装,包含在穿云箭量化平台中。
目录中ico和img中存放的一些图标或图片。
《中文Python穿云箭量化平台》图形窗口就是依赖HP_tka模块建立的,当然用户也可以在自己的Python程序调用这个模块建立各种复杂的窗口软件。下面【Python股票行情软件】就是依赖HP_tka模块设计出来的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面给出HP_tka模块的相应接口函数,用户可以利用这些接口,建立自己的量化工具软件。
1、RGB(color)
return r,g,b

2、drawFont (im,x,y,txt,size=30,r=255,g=255,b=255): #显示汉字simfang.ttf

3、drawFont2 (im,x,y,txt,size=30,r=255,g=255,b=255): #显示汉字SIMLI.TTF

4、drawFont3(im,x,y,txt,size=30,r=255,g=255,b=255): #显示汉字STXINGKA.TTF

5、setCenter(root,w=0,h=0) 移动窗口到屏幕中央

6、setPlace(root,x, y,w,h) 移动窗口到屏幕坐标x,y

7、showIco(root,Ico) 显示窗口ico图标

8、reSizable(root,x,y) 修改窗口大小

9、resize(w, h, w_box, h_box, pil_image) 对一个pil_image对象进行缩放,让它在一个矩形框内,还能保持比例
return pil_image.resize((width, height), Image.ANTIALIAS)

10、imgresize(w, h, w_box, h_box, pil_image) 对一个pil_image对象进行缩放,让它在一个矩形框内,还能保持比例
return pil_image.resize((width, height), PIL.Image.ANTIALIAS)

11、imgresize2(w,h,pil_image)
return pil_image

12、MainWindow(tk.Tk)
init(self, title=‘主窗口’,x=0,y=0,w=800, h=710,picture=‘’,zoom=True,center=True,bg=‘’)
save(self,filename = ‘’,wr=256,hr=256,hx=16,hy=58,Thumbnails=‘’)
Destroy(self)
Overturn(self)
size(self,w,h)
SetCenter(self)
OnTop(self)
AlwaysOnTop(self)
hide(self)
show(self)
setPlace(self,x, y,w=0,h=0)

13、windowMenu
init(self, root, menus=menus)
menus_item(self,itemlist)
additem(self,menubar,item)
additem2(self,menubar,item,menu)
set(self,menu,item,**kw)

菜单可以无限嵌套,但是菜单文字不能重名.
mm=mymenu.menuitem[‘编辑’]
mi=mm.index(‘打开’)
mm.entryconfig(mi, command=hello)
mm.entryconfig(mi, image=img1)

mymenu.set(‘编辑’,‘打开’,image=img1)
mymenu.set(‘编辑’,‘另存为’,image=img2,command=hello)
#建立菜单
menus = [[‘文件’,[‘执行程序’,‘-’,‘新建’,‘打开’,‘运行’,‘-’,‘保存’,‘另存为’]],
[‘编辑’,[‘撤销’,‘重做’,‘-’,‘剪切’,‘复制’,‘粘贴’,‘-’,‘全选’]],
[‘程序’,[‘运行’,‘运行插件’,‘转中文’,‘转英文’]],
[‘项目’,[‘项目目录’,‘系统设置’]],
[‘帮助’,[‘关于软件’,‘项目缩略图’,‘退出’]]]

14、ToolsBar(tk.Frame) 工具栏(横向)
init(self, root,n=3,w=0,bfg=‘white’,size=32,**kw)
readimg(self,file)
config(self,i,**kargs)
demo(self)

15、ToolsBarx(tk.Frame) 工具栏(纵向)
init(self, root,n=3,orient=tk.HORIZONTAL,size=16,bfg=‘white’,bw=0,bh=0,ico=‘ico/16.png’,**kw)
readimg(self,file)
config(self,i,**kargs)

16、StatusBar(tk.Frame)
init(self, root,**kw)
text(self,i,t)
config(self,i,**kargs)
clear(self)
set(self,i, format, *args)
demo(self)

17、Tree(tk.Frame) Tree类类
init(self, master=None,ico=True,style=None,ext=[‘.py’],**kw)
clear(self)
load_path(self,path=‘.’) 读取目录
load_dict(self,d)

18、console(object) 输入输出类

19、ClosableNotebook(ttk.Notebook)
init(self, master, style=“ButtonNotebook.TNotebook”, **kw)
close_tab(self, index)
get_child_by_index(self, index)
get_current_child(self)
add(self, child, **kw)
insert(self, pos, child, **kw)

20、Notebook2(tk.Frame)
init(self, master=None, m=0, anchor=tk.NW, size=9, width=10,tp1=“ico2/Notebook1.gif”,
tp2=“ico2/Notebook2.gif”, **kw)
add(self, tab=None, text=‘’)
select(self, x)
modify(self, x, tab=None, text=‘’)

21、useredit(tk.Frame)

22、useredit2(tk.Frame)

23、Table(tk.Frame)
init(self, master=None, style=‘’, **kw)
load_heading(self, df)
load_df(self, df)
clear(self)
brush(self, c1=‘#00e600’, c2=‘#ed4a4b’)

24、ColoredText(tk.Text)
init(self,*a,regular=_regular,bg=‘#FAFAFA’,fontsize=9,insertbackground=‘white’,mroot=None,**b)

25、CoolCode(tk.Frame)
init(self,master=None,toolbars=True,mroot=None,**kw)

26、BackPicture(tk.Label)
init(self ,root,file=None,img=None, **kw)

27、Backskin(tk.Label)
init(self ,root,picture=‘’,img=None,color=‘white’,bg=‘white’,zoom=True,transparent=False)

28、skin(tk.Frame)
init(self, root=None,bg=‘#1E488F’,fg=‘white’,text=‘小白量化’,ico=‘ico/kchart.ico’)

35、Element()
init(self,canvas,name,widget,x1=0,y1=0,x2=0,y2=0,width=0,height=0,width2=1,kind=0,
bg=‘white’,fg=‘black’,cursor=‘arrow’,arrow=‘none’,dash=None,
image=None,text=‘’,font=‘’,**kw)

36、resizeCanvas(tk.Frame,Element)
init(self,w,width=330, height=330,line=True,bg=‘#ACACAC’,bg2=‘white’,**kw)
clear(self)
drawBox(self,candrag=0, x=10, y=10, radius=2,tag=‘Block’)
Line(self,x1,y1,x2,y2,fg=‘black’,tag=‘line1’,width=2, arrow=‘none’,dash=(4, 4) ) #无/有向线段 arrow=none, first, last, or both
LineA(self,x1,y1,x2,y2,fg=‘black’,tag=‘lineA’,width=2, arrow=‘none’,dash=(4, 4) ) #无/有向折线A
LineB(self,x1,y1,x2,y2,fg=‘black’,tag=‘lineB’,width=2, arrow=‘none’ ,dash=(4, 4)): #无/有向折线A
Rectangle(self,x1, y1, x2, y2,fg=‘’,width=2,tag=‘Rectangle’,dash=(4, 4))
create_mask(self, size, alpha, fill)
draw_rectangle(self, x1, y1, x2, y2,tag=‘rectangle2’, **kw)
Rectangle2(self,x1, y1, x2, y2,fg=‘yellow’,width=0,tag=‘Rectangle2’,dash=None, alpha=.5)
Oval(self,x1, y1, x2, y2,fg=‘’,width=2,tag=‘Oval’,dash=(4, 4), alpha=.5)
imgresize(self,w, h, w_box, h_box, pil_image)
Image(self,x1, y1,x2=0, y2=0,image=None,file=‘’,tag=‘Image’)
Text(self,x1, y1,text=‘’,fg=‘’,tag=‘Text’,font=None)
add(self,widget)
setwidget(self,widget,name=‘’)
to_py(self)

37、SbrFrame(tk.Frame)
init(self, root,width=640, height=480,width2=6402, height2=4802,vb=True,hb=True,bg=‘#0F0F0F’,**kw)

38、inputWin(tk.Toplevel)
init(self, root, title=‘输入参数’,dicts={},fn=None,**kw)
get_var(self,i=0,d=None)
gets(self,key=None)
sets(self,dicts)
set_var(self,d,v)
size(self,w,h)
SetCenter(self)
OnTop(self)
AlwaysOnTop(self)
setPlace(self,x, y,w=0,h=0)

39、Calendar
init(self, point = None, position = ‘ll’)

40、LabelEntry(tk.Frame)
init(self, root,label=‘’,text=‘’,width=260, height=20,w=10,w2=14,**kw)

41、LabelSpinbox(tk.Frame)
init(self, root,label=‘’,text=‘’,data=[],width=260, height=20,w=10,w2=12,**kw)

42、LabelControl(tk.Frame)
init(self, root,label=‘’,text=‘’,data=[],width=260, height=20,w=10,w2=12,integer=1,**kw)

43、inputview(tk.Frame)
init(self, root,dicts={},width=260, height=500,vb=True,hb=False,
d1s=None,fn=None,w1=320,h1=640,fontheight=16,**kw)

当然,因为接口函数很多,我来不及做详细说明,以后抽空会逐步完善接口说明信息,并给出使用示例。
有了这个窗口图形HP_tka模块接口,我们可以设计各种量化工具。
下面我们尝试设计一个1分钟JDK指标实时预警窗口,我们使用了多线程,假如盘中计算1分钟指标出现信号,就会输出到【1分钟指标预警窗】中。下面直接给出全部源码。

import time
import HP_global as g
import HP_tdx as htdx  #小白量化行情模块
from HP_formula import *  #小白量化公式函数模块
import  tkinter  as  tk   #导入Tkinter
import  tkinter.ttk  as  ttk   #导入Tkinter.ttk
import  HP_tka  as  htk   #导入htk


global CLOSE,LOW,HIGH,OPEN,VOL
global C,L,H,O,V
global path,app,tab20
app=tab20=None



##建立一个窗口,放了一个表格
def mythread():
    global app,tab20
    app=htk.MainWindow(title='1分钟指标预警窗',x=100,y=200,w=500, h=700)
    app.attributes('-topmost', 1)
    tab20=htk.Table(app)   #创建表格控件
    tab20.pack(expand = 1, fill = tk.BOTH)
    time.sleep(1)
    app.mainloop()

htk.thread_it(mythread)
#开发者信息
#独狼荷蒲qq:2775205
#中文Python学习群:983815766
#电话微信:18578755056

hq=htdx.TdxInit(ip='113.108.212.39',port=7711)  ##初始化通达信
codes=htdx.getblock2a('沪深300') #返回板块中的股票
#codes=htdx.getzxgfile('C:\\new_tdx\\T0002\\blocknew\\ag.blk')  #获取自选股
print(len(codes))

order_df = pd.DataFrame(columns = ['日期', '时间','模式','代码']) 
order_df =order_df.reset_index(level=None, drop=True ,col_level=0, col_fill='')
tab20.clear()
tab20.load_df(order_df) #把变量df的数据显示到表格中

myblocks=[]
j=0
i=0
for m,c in codes:
      df=htdx.get_security_bars(nCategory=7,nMarket = m,code=c,\
                   nStart=0, nCount=300) #获取指定范围的证券1分钟K线
     
      ##数据规格化 
      df.dropna(inplace=True)
      mydf=initmydf(df)
      C=CLOSE=mydf['close']
      L=LOW=mydf['low']
      H=HIGH=mydf['high']
      O=OPEN=mydf['open']
      V=VOL=mydf['volume']
      date2=mydf['date'].iloc[-1]

      #仿通达信,大智慧公式计算和选股
      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;
      ENTERLONG=CROSS(K,D);
      EXITLONG=CROSS(D,K);


      if J.iloc[-1]>=99:
        #创建空表
        order_df = pd.DataFrame(columns = ['日期', '时间','模式','代码']) 
        order_df =order_df.reset_index(level=None, drop=True ,col_level=0, col_fill='')   
        new_df = pd.DataFrame({'日期':date2[0:10],'时间':date2[11:16],'模式':'KDJ预警','代码':c},index=[0])
        #new_df = pd.DataFrame({'日期':date2,'时间':'9:31','模式':'KDJ预警','代码':c},index=[j])
        order_df=pd.concat([order_df,new_df])
        j=j+1        
        myblocks.append((m,c)) 
        tab20.brush()
        tab20.add_data(order_df)
        

      i+=1
      if i>1200:
            break

print('选出的股票代码:',myblocks)

程序运行效果:
在这里插入图片描述
好了,欢迎继续关注我的博客。后面我们介绍更多的二次开发技术。

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

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荷蒲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值