使用scipy.minimze最大化Sharpe的比率

时间:2016-10-17 16:18:22

标签: python scipy mathematical-optimization nonlinear-optimization

我正在尝试使用scipy.minimize

来最大化Sharpe的比率

1

我这样做是为了找到CAPM的证券市场线

2

所以我有一个等式:

3

4

可选(如果不允许空头头寸):

5

所以我正在尝试解决这个问题:

def target_func(x, cov_matix, mean_vector, virtual_mean):
    f = float(-(x.dot(mean_vector) - virtual_mean) / np.sqrt(x.dot(cov_matix).dot(x.T)))
    return f


def optimal_portfolio_with_virtual_mean(profits, virtual_mean, allow_short=False):
    x = np.zeros(len(profits))
    mean_vector = np.mean(profits, axis=1)
    cov_matrix = np.cov(profits)
    cons = ({'type': 'eq',
             'fun': lambda x: np.sum(x) - 1})
    if not allow_short:
        bounds = [(0, None,) for i in range(len(x))]
    else:
        bounds = None
    minimize = optimize.minimize(target_func, x, args=(cov_matrix, mean_vector, virtual_mean,), bounds=bounds,
                                 constraints=cons)
    return minimize

但我总是获得成功:错误(超出迭代限制)。我试图设置maxiter = 10000选项,但它没有帮助。

我会很乐意提供任何帮助

P.S。我使用python 2.7

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是当我替换

时它完美无缺
x = np.zeros(len(profits))

使用

x = np.ones(len(profits))