欢迎大家订阅《教你用 Python 进阶量化交易》专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下:
第一篇《管理概率==理性交易》
第二篇《线性回归拟合股价沉浮》
第三篇《最大回撤评价策略风险》
第四篇《寻找最优化策略参数》
第五篇《标记A股市场涨跌周期》
第六篇《Tushare Pro接口介绍》
第七篇《装饰器计算代码时间》
第八篇《矢量化计算KDJ指标》
第九篇《移植量化交易小工具》
第十篇《统计学预测随机漫步》
第十一篇《TA-Lib库扩展介绍》
第十二篇《股票分笔数据跨周期处理》
第十三篇《TA-Lib库量价指标分析》
第十四篇《ATR在仓位管理的应用》
第十五篇《扒一扒量化回测常见陷阱》
第十六篇《量化回测工具更新版1》
第十七篇《GUI控件在回测工具上的添加》
为了将专栏中分散的知识点贯穿起来,笔者在专栏的末尾小节《制作自己的量化交易工具》中分享了早期制作的一个简易版量化交易小工具,希望大家能够通过调试代码的方式掌握相关的知识。
目前在场外篇第9篇中已经移植到了Python3.7x版本上,接下来我们在这个版本的基础上逐步完善这个工具,使专栏的读者不仅能够通过小工具掌握专栏的相关知识点,也能够把工具用到自己的股票量化交易中去。
通常文本框是GUI中最常见的控件,不仅可以显示文本,还能收集用户使用键盘键入的文本内容。在wxPython中文本框为wx.TextCtrl类,该类可以显示和编辑文本。
TextCtrl类的构造函数形式如下 :
wx.TextCtrl(self, parent=None, id=None, value=None, pos=None, size=None, style=0, validator=None, name=None):
接下来我们把量化小工具的显示区面板替换为文本框,如下所示:
self.StockPanel = wx.Panel(self, -1) self.BasicInput = wx.TextCtrl(self.StockPanel, -1, "股票基础信息数据:\n", style=wx.TE_MULTILINE | wx.TE_READONLY) # 多行|只读 vboxnetB = wx.BoxSizer(wx.VERTICAL)#纵向box vboxnetB.Add(self.BasicInput,proportion=1,flag=wx.EXPAND|wx.ALL,border=2) self.StockPanel.SetSizer(vboxnetB) self.HBoxPanel = wx.BoxSizer(wx.HORIZONTAL) self.HBoxPanel.Add(self.ParaPanel,proportion = 1.5, border = 2,flag = wx.EXPAND|wx.ALL) self.HBoxPanel.Add(self.StockPanel,proportion = 8, border = 2,flag = wx.EXPAND|wx.ALL ) self.HBoxPanel.Add(self.CtrlPanel,proportion = 0.5, border = 2,flag = wx.EXPAND|wx.ALL ) self.HBoxPanel.Add(toolbar, proportion=0.5, border=2, flag=wx.EXPAND | wx.ALL) self.SetSizer(self.HBoxPanel)
显示效果如下所示:
此处style为wx.TE_MULTILINE和wx.TE_READONLY,实际上style为接受样式参数,如下所示:
下一步我们在本文框对象self.BasicInput 中显示tushare获取到的股票基本信息列表,如下所示:
self.BasicInput.AppendText("序号 " + "TS代码 " + "股票代码 " + "股票名称 "+ "所在地域 " + "所属行业 "+ "上市日期 "+"\n") for index, row in df_basic.iterrows(): temp_str = str(index)+" " for n in range(len(row)): temp_str += str(row[n])+" " self.BasicInput.AppendText(temp_str+"\n")
显示效果如下所示:
此处显示文本使用了AppendText()方法,实际上wx.TextCtrl类还支持很多文本处理的方法,如下所示:
掌握了TextCtrl文本框的使用方法之后,可以相应地显示股票的财务数据、基本面数据、上市新股信息、新闻数据等等,辅助我们进行股票分析。于是我们可以使用相似的方法显示tushare获取到的快讯新闻数据,如下所示:
df_news = pro.news(src='sina', start_date='2020-01-20 09:00:00', end_date='2020-01-21 10:10:00') self.BasicInput = wx.TextCtrl(self.StockPanel, -1, "股票快讯新闻数据:\n", style=wx.TE_MULTILINE | wx.TE_READONLY) # 多行|只读 self.BasicInput.AppendText("事件 " + "新闻 "+"\n") for index, row in df_news.iterrows(): temp_str = str(row[0])+" "+str(row[1])+" " self.BasicInput.AppendText(temp_str+"\n")
显示效果如下所示:
也可以显示tushare获取到的新股上市列表数据,包括申购代码、上网发行日期、上市日期、发行总量(万股)、上网发行总量(万股)、发行价格、市盈率、个人申购上限(万股)、募集资金(亿元)、中签率等,如下所示:
df_share = pro.new_share(start_date='20180901', end_date='20200118') self.BasicInput = wx.TextCtrl(self.StockPanel, -1, "IPO新股列表数据:\n", style=wx.TE_MULTILINE | wx.TE_READONLY) # 多行|只读 self.BasicInput.AppendText("序号 "+"TS股票代码 "+"申购代码 "+"股票名称 "+"上网发行日期 " + "上市日期 "+"发行总量(万股) "+"上网发行总量(万股) "+"发行价格 "+ "市盈率 "+"个人申购上限(万股) "+"募集资金(亿元) "+"中签率 "+"\n") for index, row in df_share.iterrows(): temp_str = str(index)+" " for n in range(len(row)): temp_str += str(row[n])+" " self.BasicInput.AppendText(temp_str+"\n")
显示效果如下所示:
另外,TextCtrl框中输入文字时可引发相应的事件,事件绑定器会负责处理相关事件,如下所示:
关于完整代码可以加入专栏交流群获取。更多的量化交易内容欢迎大家订阅专栏阅读!!