中国建材网官方网站,沈阳建站多少钱,wordpress权重,柚子网站建设文章目录 一、数据准备二、有效前沿三、代码3.1 数据批量读取、预处理3.2 绘制可行集3.3 绘制有效前沿3.4 其它-最大夏普率 一、数据准备
准备多个股票的的历史数据#xff0c;目的就是找到最优的投资组合。
下载几个标普500里面的公式的股票数据吧#xff0c;下载方法也可… 文章目录 一、数据准备二、有效前沿三、代码3.1 数据批量读取、预处理3.2 绘制可行集3.3 绘制有效前沿3.4 其它-最大夏普率 一、数据准备
准备多个股票的的历史数据目的就是找到最优的投资组合。
下载几个标普500里面的公式的股票数据吧下载方法也可以看我的上一篇文章【MATLAB】股票(和指数)数据下载–雅虎财经
用你自己的数据也是一样的。
二、有效前沿
有效前沿Efficient Frontier是现代投资组合理论中的一个核心概念最早由经济学家哈里·马科维茨Harry Markowitz于1952年提出。
它表示在给定的风险水平下能够实现的最高预期收益或者在给定的预期收益下能够承担的最低风险。
有效前沿不仅是投资组合选择的理论基础也广泛应用于其他领域如资源优化、决策分析等。
在投资领域有效前沿通常通过均值-方差优化模型进行描述。在该模型中风险由资产收益的标准差或方差表示也称为波动率收益由资产的预期收益率表示。
有效前沿上的每一个点都代表一个优化的投资组合它在某个特定风险水平下提供最高的预期回报。 构建有效前沿的基本步骤包括 确定投资资产集合选择能够构成投资组合的资产。这些资产可以是股票、债券、房地产等。 估计资产的预期收益与风险计算每个资产的预期收益通常基于历史数据或市场预期以及各个资产之间的相关性即协方差矩阵。 计算投资组合的收益与风险对于不同的资产组合可以通过加权平均计算组合的预期收益和组合的风险标准差。组合的风险不仅依赖于单个资产的风险还受到各资产之间的相关性影响。 优化组合通过数学优化方法如线性规划、二次规划等寻找在不同风险水平下提供最大收益的资产组合。这个过程可以利用均值-方差优化或其他先进算法。 绘制有效前沿根据不同风险水平下优化出的资产组合绘制收益-风险图得到有效前沿曲线。 有效前沿可以通过以下数学公式来描述。假设有一个包含 n n n个资产的投资组合其中每个资产的预期收益为 r i r_i ri资产的权重为 x i x_i xi且资产收益的协方差矩阵为 Σ \Sigma Σ则投资组合的预期收益 R p R_p Rp和风险 σ p \sigma_p σp分别为
投资组合预期收益 R p ∑ i 1 n x i r i R_p \sum_{i1}^{n} x_i r_i Rpi1∑nxiri 投资组合风险标准差、波动率 σ p ∑ i 1 n ∑ j 1 n x i x j σ i j \sigma_p \sqrt{\sum_{i1}^{n} \sum_{j1}^{n} x_i x_j \sigma_{ij}} σpi1∑nj1∑nxixjσij 其中 σ i j \sigma_{ij} σij是资产 i i i和资产 j j j的协方差。
通过调整资产的权重 x i x_i xi可以得到一系列不同风险水平下的投资组合最终形成有效前沿。 你可能看到的是下面的公式它和前面的是一样的 σ p w T Σ w \sigma_p \sqrt{\mathbf{w}^T \Sigma \mathbf{w}} σpwTΣw 其中 σ p \sigma_p σp 是投资组合的波动率。 w \mathbf{w} w 是投资组合的权重向量例如 w 1 , w 2 , … , w n w_1, w_2, \dots, w_n w1,w2,…,wn表示每个资产在组合中的比例。 Σ \Sigma Σ 是资产收益率的协方差矩阵描述了不同资产之间的相关性和波动性。 有效前沿的意义与应用 优化投资组合有效前沿帮助投资者在给定的风险承受能力下选择最优的资产组合。在风险-收益权衡中任何位于有效前沿上的投资组合都不能通过改变权重来提高收益而不增加风险。 风险管理通过有效前沿投资者可以直观地了解在不同风险水平下可获得的最大收益从而做出更为理性的投资决策。 现代投资理论的基石有效前沿是现代投资组合理论的核心它推动了金融市场中基于数学优化的投资策略的广泛应用如资本资产定价模型CAPM等。 跨领域应用除了投资领域有效前沿的思想也应用于多个领域如供应链管理中的资源分配、生产管理中的成本控制、工程设计中的性能优化等。
尽管有效前沿是一个理论上非常优越的工具但其也存在一定局限性 依赖历史数据有效前沿的构建依赖于对历史数据的估计然而历史收益并不一定能准确预测未来的表现尤其是在市场波动剧烈时。 假设过于理想化现代投资组合理论假设资产收益是正态分布的而实际上金融市场中的资产收益可能具有偏度和峰度这使得均值-方差优化在实际应用中可能存在偏差。 忽略了投资者的其他需求有效前沿关注的是收益和风险的权衡而忽略了投资者的其他需求如流动性、税务等。
为了克服这些问题研究人员提出了多种改进方法例如
引入更多的风险度量指标如条件风险价值CVaR、最坏情况下的风险worst-case risk等。使用贝叶斯方法利用贝叶斯推断来改进参数估计减少数据不确定性对有效前沿的影响。引入行为金融学的视角将投资者心理、行为偏差等因素纳入投资决策中提供更为全面的投资建议。
三、代码
3.1 数据批量读取、预处理
7支股票数据放在一个文件夹里面 直接读取该文件夹内所有excel文件已经股票名称。
%% 读取股票数据放到一个table里面只要收盘价格% 获取stock目录下所有Excel文件
files dir(stock/*.xlsx);% 初始化一个空数组用来存储所有文件的收盘数据
allClosePrices [];
% 股票名称
stock_name {};% 循环遍历每个Excel文件
for i 1:length(files)% 获取当前文件的完整路径filePath fullfile(stock, files(i).name);% 保存股票名称stock_name [stock_name,strtok(files(i).name,_)];% 读取Excel文件中的数据data readtable(filePath, VariableNamingRule, preserve);% 检查该文件是否包含 收盘 列if ismember(收盘, data.Properties.VariableNames)% 提取 收盘 列数据closePrices data.(收盘);% 将收盘数据合并到 allClosePrices 中allClosePrices [allClosePrices, closePrices];elsewarning(文件 %s 不包含 收盘 列。, files(i).name);end
end% 创建table
stock_data table(data.(日期));
stock_data [stock_data,array2table(allClosePrices)];% 列命名
stock_data.Properties.VariableNames [日期,stock_name];
结果
如果你的数据有缺失值比如某至股票某些交易日数据丢失了可以选择删除这一天的所有数据或者用均值填充用临近的值填充等。 我使用的数据没有缺失值。 %% 数据预处理缺失值处理% 提取一下价格矩阵
price_data table2array(stock_data(:,2:8));% 用均值填补缺失值
for i 1:size(price_data, 2)% 计算该列非缺失值的均值column_mean nanmean(price_data(:, i));% 找到缺失值的位置并用均值填补price_data(isnan(price_data(:, i)), i) column_mean;
end% 删除缺失值
% price_data rmmissing(price_data);
3.2 绘制可行集
随机生成2000个权重即投资组合然后计算收益率、波动率画出散点图就做出了投资组合的可行集。 %% 收益率相关计算% 计算每日收益率
daily_returns diff(log(price_data)); % 求每支股票的年化平均收益率
mean_returns mean(daily_returns)*252;% 计算收益率的协方差矩阵
cov_matrix cov(daily_returns)*252;%% 模拟投资组合% 设置模拟的投资组合数目
num_portfolios 2000;
% 初始化权重矩阵为0矩阵
weights zeros(num_portfolios, length(stock_name));port_returns zeros(num_portfolios, 1);
port_volatility zeros(num_portfolios, 1);
port_sharpe zeros(num_portfolios, 1);% 随机生成投资组合权重
for i 1:num_portfolios% 随机权重w rand(1, length(stock_name));w w / sum(w); % 使权重总和为1% 计算组合的收益率和波动率portfolio_return sum(w .* mean_returns);portfolio_volatility sqrt(w * cov_matrix * w);% 存储结果weights(i, :) w;port_returns(i) portfolio_return;port_volatility(i) portfolio_volatility;% 计算夏普比率假设无风险利率为2%port_sharpe(i) (portfolio_return -0.02)/ portfolio_volatility;
end%% 绘制可行集figure;
scatter(port_volatility, port_returns, 10, port_sharpe, filled);
title(有效前沿);
xlabel(波动率);
ylabel(收益率);
grid minor
hold on3.3 绘制有效前沿
matlab的函数是Portfolio
旧版的叫啥我忘了反正推荐用新的就行
自己去看matlab的帮助文档就行说的很清楚 有哪些函数都写的很清楚 我的示例
% 创建 Portfolio 对象
p Portfolio;% 设置资产回报率数据均值和协方差矩阵
p Portfolio(p, assetmean, mean_returns, assetcovar,cov_matrix);
% 设置上、下限为 1表示权重之和为 1
p Portfolio(p, lowerbudget, 1, upperbudget, 1);% 设置下限为 0表示不允许空头最大收益率为xx
p Portfolio(p, lowerbound, 0,UpperBound,0.5);plotFrontier(p);
title(可行集和有效前沿);
xlabel(波动率);
ylabel(收益率);
grid minor
hold on3.4 其它-最大夏普率
夏普比率Sharpe Ratio 是衡量投资组合风险调整后收益的指标通常用来比较不同投资的风险收益表现。夏普比率越高表示单位风险下的回报越好投资表现越优秀。
夏普比率的计算公式为 S R p − R f σ p S \frac{R_p - R_f}{\sigma_p} SσpRp−Rf
其中 S S S 是夏普比率 R p R_p Rp 是投资组合的预期收益率 R f R_f Rf 是无风险利率通常使用短期国债收益率或类似的低风险投资的回报率 σ p \sigma_p σp 是投资组合的波动率即标准差表示投资组合的风险
解释 R p − R f R_p - R_f Rp−Rf投资组合的超额回报即投资组合回报减去无风险利率。这个部分衡量了投资组合的实际收益。 σ p \sigma_p σp投资组合的风险波动率。它表示收益的波动程度。
夏普比率的应用
较高的夏普比率表示相对于承担的风险投资组合的回报较高。换句话说投资者用较少的风险获得较好的回报。较低的夏普比率意味着投资组合的回报相对于风险较低或者相同风险下的回报较差。
夏普比率的改进 年化夏普比率如果收益率是日常或月度数据通常将其年化以便比较 日常数据 S annual S daily × 252 S_{\text{annual}} S_{\text{daily}} \times \sqrt{252} SannualSdaily×252 通常一年252个交易日月度数据 S annual S monthly × 12 S_{\text{annual}} S_{\text{monthly}} \times \sqrt{12} SannualSmonthly×12 针对不同时间频率的无风险利率无风险利率的选择应与数据的时间频率一致确保一致性。– 用的函数都是Portfolio对象的函数自己去看具体说明。
%% 计算最大夏普率% 估计有效投资组合以最大化 Portfolio 对象的夏
普比率
weights estimateMaxSharpeRatio(p);[risk, ret] estimatePortMoments(p, weights);plot(risk,ret,*b);
grid minormax_sharpe_ratio (ret-0.02)/risk;
fprintf(最大夏普率为%.4f,对应的波动率为%.4f, 收益率为%.4f\n,max_sharpe_ratio,risk,ret);%% 估计有效边界上指定数量的最优投资组合% 普比率是投资组合收益率均值与无风险利率之差除以投资组合收益标准差的比率。% 估计有效边界上指定数量的最优投资组合
pwgt estimateFrontier(p, 100); % 权重% 估计投资组合收益波动率标准差和均值
[prsk, pret] estimatePortMoments(p, pwgt);% 计算它们的夏普率
sharpe_ratio (pret-0.02)./prsk;