Python+Empyrical實(shí)現(xiàn)計(jì)算風(fēng)險(xiǎn)指標(biāo)
Empyrical 是一個(gè)知名的金融風(fēng)險(xiǎn)指標(biāo)庫(kù)。它能夠用于計(jì)算年平均回報(bào)、最大回撤、Alpha值、Beta值、卡爾馬率、Omega率、夏普率等。它還被用于zipline和pyfolio,是Quantopian開(kāi)發(fā)的三件套之一。
下面就教你如何使用 Empyrical 這個(gè)風(fēng)險(xiǎn)指標(biāo)計(jì)算神器。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn)
為了實(shí)現(xiàn)識(shí)別貓的功能,我們需要安裝 paddlepaddle, 進(jìn)入他們的官方網(wǎng)站就有詳細(xì)的指引
請(qǐng)選擇以下任一種方式輸入命令安裝依賴:
1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install empyrical
2. Empyrical 基本使用
計(jì)算最大回撤,你只需要從 empyrical 庫(kù)中引入 max_drawdown ,將數(shù)據(jù)作為參數(shù)傳入計(jì)算,一行代碼就能實(shí)現(xiàn):
import?numpy?as?np from?empyrical?import?max_drawdown returns = np.array([.01,?.02,?.03,?-.4,?-.06,?-.02]) # 計(jì)算最大回撤 max_drawdown(returns) # 結(jié)果:-0.4472800000000001
同樣地,如果你需要計(jì)算alpha和beta指標(biāo):
import?numpy?as?np from?empyrical?import?alpha_beta returns = np.array([.01,?.02,?.03,?-.4,?-.06,?-.02]) benchmark_returns = np.array([.02,?.02,?.03,?-.35,?-.05,?-.01]) # 計(jì)算alpha和Beta值 alpha, beta = alpha_beta(returns, benchmark_returns) print(alpha, beta) # 結(jié)果:-0.7960672549836803 1.1243025418474892
如果你想要計(jì)算夏普率,同樣也是一行代碼就能解決,只不過(guò)你需要注意這幾個(gè)參數(shù)的意義:
import?numpy?as?np from?empyrical?import?sharpe_ratio returns = np.array([.01,?.02,?.03,?-.4,?-.06,?-.02]) # 計(jì)算夏普率 sr = sharpe_ratio(returns, risk_free=0, period='daily', annualization=None) print(sr) # 結(jié)果:-6.7377339531573535
各個(gè)參數(shù)的意義如下:
| 參數(shù) | 數(shù)據(jù)類型 | 意義 |
|---|---|---|
| returns | pandas.Series | 策略的日回報(bào),非累積。 |
| risk_free | float | 本周期內(nèi)的無(wú)風(fēng)險(xiǎn)利率 |
| period | str, optional | 確定回報(bào)數(shù)據(jù)的周期,默認(rèn)為天。 |
| annualization | int, optional | 交易日總數(shù)(用于計(jì)算年化) 如果是daily,則默認(rèn)為252個(gè)交易日。 |
3.更多的指標(biāo)
Empyrical 能提供使用的指標(biāo)非常多,這里就不一一介紹了,基本上用法都和夏普率的計(jì)算方法差不多,這里介紹他們的方法和參數(shù)。
3.1 omega_ratio
empyrical.omega_ratio(returns, risk_free=0.0, required_return=0.0, annualization=252)
| 參數(shù) | 數(shù)據(jù)類型 | 意義 |
|---|---|---|
| returns | pandas.Series | 策略的日回報(bào),非累積。 |
| risk_free | float | 本周期內(nèi)的無(wú)風(fēng)險(xiǎn)利率 |
| required_return | float, optional | 投資者可接受的最低回報(bào)。 |
| annualization | int, optional | 交易日總數(shù)(用于計(jì)算年化) 如果是daily,則默認(rèn)為252個(gè)交易日。 |
3.2 calmar_ratio
empyrical.calmar_ratio(returns, period='daily', annualization=None)
| 參數(shù) | 數(shù)據(jù)類型 | 意義 |
|---|---|---|
| returns | pandas.Series | 策略的日回報(bào),非累積。 |
| period | str, optional | 確定回報(bào)數(shù)據(jù)的周期,默認(rèn)為天。 |
| annualization | int, optional | 交易日總數(shù)(用于計(jì)算年化)。如果是daily,則默認(rèn)為252個(gè)交易日。 |
3.3 sortino_ratio
empyrical.sortino_ratio(returns, required_return=0, period='daily', annualization=None, _downside_risk=None)
| 參數(shù) | 數(shù)據(jù)類型 | 意義 |
|---|---|---|
| returns | pandas.Series | 策略的日回報(bào),非累積。 |
| required_return | float | 最小投資回報(bào) |
| period | str, optional | 確定回報(bào)數(shù)據(jù)的周期,默認(rèn)為天。 |
| annualization | int, optional | 交易日總數(shù)(用于計(jì)算年化)。如果是daily,則默認(rèn)為252個(gè)交易日。 |
| _downside_risk | float, optional | 給定輸入的下跌風(fēng)險(xiǎn)。如果沒(méi)有提供則自動(dòng)計(jì)算 |
更多的指標(biāo)及其說(shuō)明,請(qǐng)查看empyrical源代碼的stats.py文件,里面還包含了所有指標(biāo)的計(jì)算邏輯,如果你想了解每個(gè)指標(biāo)的計(jì)算方法,可以查看這個(gè)文件進(jìn)行學(xué)習(xí)
到此這篇關(guān)于Python+Empyrical實(shí)現(xiàn)計(jì)算風(fēng)險(xiǎn)指標(biāo)的文章就介紹到這了,更多相關(guān)Python Empyrical計(jì)算風(fēng)險(xiǎn)指標(biāo)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)于Python中線程問(wèn)題的簡(jiǎn)單講解
這篇文章主要介紹了對(duì)于Python中線程問(wèn)題的簡(jiǎn)單講解,線程一直是Python編程當(dāng)中的熱點(diǎn)問(wèn)題,而本文沒(méi)有涉及GIL線程鎖方面的內(nèi)容,需要的朋友可以參考下2015-04-04
numpy中np.append()函數(shù)用法小結(jié)
在numpy的函數(shù)庫(kù)中,np.append()函數(shù)是一個(gè)常用的數(shù)組操作函數(shù),它在進(jìn)行數(shù)組操作時(shí)能夠?qū)蓚€(gè)數(shù)組進(jìn)行拼接,并返回一個(gè)拼接后的新數(shù)組,下面就來(lái)介紹一下具體用法,感興趣的可以了解一下2023-11-11
tensorflow從ckpt和從.pb文件讀取變量的值方式
這篇文章主要介紹了tensorflow從ckpt和從.pb文件讀取變量的值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
python使用Flask操作mysql實(shí)現(xiàn)登錄功能
這篇文章主要介紹了python使用Flask操作mysql實(shí)現(xiàn)登錄功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05
Python實(shí)現(xiàn)統(tǒng)計(jì)文本文件字?jǐn)?shù)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)統(tǒng)計(jì)文本文件字?jǐn)?shù)的方法,涉及Python針對(duì)文本文件讀取及字符串轉(zhuǎn)換、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
Python讀取HTML中的canvas并且以圖片形式存入Word文檔
這篇文章主要介紹了Python讀取HTML中的canvas并且以圖片形式存入Word文檔,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
Pyqt5實(shí)現(xiàn)英文學(xué)習(xí)詞典
這篇文章主要為大家詳細(xì)介紹了Pyqt5實(shí)現(xiàn)英文學(xué)習(xí)詞典的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Python中index()函數(shù)與find()函數(shù)的區(qū)別詳解
這篇文章主要介紹了Python中index()函數(shù)與find()函數(shù)的區(qū)別詳解,Python index()方法檢測(cè)字符串中是否包含子字符串 str ,如果指定beg開(kāi)始和end結(jié)束范圍,則檢查是否包含在指定范圍內(nèi),需要的朋友可以參考下2023-08-08

