通过Python调用Matlab的投资组合优化器失败

2024-10-01 17:34:03 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里,我用Python估算了我的资产回报和协方差,并希望使用Matlab的投资组合优化器来获得具有最大Sharpe比率的投资组合

在Matlab中我有一个函数

function pwgt= calculate_portfolio(r0,m,C,lb,ub,target)
p = Portfolio('RiskFreeRate', r0);
p = setAssetMoments(p, m, C);
p = setBounds(p,lb,ub);
p = setBudget(p,target,target);
pwgt = estimateMaxSharpeRatio(p);

在Python中,我有

import matlab
import matlab.engine
eng = matlab.engine.connect_matlab()
test_mean = matlab.double(mat_mean.values.tolist())
test_cov = matlab.double(mat_cov.values.tolist())
result = eng.calculate_portfolio(0.03, test_mean, test_cov, -1, 1, 1)

其中test_mean是一个5*1系列,test_cov是一个5*5协方差矩阵(存储为pandas数据帧)。你知道吗

但是,在Python中调用函数时,错误如下:

MatlabExecutionError: 
File /Applications/MATLAB_R2016b.app/toolbox/optim/optim/linprog.m, line 158, in linprog
File /Applications/MATLAB_R2016b.app/toolbox/finance/finance/@Portfolio/private/mv_estimate_lower_bound.p, line 0, in mv_estimate_lower_bound
File /Applications/MATLAB_R2016b.app/toolbox/finance/finance/@Portfolio/private/mv_optim_transform.p, line 0, in mv_optim_transform
File /Applications/MATLAB_R2016b.app/toolbox/finance/finance/@Portfolio/estimateFrontierLimits.m, line 70, in estimateFrontierLimits
File /Applications/MATLAB_R2016b.app/toolbox/finance/finance/@Portfolio/estimateMaxSharpeRatio.m, line 33, in estimateMaxSharpeRatio
File /Users/Michael/Documents/MATLAB/calculate_portfolio.m, line 6, in calculate_portfolio
LINPROG requires the following inputs to be of data type double: 'b','LB'.

我该如何解决这个问题。你知道吗


Tags: intestapplinetoolboxmeanfilecalculate

热门问题