python gui插件_Python进阶量化交易专栏场外篇17- GUI控件在回测工具上的添加
歡迎大家訂閱《教你用 Python 進階量化交易》專欄!為了能夠提供給大家更輕松的學習過程,筆者在專欄內容之外已陸續推出一些手記來輔助同學們學習本專欄內容,目前推出的擴展篇鏈接如下:
為了將專欄中分散的知識點貫穿起來,筆者在專欄的末尾小節《制作自己的量化交易工具》中分享了早期制作的一個簡易版量化交易小工具,希望大家能夠通過調試代碼的方式掌握相關的知識。
目前在場外篇第9篇中已經移植到了Python3.7x版本上,接下來我們在這個版本的基礎上逐步完善這個工具,使專欄的讀者不僅能夠通過小工具掌握專欄的相關知識點,也能夠把工具用到自己的股票量化交易中去。
添加Menu菜單
首先我們在量化回測小工具上添加菜單。wxPython中的菜單欄是wx.MenuBar類、菜單為wx.Menu類、菜單項為wx.MenuItem類。菜單wx.Menu被添加到菜單欄wx.MenuBar中,每個菜單wx.Menu可以包含一個或多個wx.MenuItem對象或級聯菜單wx.Menu對象。代碼如下所示:
menuBar = wx.MenuBar(style=wx.MB_DOCKABLE)
toolmenu = wx.Menu()
about = wx.MenuItem(toolmenu, wx.ID_ANY, '&關于量化小工具')
# about.SetBitmap(wx.Bitmap("timy.png"))
toolmenu.Append(about)
toolmenu.AppendSeparator()
toolmenu.Append(wx.ID_ANY, '&系統偏好設置')
toolmenu.Append(wx.ID_ANY, '&服務偏好設置')
toolmenu.AppendSeparator()
toolmenu.Append(wx.ID_ANY, '&使用向導')
menuBar.Append(toolmenu, '&小工具')
fileMenu = wx.Menu()
imp = wx.Menu()
fileMenu.Append(wx.ID_NEW, "&新建工程\tCtrl+N")
fileMenu.AppendSeparator()
imp.Append(wx.ID_ANY, '導入自選股...')
imp.Append(wx.ID_ANY, '導入策略...')
imp.Append(wx.ID_ANY, '導入股票數據...')
fileMenu.AppendSubMenu(imp, '&導入')
fileMenu.AppendSeparator()
fileMenu.Append(wx.ID_OPEN, '&打開工程\tCtrl+O')
fileMenu.Append(wx.ID_SAVE, '&保存工程\tCtrl+S')
fileMenu.AppendSeparator()
qmi = wx.MenuItem(fileMenu, wx.ID_ANY, '&退出程序\tCtrl+W')
self.Bind(wx.EVT_MENU, self.OnQuit, qmi)
fileMenu.Append(qmi)
menuBar.Append(fileMenu, '&文件')
self.SetMenuBar(menuBar)
顯示效果如下圖所示:
接下來分別介紹下wx.MenuBar、wx.Menu、wx.MenuItem類的使用方法。
wx.MenuBar類的方法列表說明如下:
Append()添加菜單對象到工具欄
Check()選中或取消選中菜單
Enable()啟用或禁用菜單
Remove()去除工具欄中的菜單
wx.Menu類對象是一個或多個菜單項,其中一個可被用戶選擇的下拉列表。方法列表說明如下:
Append()在菜單增加了一個菜單項(一個菜單項目,可直接使用Append()函數添加,或以wx.MenuItem 類對象方式被追加)
AppendSeparator()添加一個分隔線
AppendRadioItem()追加可選當選項
AppendCheckItem()追加一個可檢查的菜單項
Insert()在給定的位置插入一個新的菜單
InsertRadioItem()在給定位置插入單選項
InsertCheckItem()在給定位置插入新的檢查項
InsertSeparator()插入分隔行
Remove()從菜單中刪除一個項
GetMenuItems()返回菜單項列表
wxPython中有大量的標準的ID被分配給標準菜單項,比如wx.ID_ANY 、wx.ID_OPEN、wx.ID_CLOSE、wx.ID_SAVE等等。在某些操作系統平臺上,標準ID會自動添加一個圖標和快捷鍵。
菜單項可以設置為顯示圖標或快捷方式。 wx.MenuItem類SetBitmap()設置需要顯示的位圖對象。wx.MenuItem.SetBitmap(wx.Bitmap(image file))
about.SetBitmap(wx.Bitmap("timy.png"))
EVT_MENU事件綁定有助于處理菜單選擇。Bind(self, event, handler, source=None, id=-1, id2=-1)如下所示:
self.Bind(wx.EVT_MENU, self.OnQuit, qmi)
添加Toolbar工具欄
工具欄包括文本文字說明或圖標按鈕的一個或多個水平條,通常被放置在MenuBar頂層幀的正下方。不同特征的工具按鈕可以添加到工具欄。
代碼如下所示:
toolbar = wx.ToolBar(self, style = wx.TB_VERTICAL)
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar1.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar2.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar3.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar4.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar5.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar6.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar7.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar8.png"))
toolbar.AddTool(wx.ID_ANY, '', wx.Bitmap("tbar9.png"))
toolbar.Realize()
顯示效果如下圖所示:
接下來介紹下wx.Toolbar類的使用方法。
對于wx.ToolBar定義的樣式參數包括常數 :
wx.TB_FLAT提供該工具欄平面效果
wx.TB_HORIZONTAL指定水平布局(默認)
wx.TB_VERTICAL指定垂直布局
wx.TB_DEFAULT_STYLE結合wxTB_FLAT和wxTB_HORIZONTAL
wx.TB_DOCKABLE使工具欄浮動和可停靠
wx.TB_NO_TOOLTIPS當鼠標懸停在工具欄不顯示簡短幫助工具提示
wx.TB_NOICONS指定工具欄按鈕沒有圖標,默認它們是顯示的
wx.TB_TEXT顯示在工具欄按鈕上的文本;默認情況下,只有圖標顯示
wx.ToolBar類具有以下有用的方法:
AddTool()添加工具按鈕到工具欄。工具的類型是由各種參數指定的
AddRadioTool()添加屬于按鈕的互斥組按鈕
AddCheckTool()添加一個切換按鈕到工具欄
AddLabelTool()使用圖標和標簽來添加工具欄
AddSeparator()添加一個分隔符來表示工具按鈕組
AddControl()添加任何控制工具欄。 例如,wx.Button,wx.Combobox等。
ClearTools()刪除所有在工具欄的按鈕
RemoveTool()從給出工具按鈕移除工具欄
Realize()工具按鈕增加調用
添加Gauge進度條
我們在面板上添加一個進度條,用于回測階段提示當前的執行進度。通常wx.Gauge控件可以在確定的或不確定模式中使用。當完成任何操作所需的時間可以被相當精確地確定,進度條顯示已完成任務的百分比。如果在不確定模式,它只是表示該過程正在進行中。代碼如下所示:
self.count = 0
self.gauge = wx.Gauge(self.ParaPanel, -1, range = 50)
#self.gauge.SetBezelFace(1)
#self.gauge.SetShadowWidth(1)
self.Bind(wx.EVT_IDLE, self.GaugeUpdate)
def GaugeUpdate(self, event):
self.count = self.count + 1
if self.count == 50:
self.count = 0
self.gauge.SetValue(self.count)
顯示效果如下圖所示:
接下來介紹下wx.Gauge類的使用方法。
wx.Gauge 的構造函數類似于其它的數字的窗口部件:
wx.Gauge(parent, id, range, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.GA_HORIZONTAL, validator=wx.DefaultValidator, name=“gauge”)
當你使用參數range 來指定數字值時,該值代表標尺的上限,而下限總是0。默認樣式wx.GA_HORIZONTAL 提供了一個水平條。要將它旋轉90度,使用wx.GA_VERTICAL 樣式。
作為一個只讀控件,wx.Gauge 沒有事件。但是可以設置它的屬性,比如GetValue() , SetValue(pos) , GetRange() 和 SetRange(range) 來調整它的值和范圍。如果是在Windows 上,并且沒有使用本地進度條樣式,那么可以使用SetBezelFace(width) and SetShadowWidth() 來改變3D效果的寬度。
添加Slider滑塊
我們在面板上添加一個滑塊,通過滑塊放大和縮小行情顯示界面的走勢信息。
使用wx.Slider 類時的構造函數,如下所示:
wx.Slider(parent , id , value , minValue , maxValue , pos =wxDefaultPosition , size=wx.DefaultSize , style =wx.SL_HORIZONTAL , validator =wx.DefaultValidator , name="slider ")
value 是滑塊的初始值,minValue 和maxValue 是兩端的值。
代碼如下所示:
self.WindowPanel = wx.Panel(self,-1)
self.slider = wx.Slider(self.WindowPanel, minValue = 0, maxValue=1150, size=(1150, -1),
style=wx.SL_HORIZONTAL)
self.slider.SetTickFreq(5)
顯示效果如下圖所示:
接下來介紹下wx.Gauge類的使用方法。
滑塊的樣式設置如下所示:
wx.SL_AUTOTICKS :如果設置這個樣式,則滑塊將顯示刻度。刻度間的間隔通過SetTickFreq 方法來控制。
wx.SL_HORIZONTAL :水平滑塊。這是默認值。
wx.SL_VERTICAL :垂直滑塊。
wx.SL_LABELS :如果設置這個樣式,那么滑塊將顯示兩頭的值和滑塊的當前只讀值。有些平臺可能不會顯示當前值。
wx.SL_LEFT :用于垂直滑塊,刻度位于滑塊的左邊。
wx.SL_RIGHT :用于垂直滑塊,刻度位于滑塊的右邊。
wx.SL_TOP :用于水平滑塊,刻度位于滑塊的上部。
如果想通過改變滑塊中的值來影響應用程序中的其它的部分,可使用以下這些事件。這些事件與窗口滾動條所發出的是相同的。滑塊的每個Set *()方法都有一個對應的Get 方法。
GetRange() SetRange(minValue , maxValue) :設置滑塊的兩端值。
GetTickFreq() SetTickFreq(n , pos) :使用參數n設置刻度的間隔。參數pos沒有被使用,但是它仍然是必要的,將它設置為1。
GetLineSize() SetLineSize(lineSize) :設置你每按一下方向鍵,滑塊所增加或減少的值。
GetPageSize() SetPageSize(pageSize) :設置你每按一下PgUp 或PgDn 鍵,滑塊所增加或減少的值。
GetValue() SetValue(value) :設置滑塊的值。
盡管滑塊提供了一個可能范圍內的值的快速的可視化的表示,但是它們也有兩個缺點。其一是它們占據了許多的空間,另外就是使用鼠標精確地設置滑塊是困難的。
關于完整代碼可以加入專欄交流群獲取。更多的量化交易內容歡迎大家訂閱專欄閱讀!!
總結
以上是生活随笔為你收集整理的python gui插件_Python进阶量化交易专栏场外篇17- GUI控件在回测工具上的添加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mos 多路模拟电子开关_【原创】单火线
- 下一篇: python绘制指数函数图像及性质_指数