如何解决Scipy Optimizer无法提供最佳结果
我正在尝试运行ipynb文件,该文件会从yahoo下载数据并运行scipy优化器。我的目标是找到具有最大锐度比的最佳重量分配。
ipynb的链接:https://www.dropbox.com/s/fipg3f4kpakm8cj/msr.ipynb?dl=0
index.js
它返回一个权重数组
def msr(riskfree_rate,er,cov):
n = er.shape[0]
init_guess = np.repeat(1/n,n)
bounds = ((0.0,1.0),) * n
# construct the constraints
weights_sum_to_1 = {'type': 'eq','fun': lambda weights: np.sum(weights) - 1
}
def neg_sharpe(weights,riskfree_rate,cov):
r = portfolio_return(weights,er)
vol = portfolio_vol(weights,cov)
return -(r - riskfree_rate)/vol
weights = minimize(neg_sharpe,init_guess,args=(riskfree_rate,cov),method='SLSQP',options={'disp': False},constraints=(weights_sum_to_1,),bounds=bounds)
return weights.x
我将无风险利率设为0的夏普比率
array([5.45508083e-13,2.98622238e-13,1.00000000e+00,0.00000000e+00,1.88124516e-12,0.00000000e+00])
输出:
ret = weight.T @ annualize_rets(df,period)
vol = (weight.T @ df.cov() @ weight)**0.5
ret/vol
但是我测试了另一种分配方式,它给出了更好的结果
-13.779468674840242
输出:
test_weight = np.array([0,1])
test_ret = test_weight.T @ annualize_rets(df,period)
test_vol = (test_weight.T @ df.cov() @ test_weight)**0.5
test_ret/test_vol
代码有问题吗?有什么想法吗?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。