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 (将#修改为@)