继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python进阶量化交易专栏场外篇18-文本框显示Tushare股票信息

袁霄
关注TA
已关注
手记 86
粉丝 1.8万
获赞 1565

欢迎大家订阅《教你用 Python 进阶量化交易》专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下:

为了将专栏中分散的知识点贯穿起来,笔者在专栏的末尾小节《制作自己的量化交易工具》中分享了早期制作的一个简易版量化交易小工具,希望大家能够通过调试代码的方式掌握相关的知识。
目前在场外篇第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为接受样式参数,如下所示:

  • wx.TE_MULTILINE——文本控件允许多行。如果未指定该样式,换行字符不应该在控件值中使用。
  • wx.TE_PASSWORD——文本将回显为星号
  • wx.TE_READONLY——文本将不可编辑
  • wxTE_LEFT——在控件中的文本将左对齐(默认)
  • wxTE_CENTRE——在控件中的文本将居中对齐
  • wxTE_RIGHT——在控件中的文本将居右对齐
  • wx.TE_PROCESS_ENTER——如果使用了该样式,那么当用户在控件内按下回车键时,一个文本输入事件将被触发。

下一步我们在本文框对象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类还支持很多文本处理的方法,如下所示:

  • GetInsertionPoint():得到插入点的位置,位置是整型的索引值。控件的开始位置是0。
  • SetInsertionPoint(pos):设置插入点的位置
  • SetInsertionPointEnd():
  • GetRange(from, to):返回控件中位置索引范围内的字符串。
  • SetSelection(from, to):设置选择的文本
  • GetSelection():以元组的形式返回当前所选择的文本的起始位置的索引值(开始,结束)。
  • GetStringSelection()得到所选择的字符串。
  • GetValue():返回控件中所有的字符串
  • SetValue(value):SetValue()改变控件中的全部文本。
  • Remove(from, to):删除指定范围的文本。
  • Replace(from, to, value):用给定的值替换掉指定范围内的文本。这可以改变文本的长度。
  • WriteText(text):类似于AppendText(),只是写入的文本被放置在当前的插入点。

掌握了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框中输入文字时可引发相应的事件,事件绑定器会负责处理相关事件,如下所示:

  • EVT_TEXT——文本因用户的输入或在程序中使用SetValue()而被改变,产生该事件
  • EVT_TEXT_ENTER——当用户在一个wx.TE_PROCESS_ENTER样式的文本控件中按下了回车键时,产生该事件
  • EVT_TEXT_MAXLEN——如果使用SetMaxLength()指定了该控件的最大长度,那么当用户试图输入更长的字符串时,该事件被触发

关于完整代码可以加入专栏交流群获取。更多的量化交易内容欢迎大家订阅专栏阅读!!

打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP