当前位置: 首页 > news >正文

基于MATLAB实现投资组合优化配置及GUI展示

一、GUI界面设计(GUIDE布局)

1. 主界面组件布局

% 创建主窗口
fig = uifigure('Name','投资组合优化系统','Position',[100,100,800,600]);% 输入参数面板
inputPanel = uipanel(fig,'Title','输入参数','Position',[20,20,350,300]);
assetList = uicontrol(inputPanel,'Style','popupmenu','String',{'3只股票','5只ETF'},...'Position',[20,250,100,22],'Callback',@assetSelectCallback);
muInput = uicontrol(inputPanel,'Style','edit','String','0.15,0.12,0.18',...'Position',[150,220,150,22],'TooltipString','输入预期收益率(逗号分隔)');
covInput = uicontrol(inputPanel,'Style','edit','String','0.04,0.02,0.01;0.02,0.03,0.015;0.01,0.015,0.025',...'Position',[150,190,150,22],'TooltipString','输入协方差矩阵(行逗号分隔)');
riskAversion = uicontrol(inputPanel,'Style','slider','Min',0.1,'Max',3,'Value',1,...'Position',[20,150,150,22],'TooltipString','风险厌恶系数(0-3)');% 结果展示面板
resultPanel = uipanel(fig,'Title','优化结果','Position',[400,20,350,300]);
weightsTable = uitable(resultPanel,'Data',[0.333,0.333,0.333],...'Position',[20,50,300,150],'ColumnWidth',{100},'ColumnName',{'资产1','资产2','资产3'});
efficientFrontier = uiaxes(resultPanel,'Position',[20,20,300,100]);

二、核心算法实现

1. 均值-方差优化模型

