赠送“回测框架”的目的

为了帮助读者再建立一座从书本知识到实战应用之间的“桥梁”,赠送一个回测小工具。

由书中知识点组合而成,实现了包括选股、行情、回测三个功能。额外使用wxPython封装一层GUI便于操作。

提供给大家一种“量化交易”为我所用的思路。大家可以以此为基础去搭建适合自己的系统!

回测框架效果展示

回测框架的功能,其实是我自己设定了一个炒股的场景。

我们根据上市公司的一些财务指标,去过滤出我们心仪的股票加入我们的股票池,然后查看股票的行情走势,选出走势较好的几只股,再制定一个择时策略,对这几只股票进行回测,评估择时策略的效果。

  • 条件选股界面

我们把全市场股票的部分财务数据(市盈率、市值、换手率之类的)整合成了一张表,然后通过条件选取过滤出符合要求的股票,点击保存结果后就可以更新到自选股票池中。大家也可以重构这张表,把平时关系的一些财务指标加进来。

  • 行情分析界面

我们可以点击股票池 显示行情走势,行情参数包括行情起始时间、周期、前复权、后复权、不复权。也可以4幅子图同时比较行情走势。

  • 回测评估界面

策略池中注册策略,选择回测参数,比如初始资金、交易规模、滑点、手续费、印花税之类,点击开始回测,主界面可视化回测指标,比如风险和收益,日志中会有更具体的回测结果,比如交易明细、回测幅度、收益率等。

这边我录制了一个视频在哔哩哔哩上,大家可以看一下。

回测框架文件功能概述

  • 回测工具的下载位置:在群文件夹中下载一个名称“QuantTradeYx_System-v03”的压缩包。 【目前最新】
  • 运行条件:必看“安装环境”和“常见问题解决”的内容,可以少走很多弯路。
  • 文件包括:
    — stock_self_pool.json:存储股票池,可参考书中《7.4 注册 JSON 格式自选股票池》的实现。
    — firm_para.json:行情显示页面配置参数,可参考书中《8.5 自定义显示界面框架开发》
    — back_para.json:回测显示页面配置参数,可参考书中《9.1 建立多维度的度量体系》
    — logtrade.txt:存储回测结果的日志文件,可参考书中《9.1 建立多维度的度量体系》 token.txt:存储tushare
    — pro的token码,手动把注册的token码存文件中
    — QTYX_ApiData.py:API数据获取接口文件,参考《7.1 如何获取股票行情数据》
    — QTYX_ElementGui.py:GUI相关的定制类 QTYX_MainGui.py:GUI主界面,也是main启动文件
    — QTYX_MultiGraphs.py:行情显示/回测显示接口,可参考书中《8.1 定制可视化接口 》《9.1 建立多维度的度量体系
    》和《8.5 自定义显示界面框架开发》 QTYX_StrategyGath.py:策略文件
    — QTYX_SysFile.py:文件的读取和存储接口

安装环境

移植程序前,按书中“2.1 快速部署 Python 开发环境”节内容安装开发环境。

注意事项:

  1. 需要额外安装GUI库wxPython(Win7环境下安装wxpython4.0.4,原因见“常见问题解决”)。
  2. 书中安装部署过程是以macos为例,对于Windows用户可以结合网上资料安装。群友分享一个链接。
  3. 安装完成后启动主文件QTYX_MainGui.py
  4. 如果界面显示超过了你的屏幕尺寸,需要设置下界面尺寸以适应你的屏幕。
## 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))

  1. Talib安装会麻烦点,Windows用户参考下群里朋友的过程:
    (1)案例1
    前往https://www.lfd.uci.edu/~gohlke/pythonlibs/,下拉选择TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl(win系统64位,python3.7版本,根据自己系统和python版本选择相应的安装包),将下载包放在当前工作路径中,然后在Anaconda Prompt(或windows的cmd)里面输入命令:pip install TA_Lib-0.4.17-cp27-cp27m-win_amd64.whl。

常见问题解决

1. 提示以下错误:

主要出现在windows环境下,原因是要读写文件要指定编码格式’utf-8’。已在QuantTradeYx_System-v02工程的QTYX_SysFile.py中更改。

with open(filename, 'r', encoding='utf-8') as load_f:
2. 提示以下错误:

mpl_finance库用于画K线,可指定书中版本安装。

首先删除当前版本 pip uninstall mpl_finance 或者pip uninstall mplfinance

然后指定版本安装pip install mpl_finance==0.10.0,这样避免更多的问题排查。

当然,有能力的朋友可以移植成mplfinance。

3. 提示以下错误:

在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环境下出现时,同样要求相应版本解决:

4. 提示以下错误:

原因为tushare的积分不足,程序中使用了pro.daily_basic()接口,大家可前往官网查看积分获取规则。
如不介意可使用org的一个接口作为选股数据(速度有点慢,也并不稳定),仅需在MainGui文件中更改一行代码即可:

# 组合加入tushare数据
self.ts_data = Tsorg_Backend()

当然,大家消化代码之后可以把自己选股的数据替换到工具中。

5. 提示以下错误:

win7上“回测结果”显示为空

提示编码格式错误:

logtrade.txt文件编码变为ANSI。同时QTYX_SysFile.py 中 open 中把encoding 去掉。回测可以正常显示。

6. 提示以下错误:

代码中更改界面尺寸,需要点击相应按钮才有图像出现哈!

参考资料

本文地址:https://blog.csdn.net/hangzhouyx/article/details/111998821