【问题标题】:Maximize Sharpe's ratio using scipy.minimze使用 scipy.minimize 最大化夏普比率
【发布时间】:2017-02-26 17:17:47
【问题描述】:

我正在尝试使用 scipy.minimize 最大化夏普比率

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

所以我有一个方程式:

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

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

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

但我总是得到 Success: False(超出迭代限制)。我尝试设置 maxiter = 10000 选项,但没有帮助。

如果有任何帮助,我将不胜感激

附:我使用 python 2.7

【问题讨论】:

  • 作为调试的第一步:将options={'disp': True} 添加到optimize.minimize 函数并发布整个输出。顺便说一句:您是否像上面的 disp-example 那样将 maxiter 变量设置为 dict-entry ?就是这样!
  • @sascha 是的,我做到了。我的选项字典就像 options={'maxiter': 10000}。并且 scipy.optimize 输出确认 maxiter 设置正确
  • 然后显示输出,包括。显示。
  • 好的。很明显这是坏了!你不想观察南斯。因为我们不知道数据/整个代码,我认为您必须自己检查 nans 的原因。
  • 初始点 0 真的很糟糕:目标无法在那里进行评估。请注意,通常涉及夏普比率的问题可以重新表述为凸 QP link

标签: python scipy mathematical-optimization nonlinear-optimization


【解决方案1】:

我不知道为什么,但是当我更换时它可以完美地工作

x = np.zeros(len(profits))

x = np.ones(len(profits))

【讨论】:

  • 因为只有局部收敛是有保证的,而且一个向量似乎是一个更好的起点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2018-08-11
  • 2020-10-06
  • 1970-01-01
  • 2018-12-13
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多