当前位置: 首页 > 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.jsqmd.com/news/42454/

相关文章:

  • 2025年比较好的排水波纹管设备厂家推荐及选择参考
  • 2025年口碑好的风管厂家最新权威推荐排行榜
  • Excel处理控件Aspose.Cells教程:使用Python从Excel工作表中删除数据透视表
  • 2025年专业的裸眼3DLED显示屏厂家最新推荐排行榜
  • Spring AI 1.1 正式发布,太强了。。
  • 2025 最新色母粒厂家推荐排行榜:阻燃 / 彩色 / 食品级 / 医用级 / PE/PP/PET 专用厂家权威榜单
  • 2025少儿人工智能机构TOP5推荐:妙小程领衔,从启蒙到信奥赛一站式解决方案
  • 2025年比较好的不锈钢链轮生产加工厂家最新推荐权威榜
  • MSTest NUnit xUnit VSTest Microsoft.Testing.Platform(MTP)
  • 2025年一线门窗品牌订制厂家权威推荐榜单:十大品牌门窗/欧福莱是不是一线品牌/欧福莱门窗源头厂家精选
  • 罗氏线圈:非接触式电流测量的技术突破
  • 十一周:振动合成与声速测量
  • Html中Jacascript弹框,实现编辑功能
  • 2025年知名的农机链条最新TOP厂家排名
  • 2025年合肥优质红枣供应商综合实力排行榜
  • 2025年评价高的定制家具五金厂家实力及用户口碑排行榜
  • 安徽省内香菇供货商哪家专业?2025年权威推荐榜单揭晓
  • 告别手动更新!WinForm 应用轻松集成自动升级功能 (HHUpdateApp)
  • Visual Studio Product Keys
  • 飞驰云联携手中国银行甘肃省分行 共筑信创时代文件传输基石
  • 2025年传感器检测颜色直销厂家权威推荐榜单:长距离色标传感器/检测黑色物体的光电/传感器检测黑色源头厂家精选
  • Spring事务失效的12种情况
  • 2025年农田墒情监测仪生产厂家权威推荐榜单:农田小气候监测仪/智能虫情测报灯/苗情监测源头厂家精选
  • 2025年靠谱的激光封边条实力厂家TOP推荐榜
  • 2025 最新无卤 / 磷酸酯 / 液体阻燃剂厂家推荐榜:TPP/TCP/IPPP 等全系列产品靠谱供应商权威榜单
  • 2025年诚信的水泥毯实力厂家TOP推荐榜
  • 2025年口碑好的珠宝首饰亚克力展示架厂家推荐及选择参考
  • 2025年口碑好的工具房压花机用户口碑最好的厂家榜
  • 从混沌中见你所见——文生图的逆向浪漫
  • 文件摆渡系统有哪些?2025年企业选型指南