Matlab代码实现 选定若干股票,设定收益率,选择合适的股票配置权重构造最小方差组合。不断改变设定收益率,重新构造最小方差组合,并将所有最小方差组合的标准差与收益率用有效边界图展示。
时间: 2024-03-14 11:47:32 浏览: 18
好的,这里是 Matlab 代码的实现过程:
首先,我们需要下载股票数据并计算出每只股票的日收益率。这里我们以阿里巴巴、百度、腾讯三只股票为例,代码如下:
```matlab
% 下载股票数据
startDate = '2019-01-01';
endDate = '2020-12-31';
T = table();
T.ALIBABA = fetch(yahoo,'BABA',startDate,endDate);
T.BAIDU = fetch(yahoo,'BIDU',startDate,endDate);
T.TENCENT = fetch(yahoo,'0700.HK',startDate,endDate);
% 计算每只股票的日收益率
returns = tick2ret(T{:,:},'Method','Continuous');
```
接下来,我们需要编写一个函数来计算给定收益率下的最小方差组合权重。代码如下:
```matlab
function [w, sigma] = minVarWeights(returns, targetRet)
% 计算协方差矩阵
C = cov(returns);
% 设置约束条件
Aeq = ones(1,size(returns,2));
beq = 1;
lb = zeros(size(returns,2),1);
ub = ones(size(returns,2),1);
% 求解
options = optimoptions('quadprog','Display','off');
w = quadprog(2*C,[],[],[],Aeq,beq,lb,ub,[],options);
% 计算标准差
sigma = sqrt(w'*C*w);
end
```
最后,我们可以编写一个脚本来生成有效边界图。代码如下:
```matlab
% 设定目标收益率范围
targetRets = linspace(0, max(mean(returns))*1.2, 50);
% 计算最小方差组合的标准差和权重
sigmas = zeros(length(targetRets),1);
weights = zeros(length(targetRets),size(returns,2));
for i = 1:length(targetRets)
[weights(i,:), sigmas(i)] = minVarWeights(returns, targetRets(i));
end
% 绘制有效边界图
figure;
plot(sigmas, targetRets, 'b');
xlabel('标准差');
ylabel('收益率');
title('有效边界图');
```
运行以上代码,就可以得到有效边界图。如果需要选择合适的股票配置权重,可以通过调整目标收益率来得到最小方差组合的权重。