<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 pyfolio 進(jìn)行量化交易回測

          共 3736字,需瀏覽 8分鐘

           ·

          2021-10-09 20:16

          Pyfolio 使用一組豐富的指標(biāo)和可視化來促進(jìn)對樣本內(nèi)外的投資組合績效的分析。它使用多種內(nèi)置場景生成涵蓋回報、頭寸和交易以及市場壓力期間事件風(fēng)險分析的報告,其中還包含貝葉斯樣本性能分析。

          Pyfolio 依賴于投資組合回報和頭寸數(shù)據(jù),還可以考慮交易活動的交易成本和滑點(diǎn)損失。它使用?empyrical?庫,該庫也可以獨(dú)立使用來計算性能指標(biāo)。

          創(chuàng)建回報和基準(zhǔn)輸入

          Pyfolio 庫是 Quantopian 生態(tài)系統(tǒng)的一部分,與 Zipline 和 Alphalens 兼容。我們將首先演示如何從 Alphalens 生成必要的輸入,然后展示如何從 Zipline 回測性能數(shù)據(jù)幀中提取它們。

          從 Alphalens 獲取 pyfolio 輸入

          Pyfolio 還直接與 Alphalens 集成,并允許使用?create_pyfolio_input?創(chuàng)建 pyfolio 輸入數(shù)據(jù):

          from alphalens.performance import create_pyfolio_inputqmin, qmax = factor_data.factor_quantile.min(),             factor_data.factor_quantile.max()input_data = create_pyfolio_input(alphalens_data,                                  period='1D',                                  capital=100000,                                  long_short=False,                                  equal_weight=False,                                  quantiles=[1, 5],                                  benchmark_period='1D')returns, positions, benchmark = input_data

          有兩個選項可以指定如何生成投資組合權(quán)重:

          long_short:如果為?False,權(quán)重將對應(yīng)于因子值除以其絕對值,以便負(fù)因子值生成空頭頭寸。如果為?True,則首先貶低因子值,以便多頭和空頭頭寸相互抵消,并且投資組合是市場中性的。

          equal_weight:如果它和?long_short?為 True,資產(chǎn)將被分成兩個大小相等的組,上半部分/下半部分構(gòu)成多頭/空頭頭寸。

          如果?factor_data?包括每個資產(chǎn)信息,也可以為組創(chuàng)建多空投資組合。

          從 Zipline 回測中獲取 pyfolio 輸入

          Zipline 回測的結(jié)果也可以使用?extract_rets_pos_txn_from_zipline?轉(zhuǎn)換為所需的 pyfolio 輸入:

           returns, positions, transactions =         extract_rets_pos_txn_from_zipline(backtest)

          前向測試 – 樣本外回報

          測試交易策略涉及回測和前向測試。前者涉及歷史數(shù)據(jù),通常是指用于微調(diào) alpha 因子參數(shù)的采樣周期。前向測試在新的市場數(shù)據(jù)上模擬該策略,以驗證它在樣本外的表現(xiàn)良好性,并且不會過于緊密地適應(yīng)特定的歷史情況。

          Pyfolio 允許指定樣本外時段來模擬前向測試。在測試策略以獲得統(tǒng)計上可靠的結(jié)果時,需要考慮許多方面。

          plot_rolling_returns?函數(shù)根據(jù)用戶定義的基準(zhǔn)(我們使用標(biāo)準(zhǔn)普爾 500 指數(shù))顯示樣本內(nèi)和樣本外的累積回報。Pyfolio 將累積回報計算為簡單回報的乘積,在每個回報上加 1:

          from pyfolio.plotting import plot_rolling_returnsplot_rolling_returns(returns=returns,                     factor_returns=benchmark_rets,                     live_start_date='2016-01-01',                     cone_std=(1.0, 1.5, 2.0))

          下圖中包括一個錐體,它顯示了擴(kuò)大的置信區(qū)間,以表明在給定隨機(jī)游走假設(shè)的情況下,樣本外回報出現(xiàn)的可能性不大。在這里,在模擬的 2016 年樣本外期間,我們的策略相對于標(biāo)準(zhǔn)普爾 500 指數(shù)表現(xiàn)不佳:

          性能統(tǒng)計匯總

          Pyfolio 提供了幾個分析函數(shù)和圖。?perf_stats?摘要顯示年度和累積回報、波動性、偏斜和回報的峰度以及 SR。以下附加指標(biāo)(也可以單獨(dú)計算)是最重要的:

          ?最大回撤:自前一個峰值的最高百分比損失?卡爾馬比率:相對于最大回撤的年度投資組合回報?Omega 比率:回報目標(biāo)的收益與損失的概率加權(quán)比率?索提諾比率:相對于下行標(biāo)準(zhǔn)差的超額回報?尾部比率:右尾部的大?。ㄔ鲆妫?95 個百分位數(shù)的絕對值)相對于左尾的大?。〒p失,第 5 個百分位數(shù)的絕對值)?每日風(fēng)險價值 (VaR):與低于每日平均值兩個標(biāo)準(zhǔn)差的回報相對應(yīng)的損失?Alpha:基準(zhǔn)回報無法解釋的投資組合回報?Beta:暴露于基準(zhǔn)

          plot_perf_stats函數(shù)引導(dǎo)估計參數(shù)可變性并將結(jié)果顯示為箱線圖:

          show_perf_stats?函數(shù)計算整個時間段的大量指標(biāo),也分別計算樣本內(nèi)和樣本外時間段的多個指標(biāo):

          from pyfolio.timeseries import show_perf_statsshow_perf_stats(returns=returns,                factor_returns=benchmark_rets,                positions=positions,                transactions=transactions,                live_start_date=oos_date)

          對于從?MeanReversion?因子導(dǎo)出的模擬多空投資組合,我們獲得以下性能統(tǒng)計數(shù)據(jù):

          回撤期和因子敞口

          plot_drawdown_periods(returns)?函數(shù)繪制投資組合的主要回撤期,其他幾個繪制函數(shù)顯示滾動?SR?和滾動因子對市場 beta 或?Fama-French?規(guī)模、增長和動量因子的敞口:

          fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(16, 10))axes = ax.flatten()plot_drawdown_periods(returns=returns, ax=axes[0])plot_rolling_beta(returns=returns, factor_returns=benchmark_rets,                  ax=axes[1])plot_drawdown_underwater(returns=returns, ax=axes[2])plot_rolling_sharpe(returns=returns)

          下圖突出顯示了各種可視化子集,說明了 pyfolio 如何讓我們深入了解性能特征并讓我們了解風(fēng)險和回報的基本驅(qū)動因素:

          事件風(fēng)險建模

          Pyfolio 還包括各種事件的時間表,您可以使用這些時間表將投資組合在此期間的表現(xiàn)與基準(zhǔn)進(jìn)行比較。Pyfolio 默認(rèn)使用標(biāo)準(zhǔn)普爾 500 指數(shù),但您也可以提供您選擇的基準(zhǔn)回報。以下示例將英國退歐公投后 2015 年秋季拋售期間的表現(xiàn)與標(biāo)準(zhǔn)普爾 500 指數(shù)進(jìn)行了比較:

          interesting_times = extract_interesting_date_ranges(returns=returns)interesting_times['Fall2015'].to_frame('pf') \ .join(benchmark_rets) \ .add(1).cumprod().sub(1) \ .plot(lw=2, figsize=(14, 6), title='Post-Brexit Turmoil')


          總結(jié)

          在本文中,我們討論了投資組合管理的重要主題,它涉及以管理風(fēng)險回報權(quán)衡為目標(biāo)的投資頭寸組合。我們引入了 pyfolio 來計算和可視化關(guān)鍵風(fēng)險和回報指標(biāo),以及比較各種算法的性能。

          E?N?D


          掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。


          長按掃碼獲取完整源碼


          瀏覽 77
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  2018天天操天天干 | 国产免费AV片 | 韩国精品 A片 | 亚洲a在线l | 大屌肏屄视频在线播放。 |