均值方差模型python_python实现资产配置(2)--Blacklitterman 模型

1. Black-Litterman模型简介

在python实现资产配置(1)----Markowitz 投资组合模型中, 我们已经见过如何使用Markowitz求得最优资产配比. 这是一种在已知未来各资产的概率分布,然后再求解的方法.

Markowitz模型输入参数包括历史数据法和情景分析法两种方法,情景分析法的缺点是主观因素,随意性太强,因此使用历史数据法, 将资产的均值和协方差输入模型是比较常见的作法. 不过, 不足之处很明显: 未来的资产收益率分布不一定与过去相同. 此外, Markowitz 模型结果对输入参数过于敏感.

Black-Litterman模型就是基于此的改进. 其核心思想是将投资者对大类资产的观点 (主观观点) 与市场均衡收益率 (先验预期收益率)相结合,从而形成新的预期收益率(后验预期收益率). 这里的先验预期收益率的分布可以是贝叶斯推断中的先验概率密度函数的多元正态分布形式,投资者的主观观点就是贝叶斯推断中的似然函数(可以看作新的信息, 因为做出主观判断必然是从外界获取得到了这些资产的收益率变化信息), 而相应的, 后验预期收益率也可以从后验概率密度函数中得到. 具体的推导可以看我的这篇文章:从贝叶斯定理到贝叶斯推断.

BL模型的求解步骤包括下面几步:

(1) 使用历史数据估计预期收益率的协方差矩阵作为先验概率密度函数的协方差.

(2) 确定市场预期之收益率向量, 也就是先验预期收益之期望值. 作为先验概率密度函数的均值. 或者使用现有的期望值和方差来反推市场隐含的均衡收益率(Implied Equilibrium Return Vector), 不过在使用这种方法时, 需要知道无风险收益率

math?formula=R_f的大小.

(3) 融合投资人的个人观点,即根据历史数据(看法变量的方差)和个人看法(看法向量的均值)

(4) 修正后验收益.

math?formula=%5Cmu%5E%7BBL%7D%20%3D%20%5B(%5Ctau%5CSigma)%5E%7B-1%7D%2B(P%5ET%5COmega%5E%7B-1%7DP)%5D%5E%7B-1%7D%5B(%5Ctau%5CSigma)%5E%7B-1%7D%5CPi%2BP%5ET%5COmega%5E%7B-1%7DQ%5D%20%5C%5C%20%5CSigma%5E%7BBL%7D%20%3D%20%5CSigma%2B%5B(%5Ctau%5CSigma)%5E%7B-1%7D%2B(P%5ET%5COmega%5E%7B-1%7DP)%5D%5E%7B-1%7D

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是一个使用 Python 实现均值方差模型的简单代码示例: ``` import numpy as np import pandas as pd def mean_variance_model(returns): mean = returns.mean() cov = returns.cov() return mean, cov returns = pd.read_csv("stock_returns.csv", index_col=0) mean, cov = mean_variance_model(returns) print("均值:\n", mean) print("协方差矩阵:\n", cov) ``` 其中,`stock_returns.csv` 文件应包含股票的日收益率数据,每一列代表一只股票,每一行代表一天的数据。 ### 回答2: 下面是一个可以直接带入股票数据的均值方差模型Python代码: ```python import numpy as np def mean_variance_model(stock_prices): returns = np.diff(stock_prices) / stock_prices[:-1] expected_return = np.mean(returns) variance = np.var(returns) return expected_return, variance # 假设有一只股票的价格数据如下 stock_prices = [100, 105, 98, 110, 120] expected_return, variance = mean_variance_model(stock_prices) print("股票价格序列的平均收益率为: ", expected_return) print("股票价格序列的方差为: ", variance) ``` 这个代码首先导入了`numpy`库,用于进行数值计算。然后定义了一个名为`mean_variance_model`的函数,该函数接受股票价格序列作为输入。在函数内部,首先计算了每个时间点上的收益率,然后通过求平均值方差来估计整个价格序列的预期收益率和方差。最后,将预期收益率和方差打印出来。 在代码的最后,我们创建了一个股票价格序列`stock_prices`,并将其作为参数传递给`mean_variance_model`函数。函数返回的预期收益率和方差被存储在`expected_return`和`variance`变量中,并打印出来。 你可以将自己的股票价格序列直接替换`stock_prices`变量的值,并运行代码以获得你股票数据的均值方差估计结果。 ### 回答3: 下面是一个可以直接带入股票数据的均值方差模型Python代码: ```python import numpy as np import pandas as pd # 导入股票数据 df = pd.read_csv('stock_data.csv') # 假设股票数据存储在名为stock_data.csv的文件中 # 计算收益率 returns = df['Close'].pct_change().dropna() # 假设收盘价数据存储在名为Close的列中 # 计算均值方差 mean_return = np.mean(returns) variance = np.var(returns) # 输出结果 print('均值:', mean_return) print('方差:', variance) ``` 这段代码首先使用`pandas`库中的`read_csv`函数导入股票数据,并指定收盘价数据存储在名为`Close`的列中。然后,使用`pct_change`函数计算每日的收益率,并使用`dropna`函数去除空值。 接下来,使用`numpy`库中的`mean`和`var`函数分别计算收益率的均值方差,结果存储在`mean_return`和`variance`变量中。 最后,使用`print`函数输出均值方差。 请注意,你需要将代码中的文件名、列名等根据你的具体数据进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值