function [weights, sharpe] = meanVarOptimization(mu, covMatrix, riskAversion)n = numel(mu);p = optimproblem('ObjectiveSense','minimize');% 决策变量w = optimvar('w',n,'LowerBound',0,'UpperBound',1);% 目标函数:最小化风险(负夏普比率)p.Objective = (w' * covMatrix * w) / (2 * (mu * w - riskAversion * sqrt(w' * covMatrix * w)));% 约束条件p.Constraints.sum = sum(w) == 1;% 求解sol = solve(p);weights = sol.w;sharpe = (mu * weights - riskAversion) / sqrt(weights' * covMatrix * weights);
end

2. 风险平价模型

function weights = riskParityOptimization(volatilities)n = numel(volatilities);p = optimproblem('ObjectiveSense','minimize');% 决策变量w = optimvar('w',n,'LowerBound',0);% 目标函数:最小化风险贡献差异riskContrib = w .* volatilities .* (covMatrix * w) / (w' * covMatrix * w);p.Objective = sum((riskContrib - 1/n).^2);% 约束条件p.Constraints.sum = sum(w) == 1;% 求解sol = solve(p);weights = sol.w;
end

三、回调函数实现

1. 资产选择回调

function assetSelectCallback(~,~)switch get(assetList,'Value')case 1set(muInput,'String','0.15,0.12,0.18');set(covInput,'String','0.04,0.02,0.01;0.02,0.03,0.015;0.01,0.015,0.025');case 2set(muInput,'String','0.08,0.10,0.12,0.09,0.11');set(covInput,'String','0.0225,0.015,0.011,0.008,0.012;0.015,0.025,0.018,0.010,0.014;0.011,0.018,0.022,0.012,0.016;0.008,0.010,0.012,0.015,0.013;0.012,0.014,0.016,0.013,0.020;');end
end

2. 优化计算回调

function optimizeButton_Callback(~,~)% 解析输入参数mu = str2double(strsplit(get(muInput,'String'),','));covMatrix = str2double(strsplit(get(covInput,'String'),';'));riskAversion = get(riskAversion,'Value');% 执行优化[weights, sharpe] = meanVarOptimization(mu, covMatrix, riskAversion);% 更新结果set(weightsTable,'Data',weights');plotEfficientFrontier(mu, covMatrix, weights);
end

四、可视化模块

1. 有效前沿绘制

function plotEfficientFrontier(mu, covMatrix, optimalWeights)numPortfolios = 1000;results = struct();% 生成随机组合for i = 1:numPortfoliosw = rand(1,numel(mu));w = w / sum(w);results(i).return = w * mu';results(i).risk = sqrt(w * covMatrix * w');end% 绘制散点图ax = gca;scatter(ax, [results.risk], [results.return], 10, 'filled');hold on;% 绘制最优组合optimalReturn = optimalWeights * mu';optimalRisk = sqrt(optimalWeights * covMatrix * optimalWeights');plot(ax, optimalRisk, optimalReturn, 'r*', 'MarkerSize', 15);% 图表修饰xlabel('风险 (标准差)');ylabel('预期收益率');title('有效前沿与最优组合');legend('随机组合', '最优组合');grid on;
end

五、完整代码结构

%% 主程序
function mainGUIcreateGUI();function createGUI()% 创建GUI组件(代码见上文界面设计部分)% ...end% 回调函数(代码见上文回调函数部分)% ...
end

参考代码 实现投资组合的最优化配置,并且GUI呈现结果 www.youwenfan.com/contentcnl/81024.html

六、运行示例

  1. 输入参数

    • 资产数量:3只股票

    • 预期收益率:0.15,0.12,0.18

    • 协方差矩阵:

      0.04,0.02,0.01  
      0.02,0.03,0.015  
      0.01,0.015,0.025
      
    • 风险厌恶系数:1.5

  2. 输出结果

    资产 权重 风险贡献
    股票A 42.3% 45.1%
    股票B 37.6% 38.7%
    股票C 20.1% 16.2%
http://www.rkmt.cn/news/51853.html

相关文章:

  • 2025年比较好的排水波纹管设备厂家推荐及选择参考
  • 2025年口碑好的风管厂家最新权威推荐排行榜
  • 2025年专业的裸眼3DLED显示屏厂家最新推荐排行榜
  • 2025少儿人工智能机构TOP5推荐:妙小程领衔,从启蒙到信奥赛一站式解决方案
  • 罗氏线圈:非接触式电流测量的技术突破
  • Html中Jacascript弹框,实现编辑功能
  • 2025年知名的农机链条最新TOP厂家排名
  • 2025年合肥优质红枣供应商综合实力排行榜
  • Spring事务失效的12种情况
  • 2025年口碑好的珠宝首饰亚克力展示架厂家推荐及选择参考
  • 从混沌中见你所见——文生图的逆向浪漫
  • 100_尚硅谷_break引入和快速入门
  • 2025 最新托盘厂家权威推荐榜:网格 / 川字 / 田字 / 九脚 / 塑料托盘优质企业精选,采购必看
  • 2025年质量好的膨化食品挤出机螺杆用户好评厂家排行
  • 2025年有实力玻璃钢储罐最新TOP品牌厂家排行
  • 2025 年 11 月医用造口袋设备厂家推荐排行榜,医用造口袋全自动生产线,医用造口袋焊接设备,专业高效与稳定耐用优质品牌
  • VonaJS: 基于winston的Logger日志系统
  • 2025 年 11 月管式膜焊接机厂家推荐排行榜,管式膜片/DTRO膜/MBR平板膜/热熔式平板膜机/膜片/导丝护套管盘管焊接机,导丝护套管盘管机,管式超滤膜焊接设备公司推荐
  • VSCode SSH remote
  • 机器学习之数据集划分及验证和测试
  • 2025年靠谱的石塑地板墙板厂家推荐及选择指南
  • 网闸文件交换一体机是什么?一文读懂新型网闸的最新机制
  • 2025年2.0mm养殖防渗土工膜环保材料推荐榜
  • 2025年靠谱的五金淋浴房配件厂家最新实力排行
  • 基于MATLAB的双树复小波变换和双树复小波包变换的代码实现
  • 人脸识别初识原理及实现
  • 2025年评价高的公寓床厂家最新权威实力榜
  • 2025年诚信的网纹辊橡胶辊厂家推荐及选购指南
  • Ai元人文实践宣言:用价值原语解码技术资本的贪婪密码
  • 2025年有实力锌合金便携式烟灰缸TOP实力厂家推荐榜