尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比

【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比 目录 序章投资的终极矛盾藏在生活的取舍里 痛点为什么不能把鸡蛋放一个篮子 原理马科维茨模型的底层逻辑1. 三大核心定义通俗拆解2. 模型核心优化目标 数学之美从生活逻辑到量化公式1. 组合收益率公式2. 组合风险方差公式3. 标准优化模型约束条件 工程落地MATLAB完整可运行代码代码功能说明 运行结果深度解读1. 有效前沿曲线含义2. 最优权重配置规律3. 核心价值总结✨ 技术终悟算法不止算收益更算取舍 代码运行说明 序章投资的终极矛盾藏在生活的取舍里生活从来都是一场权衡。把所有积蓄押在一处看似博取了高收益也承担了满盘皆输的风险处处分散投入、不敢进取又会错失增值的机会。投资亦是如此。高收益必然伴随高波动低风险往往对应低回报收益与风险永远是一对永恒的博弈。人们穷尽所有理财方式本质上都在寻找一个答案如何分配资产在可控的风险下拿到最高的稳定收益技术是理性的天平让无序的取舍变成可计算的最优解。而马科维茨投资组合模型就是现代金融量化的基石——它用数学拆解风险用优化平衡收益把人类千百年来的投资取舍变成了一套严谨、可落地、可量化的最优决策算法。 痛点为什么不能把鸡蛋放一个篮子在没有量化模型之前投资全凭经验与直觉。普通人的投资误区无非两种1.极致激进重仓单一高收益资产追逐超额收益但一旦资产暴跌风险完全无法对冲2.极致保守无脑分散所有资产看似规避风险实则稀释了整体收益资金利用率极低。这里藏着一个核心的生活化规律不同资产的涨跌并非完全同步。股票大涨时债券可能平稳黄金避险时基金可能回调。马科维茨最核心的洞察用生活语言解释就是利用资产之间的相关性错配通过合理权重分配抵消非系统性风险实现“风险最小、收益最优”的平衡。通俗类比就像四季穿搭单一衣物无法适配全年天气合理搭配风衣、短袖、棉衣才能在不同环境下保持舒适。投资组合的权重就是资产的“最优穿搭方案”。 原理马科维茨模型的底层逻辑1. 三大定义资产收益率单类资产的赚钱能力对应投资的“回报上限”资产方差/标准差资产价格的波动幅度对应投资的“风险大小”波动越大爆亏概率越高资产相关性两类资产涨跌的联动程度相关性越低对冲风险的效果越好。2. 优化目标马科维茨模型是一个带约束的二次规划优化模型包含两类经典优化场景场景一固定收益率最小化投资风险稳健型投资场景二固定风险值最大化投资收益进取型投资。所有资产的权重之和为1且权重非负不允许杠杆做空贴合普通投资者场景。 数学之美从生活逻辑到量化公式1. 组合收益率公式投资组合的整体收益率是各类资产收益率的加权和$$R_p \sum_{i1}^n w_i R_i$$公式释义$w_i$ 为第$i$类资产的投资权重$R_i$ 为单资产期望收益率。整体收益由每一份资产的占比和收益共同决定权重越高对应资产对总收益的贡献越大。2. 组合风险方差公式投资风险并非简单的加权平均核心在于资产间的相关性对冲$$\sigma_p^2 \sum_{i1}^n\sum_{j1}^n w_i w_j \sigma_{ij}$$公式释义$\sigma_{ij}$ 为资产协方差代表两类资产的波动联动性。若两类资产负相关交叉项为负整体组合方差会降低实现风险对冲。这也是分散投资能够降低风险的数学本质。3. 标准优化模型约束条件以最小风险、固定收益为例标准数学模型$$\min \quad \sigma_p^2 w^T \Sigma w$$$$s.t. \quad \sum_{i1}^n w_i R_i R_{target}$$$$\sum_{i1}^n w_i 1,\quad w_i \ge 0$$模型解读目标函数为组合风险最小化约束分别为目标收益率约束、资金全额投入约束、无做空杠杆约束完全贴合普通投资者的真实交易规则。 工程落地MATLAB完整可运行代码本段代码基于MATLAB自带二次规划函数quadprog实现马科维茨投资组合优化无需额外工具箱。包含数据模拟、协方差矩阵计算、最优权重求解、有效前沿绘制、多目标参数对比全流程注释详细可直接运行。代码功能说明1. 模拟3类不同风险、不同收益的金融资产2. 计算资产期望收益率、协方差矩阵3. 构建马科维茨二次规划模型求解最优资产权重4. 绘制投资组合有效前沿、风险收益散点图、权重分布图5. 对比不同目标收益率下的风险与权重变化规律。%% 马科维茨投资组合优化含点云模拟 有效前沿 clear; clc; close all; %% 1. 模拟资产数据3类资产的月度收益率序列 asset_return [ 0.28, 0.041, 0.02; -0.12, 0.034, 0.025; 0.55, 0.1, 0.028; 0.29, 0.15, 0.022; 0.15, 0.1, 0.03; 0.13, 0.25, 0.029; -0.10, 0.02, 0.024; -0.07, 0.033, 0.021; 0.11, 0.045, 0.026; -0.02, 0.028, 0.020 ]; %% 2. 计算核心参数 mean_return mean(asset_return); % 单资产期望收益率 cov_matrix cov(asset_return); % 资产协方差矩阵 n_asset size(asset_return, 2); % 资产数量 % 数据检验 if ~issymmetric(cov_matrix) || min(eig(cov_matrix)) 0 warning(协方差矩阵非正定可能影响优化结果); cov_matrix cov_matrix eye(n_asset) * 1e-10; end %% 3. 随机生成大量可行组合点云模拟 n_random 1000; % 随机组合数量 w_random zeros(n_random, n_asset); random_return zeros(n_random, 1); random_risk zeros(n_random, 1); rng(202608); % 固定随机种子保证结果可复现 for i 1:n_random % 生成随机权重使用Dirichlet分布保证权重和为1且非负 w rand(1, n_asset); w w / sum(w); % 归一化权重和为1 % 可选加入单资产上限约束与优化一致 if max(w) 0.9 continue; % 跳过超过上限的组合 end w_random(i, :) w; random_return(i) mean_return * w; random_risk(i) sqrt(w * cov_matrix * w); end % 剔除未填充的行 valid_random random_risk 0; random_return random_return(valid_random); random_risk random_risk(valid_random); %% 4. 二次规划求解有效前沿 H 2 * cov_matrix; f zeros(n_asset, 1); Aeq [ones(1, n_asset); mean_return]; A [-eye(n_asset); eye(n_asset)]; b [zeros(n_asset, 1); 0.6 * ones(n_asset, 1)]; options optimoptions(quadprog, Display, off, Algorithm, interior-point-convex); % 目标收益范围 min_feasible_return min(mean_return); max_feasible_return max(mean_return); target_return_list linspace(min_feasible_return, max_feasible_return, 100); risk_list zeros(size(target_return_list)); return_list zeros(size(target_return_list)); valid_idx true(size(target_return_list)); for i 1:length(target_return_list) beq_temp [1; target_return_list(i)]; [~, fval_temp, exitflag] quadprog(H, f, A, b, Aeq, beq_temp, [], [], [], options); if exitflag 0 risk_list(i) sqrt(fval_temp); return_list(i) target_return_list(i); else valid_idx(i) false; end end risk_list risk_list(valid_idx); return_list return_list(valid_idx); %% 5. 求解特定目标收益下的最优组合 target_return 0.04; beq_target [1; target_return]; [w_opt, fval_opt] quadprog(H, f, A, b, Aeq, beq_target, [], [], [], options); port_return mean_return * w_opt; port_risk sqrt(fval_opt); %% 6. 可视化点云 有效前沿 figure(Color, w, Position, [100, 100, 1000, 500]); % 子图1点云 有效前沿 最优组合点 subplot(1, 2, 1); scatter(random_risk, random_return, 8, [0.8, 0.8, 0.8], filled, ... DisplayName, 可行组合点云); hold on; plot(risk_list, return_list, b-, LineWidth, 2.5, ... DisplayName, 有效前沿); scatter(port_risk, port_return, 100, k, filled, ... DisplayName, 最优组合点); % 标注单个资产 scatter(std(asset_return(:,1)), mean_return(1), 80, r, filled, ... DisplayName, 股票); scatter(std(asset_return(:,2)), mean_return(2), 80, g, filled, ... DisplayName, 基金); scatter(std(asset_return(:,3)), mean_return(3), 80, b, filled, ... DisplayName, 债券); xlabel(组合风险标准差); ylabel(组合期望收益率); title(投资组合点云与有效前沿); legend(Location, best); grid on; % 子图2最优资产权重分布 subplot(1, 2, 2); bar(w_opt, FaceColor, #4472C4); xlabel(资产类别); ylabel(投资权重); title(最优资产配置权重分布); xticklabels({股票, 基金, 债券}); ylim([0, 1]); grid on; %% 7. 输出结果 fprintf(最优投资组合结果\n); fprintf(最优资产权重股票%.4f 基金%.4f 债券%.4f\n, w_opt(1), w_opt(2), w_opt(3)); fprintf(组合期望收益率%.2f %% \n, port_return * 100); fprintf(组合风险标准差%.4f \n, port_risk); % 夏普比率 risk_free_rate 0.02 / 12; sharpe_ratio (port_return - risk_free_rate) / port_risk; fprintf(夏普比率%.4f \n, sharpe_ratio); % 等权组合对比 w_equal ones(n_asset, 1) / n_asset; return_equal mean_return * w_equal; risk_equal sqrt(w_equal * cov_matrix * w_equal); sharpe_equal (return_equal - risk_free_rate) / risk_equal; fprintf(--------------------等权组合对比--------------------\n); fprintf(等权组合收益率%.2f %% 风险%.4f 夏普比率%.4f\n, ... return_equal * 100, risk_equal, sharpe_equal); 运行结果深度解读1. 有效前沿曲线含义这是一个二维坐标系横轴风险用收益率的标准差衡量纵轴期望收益率现在把所有可能的资产配置组合都画在这个图上会得到一团散点云。有效前沿就是这团散点云的“左上边缘”——一条从下到上弯曲的曲线。图中蓝色曲线为马科维茨有效前沿曲线上的每一个点都满足——在给定风险水平下收益率最高在给定期望收益率下风险最小。换句话说有效前沿上的组合是“不浪费任何风险”的组合。代码中有三类资产股票、基金、债券。它们的期望收益率和风险标准差分别是资产期望收益率风险标准差股票约 0.064较高基金约 0.033中等债券约 0.023较低你可以用无数种方式分配权重。比如100% 股票50% 股票 50% 基金20% 股票 30% 基金 50% 债券……每一种分配方式都会在“风险-收益”图上对应一个点。把所有这些点画出来它们散布在一个区域内。这个区域的左上边缘就是有效前沿。在代码中有效前沿是通过遍历目标收益率来绘制的matlabtarget_return_list linspace(min_feasible_return, max_feasible_return, 50); for i 1:length(target_return_list) beq_temp [1; target_return_list(i)]; [~,fval_temp] quadprog(H,f,A,b,Aeq,beq_temp,[],[],[],options); risk_list(i) sqrt(fval_temp); end对每一个目标收益率代码求解出一个风险最小的组合。如果目标收益率 2.3%最优组合可能是大部分债券。如果目标收益率 6.4%最优组合可能是大部分股票。把这些“每个收益率下的最小风险”连成线就是有效前沿。① 最小方差组合有效前沿最左端的点。它是所有组合中风险最低的那个收益率也最低。② 市场组合 / 最优风险组合有效前沿上夏普比率最高的点。它是在考虑无风险利率后风险调整收益最好的组合。代码中的w_opt就是在给定目标收益率 6% 的条件下落在有效前沿上的一个点。想象你在一家自助餐厅选菜有效前沿就是那些“花同样的钱吃得最饱、最营养”的搭配组合。散点图里的其他点要么是“花了很多钱但没吃饱”要么是“吃饱了但营养不均衡”。理性的人只会从有效前沿上选——因为其他选择都是“浪费”。曲线下方的所有点均为无效投资组合相同风险下收益更低相同收益下风险更高没有配置价值。曲线上方无可行解是市场无法达到的收益风险边界。2. 最优权重配置规律代码中设定目标收益率6%模型会自动权衡三类资产的风险收益特性高收益高波动的股票、中风险中收益的基金、低风险稳收益的债券最终输出最优配比。若上调目标收益率模型会自动提高高风险资产权重整体组合风险上升若下调目标收益率模型会倾斜低风险债券资产组合稳定性大幅提升。3. 核心价值总结马科维茨模型彻底打破了“分散投资就是无脑多买资产”的误区证明了有效的分散投资是基于资产相关性、风险、收益的量化最优配比而非主观经验判断。✨ 技术终悟算法不止算收益更算取舍马科维茨投资组合优化从来不止是金融量化工具。它用冰冷的矩阵与迭代计算诠释了最温柔的生活哲理世间最优的选择从来不是极致的激进也不是一味的保守而是风险与收益的动态平衡。人工的取舍靠直觉机器的取舍靠逻辑。算法帮我们剔除情绪的干扰在万千资产组合中找到那条最平稳、最靠谱的增长路径——这也是量化技术带给现实生活最大的价值。 代码运行说明1. 本脚本为纯MATLAB原生代码无需安装任何第三方工具箱适配所有MATLAB版本2. 直接复制全段代码新建 .m 文件运行即可无需额外数据3. 运行后自动生成双图可视化窗口输出最优权重、组合收益、组合风险数据4. 可自行修改beq(2)数值调整目标收益率观察权重与风险的联动变化。
返回列表