<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>

          量化投資單因子回測神器 — Alphalens

          共 3306字,需瀏覽 7分鐘

           ·

          2021-11-28 12:33

          量化投資往期推薦



          量化投資實戰(zhàn)教程(1)—基于backtrader的簡單買入賣出策略

          量化投資實戰(zhàn)教程(2)—MACD策略(+26.9%)

          量化投資實戰(zhàn)教程(3) —A股回測MACD策略

          Python 量化投資實戰(zhàn)教程(4) —KDJ 策略

          Python 量化投資實戰(zhàn)教程(5) — A股回測KDJ策略

          Python 量化投資實戰(zhàn)教程(6) — 交易平均收益率

          Python 量化投資實戰(zhàn)教程(7) — 孕線真的有用嗎?

          A股回測“孕線”策略 — Python 量化投資實戰(zhàn)教程(8)

          自定義MySQL數(shù)據(jù)流 — Python 量化投資實戰(zhàn)教程(9)

          可轉(zhuǎn)債交易薅羊毛策略 — Python 量化投資實戰(zhàn)教程(10)

          Lean — 優(yōu)秀好用的開源量化交易平臺

          微軟開源!世界首個AI量化投資平臺 Qlib 基本使用教程


          還記得我們在前面采用的回測工具Backtrader嗎?Backtrader是一款非常靈活的回測工具,基于它你能回測任何你想要測試的idea.

          但是針對單因子回測,Backtrader 開發(fā)回測代碼以及生成報告上并不算很方便,我們需要自己編寫買賣邏輯,在生成的報告上也沒有IC、IR、回撤等的數(shù)據(jù)分析,而實際上,從單因子回測的技術(shù)實現(xiàn)角度上來說,這些都是可以自動化生成的。

          Alphalens就是一個專門實現(xiàn)單因子自動回測的神器,我們只要給它輸入因子值的列,還有每支股票收盤價的數(shù)據(jù),它就能自動生成數(shù)據(jù)分析及報告,并帶有十幾張可視化的報告數(shù)據(jù)統(tǒng)計圖:


          下面就帶大家入門使用一下Alphalens,如果對你有幫助的話,記得點一下贊/在看哦。

          1.準(zhǔn)備



          開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南?進(jìn)行安裝。

          (可選1)?如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

          (可選2)?此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細(xì)指南。

          請選擇以下任一種方式輸入命令安裝依賴
          1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
          2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
          3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

          pip install alphalens
          pip install tushare
          pip install pandas


          2.數(shù)據(jù)預(yù)處理



          正如前面所說,我們只需要把因子值和收盤價放入Alphalens中,就能自動生成回測和報告結(jié)果。

          所以,我們90%的工作都會在數(shù)據(jù)處理這一部分,回測和分析都是抽象封裝好的,并不需要太多地去擔(dān)心它。

          為了測試,我們導(dǎo)入tushare的數(shù)據(jù)進(jìn)行測試:

          import?pandas as?pd
          import?tushare as?ts
          from?alphalens.utils import?get_clean_factor_and_forward_returns
          from?alphalens.tears import?create_full_tear_sheet

          pro = ts.pro_api()
          # 此接口獲取的數(shù)據(jù)為未復(fù)權(quán)數(shù)據(jù),回測建議使用復(fù)權(quán)數(shù)據(jù),這里為批量獲取股票數(shù)據(jù)做了簡化
          df = pro.daily(ts_code='000001.SZ,600982.SH', start_date='20200101', end_date='20211122')
          df.index = pd.to_datetime(df['trade_date'])
          df.index.name = None
          df.sort_index(inplace=True)


          這里獲取了000001.SZ,600982.SH兩只股票在2020-01-01到2021-11-22的日線數(shù)據(jù),將交易日期設(shè)為了索引并排序。效果如下:


          然后需要設(shè)置多索引的因子列 assets,第一個索引為日期,第二個索引為股票代碼:

          # 多索引的因子列,第一個索引為日期,第二個索引為股票代碼
          assets = df.set_index([df.index, df['ts_code']], drop=True)


          效果如下,仔細(xì)觀察的話能發(fā)現(xiàn)其與導(dǎo)入的數(shù)據(jù)只有索引的不同:


          然后,設(shè)置收盤價的Dataframe,這個與因子數(shù)據(jù)的格式不同,索引是時間,每一列是每只股票對應(yīng)的收盤價:

          # column為股票代碼,index為日期,值為收盤價
          close = df.pivot_table(index='trade_date', columns='ts_code', values='close')
          close.index = pd.to_datetime(close.index)



          到這一步,我們的初始化工作就完成了,下面就放到 Alphalens 進(jìn)行測試。

          3.Alphalens回測及報告



          使用Alphalens進(jìn)行回測,是非常輕松而寫意的,只需要導(dǎo)入包,給它傳遞因子數(shù)據(jù)和收盤價數(shù)據(jù)即可:

          from?alphalens.utils import?get_clean_factor_and_forward_returns
          from?alphalens.tears import?create_full_tear_sheet

          # 我們是使用pct_chg因子數(shù)據(jù)預(yù)測收盤價,因此需要偏移1天,但是這里有2只股票,所以是shift(2)
          ret = get_clean_factor_and_forward_returns(assets[['pct_chg']].shift(2), close)
          create_full_tear_sheet(ret, long_short=False)


          get_clean_factor_and_forward_returns 接受的第一個參數(shù)就是因子的列,我們只需要從前面預(yù)處理好的 assets 中任取一列作為因子進(jìn)行回測即可,第二列是收盤價。

          值得注意的是,因子數(shù)據(jù)在回測的時候,注意不要使用到未來數(shù)據(jù),因為我們是用前一天的數(shù)據(jù)預(yù)測下一天的收盤價,所以要對因子列進(jìn)行移位處理,這點一定要注意。

          運行程序,就能生成如下的報告:


          還有一點需要提醒大家的是,開源Alphalens的Quantopian公司已經(jīng)倒閉,所以項目暫時沒人維護(hù)了,部分代碼沒有適配最新的依賴可能會有問題,比如下面的這個代碼:


          原本是通過 .get_values() 獲得 input_periods, 但是 get_values 在 pandas 0.25.0 中已經(jīng)被棄用,最新的pandas版本這里需要改成 .to_numpy() 才能生效。

          除了這個小缺點,Alphalens整體上是非常符合大家單因子測試的需求的。

          它的分析報告可能沒有那么齊全,我們也可以考慮在Alphalens的基礎(chǔ)上增加其他的分析內(nèi)容,如果能開源出來則更好了。

          考慮到后續(xù)Alphalens沒人維護(hù),我fork了Alphalens,并增加了自己的改動,希望有余力的同學(xué)也能來一起貢獻(xiàn)代碼:
          https://github.com/Ckend/alphalens

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注Python實用寶典。

          有任何問題,可以在公眾號后臺回復(fù):加群,回答相應(yīng)紅字驗證信息,進(jìn)入互助群詢問。

          原創(chuàng)不易,希望你能在下面點個贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點擊下方閱讀原文可獲得更好的閱讀體驗

          Python實用寶典?(pythondict.com)
          不只是一個寶典
          歡迎關(guān)注公眾號:Python實用寶典

          瀏覽 646
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  韩国福利视频一区二区 | 亚洲精品婷婷 | 伊人AV在线观看 | 伊人精品在线 | 在线精品国产视频观看 |