利用pyfolio工具評價回測資金曲線

1、前言

前些天發現FMZ策略回測結果輸出的盈虧曲線結果比較簡單,故想着是否獲取收益結果數據後自己再進行處理,得到更詳細的資金曲線評估報告,並且用圖形可視化展示出來。着手把想法寫出來的時候發現並不是那麼容易,故想是否有人也有相同的想法,並且已經做出相應的工具呢?故上網蒐羅了一圈,發現確實有這類工具,在GitHub上看了好幾個項目,最終選擇了pyfolio這個工具。

2、pyfolio是什麼

pyfolio是一個由quantinc .開發的用於金融投資組合的性能和風險分析的Python庫。它可以很好地與Zipline開源回溯測試庫一起工作。quant還爲專業人士提供全面管理的服務,包括Zipline、Alphalens、Pyfolio、FactSet數據等。
pyfolio的核心是所謂的“ so-called tear sheet ”,它由各種各樣的獨立圖組成,這些圖提供了交易算法表現的綜合圖像。
GitHub地址:https://github.com/quantopian/pyfolio

3、學習使用pyfolio

由於該工具網上的學習資料比較少,自己摸索了好些時間纔會簡單的使用。
PyFolio API參考:https://www.quantopian.com/docs/api-reference/pyfolio-api-reference#pyfolio-api-reference
這裏比較詳細介紹了pyfolio的API,該平臺可以做美股回測,回測結果可以直接通過pyfolio展示,我只粗略地學習了一下,貌似其他功能都挺強大的。

4、安裝pyfolio

pyfolio的安裝比較簡單,按照GitHub上的說明安裝即可。

5、FMZ回測結果通過pyfolio展示

好了介紹就到這了,開始進入正題。首先在FMZ獲取回測資金曲線數據。

在回測結果的浮動盈虧圖表中點擊上圖中全屏旁邊的按鈕,然後選擇‘Download CSV’。
獲取到的CSV數據,格式如下圖(文件名根據自己需求更改):

如果想要分析結果有比較的基準的話,則還需要準備一份交易標的的K線日線數據,當然如果沒有K線數據只有收益數據也是可以分析的,只是有基準數據分析結果會多幾個指標,例如:阿爾法(Alpha)、貝塔(Beta)等,下文按提供基準K線數據來寫。
K線數據我們可以通過FMZ研究環境直接從平臺獲取:

#使用FMZ研究環境提供的API獲取與收益數據等長的K線數據
dfh = get_bars('bitfinex.btc_usd', '1d', start=str(startd), end=str(endd))

數據準備完畢後,就可以寫代碼了。我們需要將獲取到的數據進行處理,以使其符合pyfolio所需要的數據結構,然後調用pyfolio的create_returns_tear_sheet接口計算並輸出結果。我們主要需要傳入(returns,benchmark_rets=None,live_start_date=None)三個參數。
returns參數爲必須的收益數據;
benchmark_rets爲基準數據,不是必須的;
live_start_datelive_start_date,不是必須的,這個參數的意思就是,你的returns啥時候是開始實盤的?比如我們上面這一串returns,假設我們在2019-12-01之後是實盤,而前面是模擬盤或者是回測的結果,那麼我們就可以這樣設置:live_start_date = ‘2019-12-01’。通過設置該參數獲得的結果,理論上我們可以分析一下我們的策略有沒有過擬合。如果樣本內外的差異很大,那麼大概率這就是過擬合了。
我們可以在FMZ研究環境下實現該分析功能,也可以在自己本地實現,下面以在FMZ研究環境實現爲例:

輸出的分析結果:

6、結果解讀

輸出的結果數據比較多,我們需要靜下心來學習一下這些指標都是啥意思,輸出結果都是英文顯示的,英文比較少我們對照着翻譯來看還是比較容易理解的,下面我介紹幾個我找到的對相關指標的介紹,明白了指標的意思,我們才能解讀我們的策略狀態。

  • 年化收益(Annual return)
    年化收益率是指把當前的收益率(日收益率、周收益率、月收益率等)換算成年收益率來計算的,是一種理論收益,並不是真正已經取得的收益率。年化收益率需要和年收益率區分開,年收益率是指策略執行一年的收益率,是實際的收益。
  • 累計收益(Cumulative returns)
    最容易理解的一個概念,策略收益也就是策略開始到結束,總資產的變化率。
    年化波動率(Annual volatility)
    年化波動率用來衡量投資標的的波動風險。
  • 夏普率(Sharpe ratio)
    描述的是策略在單位總風險下所能獲得的超額收益。
  • 最大回撤(Max Drawdown)
    描述的策略最大的虧損情況。最大回撤通常越小越好。
  • 歐米伽比率(Omega ratio)
    另一種風險回報績效指標。它相對於Sharpe比率的最大優勢是-通過構造-它考慮了所有統計時刻,而Sharpe比率僅考慮前兩個時刻。
  • 索提諾比率(Sortino)
    描述的是策略在單位下行風險下所能獲得的超額收益。
  • 每日風險價值(daily Value-at-Risk )
    每日風險價值-另一個非常流行的風險指標。在這種情況下,這表明在95%的情況下,將頭寸(投資組合)再保留1天,損失不會超過1.8%。
    參考:https://towardsdatascience.com/the-easiest-way-to-evaluate-the-performance-of-trading-strategies-in-python-4959fd798bb3
  • Tail ratio
    對daily return的分佈選取95分位和5分位,然後相除取絕對值。本質的含義就是賺取的return比虧錢的大多少倍。
  • 穩定性(stability)
    也就是所謂的穩定性。其實很簡單,就是時間增量對累計淨值的解釋力度是多少,也就是迴歸的r平方。這樣說有點抽象,我們簡單解釋一下。
    參考:https://blog.csdn.net/qtlyx/article/details/88724236

7、小小的建議

希望FMZ能夠也能夠增加豐富資金曲線的評價功能,並且增加歷史回測結果的儲存功能,這樣能夠更方便和更專業地展示回測結果,幫助大家創造出更優秀的策略。

8、感謝FMZ平臺

讓我在這裏學到了很多量化知識以及各種技能,感謝小小夢老師、張超大神悉心指導!希望FMZ平臺越來越好!
本人菜鳥一枚,初次作文,還望大佬們多多指教。!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章