贈送“回測框架”的目的
為了幫助讀者再建立一座從書本知識到實戰應用之間的“橋梁”,贈送一個回測小工具,
由書中知識點組合而成,實作了包括選股、行情、回測三個功能,額外使用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 開發環境”節內容安裝開發環境,
注意事項:
- 需要額外安裝GUI庫wxPython(Win7環境下安裝wxpython4.0.4,原因見“常見問題解決”),
- 書中安裝部署程序是以macos為例,對于Windows用戶可以結合網上資料安裝,群友分享一個鏈接,
- 安裝完成后啟動主檔案QTYX_MainGui.py
- 如果界面顯示超過了你的螢屏尺寸,需要設定下界面尺寸以適應你的螢屏,
## 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))
- 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. 提示以下錯誤:

代碼中更改界面尺寸,需要點擊相應按鈕才有影像出現哈!
參考資料
wxpython官網使用檔案
wxpython的相關文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/242881.html
標籤:python
