自己做量化交易软件(14)通通量化AI框架的用户插件设计指南-通通框架遥控器设计
既然通通量化AI框架是开放平台,用户怎么来设计自己的插件和回测程序呢?
用户的简单语句可以直接在信息窗,对话界面输入。
程序输入格式,第1行只有一个字符>,第2行开始输入python的命令或程序。
通通量化AI框架除了自己知识库AI外,还有两个外部聊天机器人,通通和茉莉。我们在对话框输入程序,让2个机器人互相聊天。这个程序我们放到help目录中了,这个程序不能执行,只能复制程序段到对话框中。下面看看运行结果。
下面我们介绍通通AI量化框架的整体部件,这些部件用程序怎么来控制或获取信息或修改。
上图我们介绍了通通AI量化框架的部件和获取的全局变量。用户通过这些全局变量的定义,来改变通通框架的工作状态。
为了说明这个问题,也为了我们用户学习掌握窗口布局,我们设计一个通通AI量化框架的遥控器程序,这个程序可以通过按钮,来对通通AI量化框架操做,例如改变窗口,输入对话信息,以及关闭通通AI量化框架主程序等等工作。
我们可以看到右图通通框架遥控器。
这个遥控器是半透明的窗口,最下面可以关闭窗口边框。
中间的按钮可以对通通AI量化框架操作,以及输入对话信息。
因为已经做成完整的功能了,算是一个用户学习的插件,这个程序放到view目录中了。程序名称:通通框架遥控器.py
因为代码已经写的很详细了,控制变量可以参考前面的图片。如果看不懂,可以在群中咨询。下面给出全部[通通框架遥控器.py]插件的代码。
# -*- coding: utf-8 -*-
#通通AI量化框架 演示
# 通通AI量化框架遥控器
#日期:2018-11-04
#QQ:2775205
#QQ群:524949939
import tkinter as tk
import HP_global as g
from HP_formula import *
from HP_edit import *
import HP_tk as myw
from HP_robot import *
class mywin(Frame):
def __init__(self, master=None):
self.master = master
Frame.__init__(self, master.top)
self.root = master.top
self.mym=None
self.root.attributes('-topmost', 1)
self.flag=True
self.createPage()
def createPage(self):
def closew1(): #关闭遥控器窗口
self.root.destroy()
def closett(): #关闭通通量化主程序
g.G_root.quit()
g.G_root.destroy()
def overturn():
#self.master.overturn()
self.root.update_idletasks()
self.root.overrideredirect(self.flag)
self.flag=not self.flag #switch
def btn1cmd():
g.tabControl.select(g.tab1)
def btn2cmd():
g.tabControl.select(g.tab2)
def btn3cmd():
g.tabControl.select(g.tab3)
def btn4cmd():
g.tabControl.select(g.tab4)
def btn5cmd():
g.tabControl.select(g.tab5)
def btn6cmd():
g.tabControl.select(g.tab6)
lab1=tk.Label(self.root, text='通通框架遥控器',font = 'Helvetica -24 bold',bg='#1E488F',fg='white').grid(row=0, column=0,columnspan=2)
# 按钮 (Button)
btn1 = tk.Button(self.root , width=10,text='信息窗' ,command=btn1cmd).grid(row=1, column=0, padx=4, pady=4, sticky=tk.E)
btn2 = tk.Button(self.root, width=10,text='综合信息' ,command=btn2cmd).grid(row=1, column=1, padx=4, pady=4, sticky=tk.E)
btn3 = tk.Button(self.root, width=10,text='技术分析' ,command=btn3cmd).grid(row=2, column=0, padx=4, pady=4, sticky=tk.E)
btn4 = tk.Button(self.root, width=10,text='编写代码' ,command=btn4cmd).grid(row=2, column=1, padx=4, pady=4, sticky=tk.E)
btn5 = tk.Button(self.root, width=10,text='模拟回测' ,command=btn5cmd).grid(row=3, column=0, padx=4, pady=4, sticky=tk.E)
btn6 = tk.Button(self.root , width=10,text='双色球' ,command=btn6cmd).grid(row=3, column=1, padx=4, pady=4, sticky=tk.E)
self.mym = tk.Text(self.root,bg='#FFF8DC', width=25)
self.mym.grid(row=4, column=0,rowspan=1,columnspan=2, sticky=tk.E)
def btn7cmd():
self.mym.delete(1.0,END)
def sendmessage():
g.tabControl.select(g.tab1)
msgcontent = '我:' + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) + '\n '
g.ttmsg.insert(END, msgcontent, 'green')
xx=self.mym.get('0.0', END)
g.ttmsg.insert(END, xx)
self.mym.delete('0.0', END)
txt=tt_robot(xx)
if len(txt.strip())<1:
g.ttmsg.see(END)
return
msgcontent = '通通:' + time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) + '\n '
g.ttmsg.insert(END, msgcontent, 'green')
g.ttmsg.insert(END,txt+'\n','blue')
g.ttmsg.see(END)
btn7 = tk.Button(self.root , width=10,text='清除信息' ,command=btn7cmd).grid(row=5, column=0, padx=4, pady=4, sticky=tk.E)
btn8 = tk.Button(self.root , width=10,text='发送信息' ,command=sendmessage).grid(row=5, column=1, padx=4, pady=4, sticky=tk.E)
btn9 = tk.Button(self.root , width=10,text='关闭遥控器' ,command=closew1).grid(row=6, column=0, padx=4, pady=4, sticky=tk.E)
btn10 = tk.Button(self.root, width=10,text='关闭通通' ,command=closett).grid(row=6, column=1, padx=4, pady=4, sticky=tk.E)
btn11 = tk.Button(self.root, width=20,text='开关遥控器边框' ,command=overturn).grid(row=7, column=0, padx=4, pady=4, columnspan=2)
#通通框架,弹出新窗口
##新建弹出窗口哦
window1 = tk.IntVar(g.G_root, value=0)
window1.set(1)
win_w=190
win_h=580
w_title='通通框架遥控器'
w1 =myw.myWindow(g.G_root,w_title,win_w,win_h)
w1.top["bg"]='#1E488F'
w1.top.attributes("-alpha",0.8) #透明度从0-1,1是不透明,0是全透明
myw.setCenter(w1.top,win_w,win_h) #移动新窗口到屏幕中央
myw.reSizable(w1.top,False, False) #允许改变窗口大小
myw1=mywin(w1)
window1.set(0)
后面有时间再介绍更多插件程序的设计。