根据Julia中的约束最大化Sharpe比率
我想最大化q[1](夏普比率)的值,在julia中受以下约束根据Julia中的约束最大化Sharpe比率,julia,julia-jump,Julia,Julia Jump,我想最大化q[1](夏普比率)的值,在julia中受以下约束 W的值元素为正。(W[i]>0) W的值之和为1。(和(W[1:5])==1) 参考::W是(5X1)向量,ex_mu是(5X1)向量,S是(5x5)矩阵。 我发现有两个julia库可以使用JuMP和Optim.jl,但无法按照库的要求转换函数getSharpeRatio 更新:到目前为止,我已经完成了,但在跳转库中似乎还没有实现转置 使用跳转 function getSharpeRatio(W,ex_mu,S) return
function getSharpeRatio(W,ex_mu,S)
return dot(W', ex_mu) / sqrt(dot(W',S*W))
end
items = [1;2;3;4;5]
m = Model()
@variable(m, 0 <= W[items] <= 1)
@constraint(m, sum{ W[item] , item in items} == 1)
@objective(m, Max, getSharpeRatio(W,ex_mu,S))
solve(m)
println(getvalue(W))
函数getSharpeRatio(W,ex_mu,S)
返回点(W',ex_mu)/sqrt(点(W',S*W))
结束
项目=[1;2;3;4;5]
m=模型()
@变量(m,0我认为您的函数需要在一个数组上。创建一个25+5+5长度的向量,并创建
getSharpeRatio(v)
startW,ex\u mu,S=translate(v)
函数,该函数使用视图获取临时数组
translate(v) = (view(v,1:5),view(v,6:10),reshape(view(11:35),5,5))
这不会分配,但这意味着您的新功能可以
function getSharpeRatio(v)
W,ex_mu,S=translate(v)
dot(W,ex_mu)/ sqrt(dot(W,S*W))
end
这与JuMP/Optim所期望的相符。从这里开始,您需要重新执行约束以匹配此处的索引…尽管我认为我设置了它(首先使用W),这样它才能工作。我相信您的函数需要在一个数组上。创建一个25+5+5长度的向量,并创建
getSharpeRatio(v)
开始W,ex_mu,S=translate(v)
函数,该函数使用视图获取临时数组
translate(v) = (view(v,1:5),view(v,6:10),reshape(view(11:35),5,5))
这不会分配,但这意味着您的新功能可以
function getSharpeRatio(v)
W,ex_mu,S=translate(v)
dot(W,ex_mu)/ sqrt(dot(W,S*W))
end
这与JuMP/Optim的预期相符。从这里开始,您需要重新执行约束以匹配此处的索引…尽管我认为我已经设置好了(首先使用W),这样它就可以工作。简单提示一下,使用q=dot(W,ex_mu)/sqrt(dot(W,S*W))相反,如果你想要一个标量。到目前为止你尝试了什么?我大约在一年前在Julia使用
NLopt
做了这件事。不幸的是,代码现在无法开源,但如果你尝试使用NLopt
并遇到问题,我可以回答你可能遇到的任何特定问题。此外,你不必解决这个问题m使用数值优化。例如,见Irlicht(2014)“快速递归投资组合优化”,正如@pkofod所指出的,我已将我的getSharpeRatio函数更新如下:函数getSharpeRatio(W,ex_μ,S)返回点(W',ex_μ)/sqrt(点(W,S*W))现在结束,我打算添加两个约束并最大化计算的夏普比率。那么,我应该如何使用NLopt/JuMP/Optim.jl使用跳转函数getSharpeRatio(W,ex_μ,S)返回点(W',ex_μ)/sqrt(点(W',S*W))来定义它呢结束项=[1;2;3;4;5]m=Model()@变量(m,0只是一个简单提示,使用q=dot(W,ex_mu)/sqrt(dot(W,S*W))相反,如果你想要一个标量。到目前为止你尝试了什么?我大约在一年前在Julia使用NLopt
做了这件事。不幸的是,代码现在无法开源,但如果你尝试使用NLopt
并遇到问题,我可以回答你可能遇到的任何特定问题。此外,你不必解决这个问题m使用数值优化。例如,见Irlicht(2014)“快速递归投资组合优化”,正如@pkofod所指出的,我已将我的getSharpeRatio函数更新如下:函数getSharpeRatio(W,ex_μ,S)返回点(W',ex_μ)/sqrt(点(W,S*W))现在结束,我打算添加两个约束并最大化计算的夏普比率。那么,我应该如何使用NLopt/JuMP/Optim.jl使用跳转函数getSharpeRatio(W,ex_μ,S)返回点(W',ex_μ)/sqrt(点(W',S*W))来定义它呢结束项=[1;2;3;4;5]m=Model()@变量(m,0