大家好,欢迎来到IT知识分享网。
“Quantitative Strategic Asset Allocation, Easy for Everyone.”这是组合优化工具库的口号。今天介绍下这个库,有点类似matlab的投资组合工具箱,我们具体看看这个东西能实现什么功能。

1 简介
根据官网介绍Riskfolo-Lib是用于在Python环境下进行投资组合优化和量化资产配置的库。它的目标是帮助学生、学者和投资者建立基于复杂数学模型的投资组合。它构建在CVXPY之上,并与pandas数据结构紧密集成。看完简介着实吓一跳,功能是真丰富。
该库提供的一些关键功能:
(1)均值风险和对数均值风险(Kelly准则)4个目标函数的投资组合优化:
—最低的风险
—最大的回报
—最大的效用函数
—最大风险调整回报率
(2)采用13个凸风险度量的平均风险和对数平均风险(Kelly准则)组合优化:
—标准差。
—半标准差。
—平均绝对偏差(MAD)。
—第一低偏矩(欧米加比)。
—第二低偏矩(Sortino Ratio)。
—风险条件值。
—风险熵值(EVaR)。
—最坏情况实现(极小极大模型)
—无复合累积回报的最大提成(Calmar Ratio)。
—无复利累积回报的平均递减。
—无复利累积回报之有条件风险提款(CDaR)。
—Entropic Drawdown at Risk (EDaR)为无复利累积回报。
—非复合Ulcer指数
(3)基于10个凸风险度量的风险平价投资组合优化:
—标准差
—半标准差
—平均绝对偏差(MAD)
—第一低偏矩(比)
—第二下偏矩(Sortino比)
—风险条件值
—风险熵值(EVaR)
—无复利累积回报之有条件风险提款(CDaR)
—Entropic Drawdown at Risk (EDaR)为无复利累积回报
—非复合累积回报Ulcer指数
(4)层次聚类投资组合优化:层次风险平价(HRP)和层次平均风险贡献(HERC),使用朴素风险平价的22个风险度量:
—标准差
—方差
—半标准差
—平均绝对偏差(MAD)
—第一低偏矩(欧米加比)
—第二低偏矩(Sortino Ratio)。
—风险价值
—风险条件值
—风险熵值(EVaR)
—最坏情况实现(极大极小模型)
—复合和非复合累积回报的最大递减(Calmar Ratio)
—复合和非复合累积回报的平均递减
—以风险递减法(DaR)计算复利和非复利累积回报
—有条件风险提款(CDaR),适用于复合及非复合累积回报
—Entropic Drawdown at Risk (EDaR)为复利和非复利累积回报
—代表复合和非复合累积收益的Ulcer指数
(5)嵌套式聚类优化(NCO),具有四个目标函数和每个目标的可用风险措施:
—最低的风险
—最大的回报
—最大的效用函数
—同等风险的贡献
(6)最坏情况均值方差组合优化
(7)放宽风险平价投资组合优化
(8)基于Black Litterman模型的投资组合优化
(9)基于风险因素模型的投资组合优化
(10)基于Black Litterman Bayesian模型的投资组合优化
(11)基于增强Black Litterman模型的投资组合优化
(12)基于跟踪误差和周转约束的投资组合优化
(13)基于空头和杠杆投资组合的投资组合优化
(14)基于资产数量约束和有效资产数量约束的投资组合优化
2 安装
该库安装很简单,支持OS X、Windows和Linux上的Python 3.7+。使用pip进行安装时前,需要安装cvxpy 库,该库是专门用来求解最优化问题的工具库。首先在anaconda prompt中安装该库。
pip install cvxpyra
然后安装Riskfolio-Lib
pip install riskfolio-lib
由于库中例子数据来自雅虎,还需安装yfinance
pip install yfinance
Riskfolio-Lib有以下依赖:
numpy > = 1.17.0
scipy > = 1.1.0
pandas> = 1.0.0
matplotlib > = 3.3.0
cvxpy > = 1.0.25
scikit-learn > = 0.22.0
statsmodels > = 0.10.1
arch> = 4.15
xlsxwriter > = 1.3.7
networkx > = 2.5.1
Astropy >=4.3.1
3 代码案例
import numpy as np import pandas as pd import yfinance as yf import riskfolio as rp # Date range start = '2016-01-01' end = '2019-12-30' # Tickers of assets tickers = ['JCI', 'TGT', 'CMCSA', 'CPB', 'MO', 'APA', 'MMC', 'JPM', 'ZION', 'PSA', 'BAX', 'BMY', 'LUV', 'PCAR', 'TXT', 'TMO', 'DE', 'MSFT', 'HPQ', 'SEE', 'VZ', 'CNP', 'NI', 'T', 'BA'] tickers.sort() # Downloading the data data = yf.download(tickers, start = start, end = end) data = data.loc[:,('Adj Close', slice(None))] data.columns = tickers assets = data.pct_change().dropna() Y = assets # Creating the Portfolio Object port = rp.Portfolio(returns=Y) # To display dataframes values in percentage format pd.options.display.float_format = '{:.4%}'.format # Choose the risk measure rm = 'MSV' # Semi Standard Deviation # Estimate inputs of the model (historical estimates) method_mu='hist' # Method to estimate expected returns based on historical data. method_cov='hist' # Method to estimate covariance matrix based on historical data. port.assets_stats(method_mu=method_mu, method_cov=method_cov, d=0.94) # Estimate the portfolio that maximizes the risk adjusted return ratio w1 = port.optimization(model='Classic', rm=rm, obj='Sharpe', rf=0.0, l=0, hist=True) # Estimate points in the efficient frontier mean - semi standard deviation ws = port.efficient_frontier(model='Classic', rm=rm, points=20, rf=0, hist=True) # Estimate the risk parity portfolio for semi standard deviation w2 = port.rp_optimization(model='Classic', rm=rm, rf=0, b=None, hist=True)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/179205.html