Julia中如何利用凸优化进行投资组合优化

Julia中如何利用凸优化进行投资组合优化,julia,convex-optimization,Julia,Convex Optimization,我试图使用Julia(0.5)和Convex.jl(带ECOS solver)来计算,给定一个包含2只股票的投资组合,我如何在这两只股票上分配我的配置(以百分比为单位),从而最大化我的投资组合回报和最小化我的风险(回报的标准偏差)。我想最大限度地提高夏普比率,夏普比率是根据我在两支股票中所占的百分比计算得出的。所以我想最大化夏普比率,让解算器计算出这两种股票的最优配置(我想让它告诉我我需要股票1的x%和股票2的1-x%)。唯一真正的限制是分配百分比的总和增加到100%。我有下面运行的代码,但没有

我试图使用Julia(0.5)和Convex.jl(带ECOS solver)来计算,给定一个包含2只股票的投资组合,我如何在这两只股票上分配我的配置(以百分比为单位),从而最大化我的投资组合回报和最小化我的风险(回报的标准偏差)。我想最大限度地提高夏普比率,夏普比率是根据我在两支股票中所占的百分比计算得出的。所以我想最大化夏普比率,让解算器计算出这两种股票的最优配置(我想让它告诉我我需要股票1的x%和股票2的1-x%)。唯一真正的限制是分配百分比的总和增加到100%。我有下面运行的代码,但没有给出我期望的最佳权重/分配(Supertech为36.3%,Slowpoke为63.7%)。解算器返回50/50

我的直觉是,我要么为解算器错误地建模了目标函数,要么我需要对约束做更多的工作。我对凸优化没有很好的理解,所以我正在努力。此外,我的目标函数使用variable.value属性来获得正确的输出,我怀疑我需要使用variable expression对象

问题是,我试图实现的是凸面解算器的设计目标,我只需要更好地对目标函数和约束进行建模,还是只需要迭代权重并对其施加暴力

带注释的代码:

using Convex, ECOS
Supertech = [-.2; .1; .3; .5];
Slowpoke = [.05; .2; -.12; .09];
A = reshape([Supertech; Slowpoke],4,2)
mlen = size(A)[1]
R = vec(mean(A,1))
n=rank(A)
w = Variable(n)
c1 = sum(w) == 1;
λ = .01
w.value = [λ; 1-λ]
sharpe_ratio = sqrt(mlen) * (w.value' * R) / sqrt(sum(vec(w.value' .* w.value) .*  vec(cov(A,1,false))))
# sharpe_ratio will be maximized at 1.80519 when w.value = [λ, 1-λ] where λ = .363
p = maximize(sharpe_ratio,c1);
solve!(p, ECOSSolver(verbose = false));  # when verbose=true, says is 'degenerate' because I don't have enough constrains...
println(w.value) # expecting to get [.363; .637] here but I get [0.5; 0.5]

如果您(交叉)将此内容发布到上的优化频道,您可能会得到更好的回复。@KevinLKeys谢谢!完成!