为了帮助读者再建立一座从书本知识到实战应用之间的“桥梁”,赠送一个回测小工具。
由书中知识点组合而成,实现了包括选股、行情、回测三个功能。额外使用wxPython封装一层GUI便于操作。
提供给大家一种“量化交易”为我所用的思路。大家可以以此为基础去搭建适合自己的系统!
回测框架的功能,其实是我自己设定了一个炒股的场景。
我们根据上市公司的一些财务指标,去过滤出我们心仪的股票加入我们的股票池,然后查看股票的行情走势,选出走势较好的几只股,再制定一个择时策略,对这几只股票进行回测,评估择时策略的效果。
我们把全市场股票的部分财务数据(市盈率、市值、换手率之类的)整合成了一张表,然后通过条件选取过滤出符合要求的股票,点击保存结果后就可以更新到自选股票池中。大家也可以重构这张表,把平时关系的一些财务指标加进来。
我们可以点击股票池 显示行情走势,行情参数包括行情起始时间、周期、前复权、后复权、不复权。也可以4幅子图同时比较行情走势。
策略池中注册策略,选择回测参数,比如初始资金、交易规模、滑点、手续费、印花税之类,点击开始回测,主界面可视化回测指标,比如风险和收益,日志中会有更具体的回测结果,比如交易明细、回测幅度、收益率等。
这边我录制了一个视频在哔哩哔哩上,大家可以看一下。
移植程序前,按书中“2.1 快速部署 Python 开发环境”节内容安装开发环境。
注意事项:
## QTYX_MainGui.py相关代码:
class MainFrame(wx.Frame):
def __init__(self):
# hack to help on dual-screen, need something better XXX - idfah
displaySize = wx.DisplaySize() # (1920, 1080)
displaySize = 0.85 * displaySize[0], 0.75 * displaySize[1]
# call base class constructor
wx.Frame.__init__(self, parent=None, title=u'量化软件', size=displaySize,
style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX) # size=(1000,600)
##QTYX_ElementGui.py相关代码:
class StockPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent=parent, id=-1)
# 分割子图实现代码
self.figure = Figure(figsize=(8, 5))
主要出现在windows环境下,原因是要读写文件要指定编码格式’utf-8’。已在QuantTradeYx_System-v02工程的QTYX_SysFile.py中更改。
with open(filename, 'r', encoding='utf-8') as load_f:
首先删除当前版本 pip uninstall mpl_finance 或者pip uninstall mplfinance
然后指定版本安装pip install mpl_finance==0.10.0,这样避免更多的问题排查。
当然,有能力的朋友可以移植成mplfinance。
在win7环境下wxpython 4.1.0版本和baostock 0.8.8 一同使用时,在baostock的history.py文件的以下代码中报错:
经测试可以使用wxpython4.0.4版本和baostock 0.8.8共同使用。不过wxpython4.0.4在win7下会出现以下问题:
You probably called setlocale() directly instead of using wxLocale and
now there is a mismatch between C/C++ and Windows locale.
解决方法在MainGui文件中添加语句self.locale = wx.Locale(wx.LANGUAGE_ENGLISH):
def OnInit(self):
self.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
self.frame = MainFrame()
self.frame.Show()
self.frame.Center()
self.SetTopWindow(self.frame)
return True
win10环境下出现时,同样要求相应版本解决:
原因为tushare的积分不足,程序中使用了pro.daily_basic()接口,大家可前往官网查看积分获取规则。
如不介意可使用org的一个接口作为选股数据(速度有点慢,也并不稳定),仅需在MainGui文件中更改一行代码即可:
# 组合加入tushare数据
self.ts_data = Tsorg_Backend()
当然,大家消化代码之后可以把自己选股的数据替换到工具中。
win7上“回测结果”显示为空
提示编码格式错误:
logtrade.txt文件编码变为ANSI。同时QTYX_SysFile.py 中 open 中把encoding 去掉。回测可以正常显示。
wxpython官网使用文档
wxpython的相关文章