前言
作为一名过来人,我深切体会到搭建属于自己的股票量化交易系统的重要性,这是在股市中长期生存下去的必经之路。
因此,我们分享股票量化分析工具QTYX源码的目的,主要是想帮助大家在搭建的过程中有一个参照的模版。通过这个模版的学习,以及后续不断地优化,最终转化为符合自己交易风格的一个系统软件。
我们在星球的交流群中会收集一些大家反馈的常见问题。
针对使用QTYX过程因为运行环境的不同,而出现一些兼容性问题,比如不同显示器分辨率、不同的操作系统(Win或者Mac)、不同的Python版本、第三方库版本等等。
考虑到尽量让星友们少一点排查和更改,特别是对于Python基础比较薄弱的星友们,除了把些问题记录在了线上的使用说明文档之外,我想有必要让QTYX系统具有更好的兼容特性,尽可能让大家在不同的环境下都能顺利的使用分析工具。
为了达到这个目的,我收集了星球会员们在使用过程中反馈的一些高频问题。然后在QTYX的兼容性方面做了一些优化!升级到了新版本V2.3.7!毕竟磨刀不误砍柴工么!
显示器分辨率兼容
关于显示器尺寸不同而引起的界面图形显示不完整问题的改进。
以Windows平台为例。首先大家查看下自己显示器的参数,主要是缩放和分辨率。比如以下缩放比例是200%,分辨率是2560*1600,那么QTYX获取到的分辨率为1280*800。
目前支持的最小分辨为1280*1024(100%缩放),界面显示效果如下所示:
如果分辨率太小,就会出现控件显示不全的情况,比如1024*768(100%缩放),如下所示:
在启动的时候,如果分辨率过小会有提示对话框出现。
同时考虑尽量把界面的控件减少来兼容小分辨率的显示器。比如把“行情参数”的【导入数据】按钮合并、“选股参数”的【刷新数据、开始选股、保存结果】合并。
自定义界面尺寸
如果需要自定义界面尺寸,大家也可以更改代码。介绍下代码中尺寸相关的地方。
关于QTYX界面部分的Python代码主要在MainlyGui文件夹下:
MainFrame.py——启动后出现的主菜单。
ConfFrame.py——对应于点击【配置】按钮进入的界面
DataFrame.py——对应于点击【行情】按钮进入的界面
UserFrame.py——对应于点击【量化】按钮进入的界面
每个界面的Python文件中都有一个和文件名同名的核心类,DataFrame.py中对应的就是DataFrame。
关于调整界面整体尺寸
找到__init__这个构造函数,如下所示,displaySize获取到的是当前显示屏幕的尺寸,是长和宽的元组格式。
可以乘以固定比例调整。比如界面宽度显示75%就乘以0.75,高度显示85%就乘以0.85。如果设置成100%的话就是全屏显示。
class DataFrame(wx.Frame):
def __init__(self, parent=None, id=-1, displaySize=(1600, 900), Fun_SwFrame=None):
wx.Frame.__init__(self, parent, title="股票历史数据下载工具", size=displaySize, style=wx.DEFAULT_FRAME_STYLE)
关于调整固定尺寸控件尺寸
首先大家要能识别界面上不同控件的类型,以及代码中对应的名称。比如DataFrame.py的日志部分是用TextCtrl来实现的,大家可以在当前的DataFrame.py中搜索关键字“size=”涉及到固定尺寸的赋值,根据自己的情况加以调整。如下所示:
def _init_startup_log(self):
self.startup_log_tx = wx.TextCtrl(self, style=wx.TE_MULTILINE, size=(200, 300)) # 启动相关日志
return self.startup_log_tx
关于调整界面整体的布局比例
QTYX使用了布局管理器Sizer,它能对容器中的控件进行更优雅的布局管理,随着容器尺寸的变化自动计算控件最优化的大小和位置。
比如在DataFrame.py中,可以搜索关键字“BoxSizer”, BoxSizer的布局方向分为横向和纵向两种,并且可以在横向或纵向方向上嵌套包含子Sizer的布局。
关于更详细的界面布局原理的讲解可以参照视频课程《理性投资!2天入门量化思维炒股!定制自己的股票分析工具》,加入星球的会员可以找我获取兑换码。
找到BoxSizer之后,会看到不同的控件添加到这个容器中,其中有个proportion用于调整不同控件在这个布局中的比例。比如以下代码中self.ParaPanel和self._init_patten_log()的尺寸比例就是1:10
vboxnetB = wx.BoxSizer(wx.VERTICAL) # 纵向box
vboxnetB.Add(self.ParaPanel, proportion=1, flag=wx.EXPAND | wx.BOTTOM, border=2) # proportion参数控制容器尺寸比例
vboxnetB.Add(self._init_patten_log(), proportion=10, flag=wx.EXPAND | wx.BOTTOM, border=2) # proportion参数控制容器尺寸比例
关于调整对话框界面的尺寸
对于启动策略过程中出现的配置参数的对话框,尺寸主要在DefDialog.py文件中设置。比如启动双底形态后的参数设置对话框,名称为DouBottomDialog,同样找到关键字“size=”后,设置适合自己的尺寸即可。
class DouBottomDialog(wx.Dialog): # 双底形态参数
load_path = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) + '/ConfigFiles/'
def __init__(self, parent, title=u"自定义提示信息"):
wx.Dialog.__init__(self, parent, -1, title, size=(700, 500),
style=wx.CAPTION | wx.CLOSE_BOX | wx.MAXIMIZE_BOX | wx.MINIMIZE_BOX)
关于调整多子图面板尺寸
对于量化界面中由Matplotlib或者Web生成的走势图的尺寸,目前在配置界面开放了接口,大家可以根据自己情况进行调整。
更改之后记得要按下回车键,会有“存储完成”提示!
比如多子图MPL的单幅XY大小分别为6和3时,并没有显示充分。
多子图MPL的单幅XY大小分别为5和4时,显示充分。
具体的使用也可以参考这个视频:
Web页面的支持
QTYX中是使用WebView来渲染Web页面的。在Windows系统上wxPython的WebView因为浏览器版本而存在一定兼容问题。
于是Windows下我们在运行过程中用Python的winreg库(需要pip install一下)对注册表修改解决了Web显示的问题。
比如显示同花顺F10资讯:
比如矩阵树图显示行业个股涨幅排行
注:由于仍然存在Web页面上操作鼠标方面的响应问题,建议大家直接用浏览器打开(QTYX会自动保存一份html在本地)。
K线动画播放支持
K线动画播放的页面属性与MPL多子图一致,前期版本按键被遮挡的问题已经解决。
2.2.1版本前改进说明
提示“缺少tushare的token码”
Token码是使用tushare pro数据源接口时所必备的,在V2.1.3版本后我们仅仅使用了stock_basic接口,默认的120积分就足够了,但是token码仍然是必须的。
目前我们采用了一种方式,可以做到即使不填写token码也可以正常运行程序。
方案是我们在本地的ConfigFiles文件夹中做了备份,即使大家自己不从tushare官网去更新,我也会以每周的频率去更新上市公司的股票清单。
提示“日期格式不正确”
这个原因是wxpython和baostock共同使用时所出现的兼容性问题。
之前建议的版本搭配是Python3.7+wxpython4.0.4+baostock 0.8.8,现在Python3.8+wxpython4.1.1+baostock 0.8.8也可以了。
切换版本确实是个头大的事情,星友们亲测过只需在baostock的history.py文件的175-187注释掉即可,这样可以少走很多弯路。
提示“No such file or directory:……”文件路径不存在
这个原因是QTYX程序里面大多使用的是相对路径, Mac和Win平台下对当前文件的参考路径是不一致。
目前的解决方法是当涉及到文件查找时,将路径自动调整为代码工程的根目录开始的绝对路径。
我在星球《Python量化场景编程技巧与方法》中也具体介绍了。有星友已经亲测有效!
快速查找帮助文档
为了帮助大家节省查找分析工具相关帮助文档的时间,当大家碰到报错时候,或者想知道某个更新的功能如何使用时候,不需要再到星球主题上去找链接,也不需要到公众号里面找链接,直接可以通过工具链接到相应的网页查看。
以上就是本次优化的一些地方,我们已经建立了星球会员专享微信群,大家可以call我,邀请入群,有不错的建议可以在群里一起交流!
说明
1.想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利,名额有限先到先得!
元宵大师的量化交易书籍开售!!
京东、当当、天猫有售!!