我的数组不在范围内

发布于 2025-01-15 18:37:52 字数 1194 浏览 2 评论 0原文

我正在尝试使用 4 种资产投资组合在有效前沿内找到最大夏普比率投资组合。出于某种原因,当我去发现每个资产达到 MSR 所需的权重时,我收到一个超出 0.0 - 1.0 范围的数组,这很奇怪,因为我在上面的公式中写了界限。我该如何解决这个问题?

def msr(riskfree_rate, er, cov):

""" target_ret ->;瓦 """

n = er.shape[0]

init_guess = np.repeat(1/n, n)

bounds = ((0.0, 1.0),)*n

weights_sum_to_1 = {
    'type': 'eq',
    'fun': lambda weights: np.sum(weights) -1  
}

def neg_sharpe_ratio(权重,riskfree_rate,er,cov):

    r = erk.portfolio_returns(weights, er)

    vol = erk.portfolio_vol(weights, cov)

    return -(r - riskfree_rate)/vol
    

结果 = 最小化(neg_sharpe_ratio, init_guess,

                   args = (riskfree_rate, er, cov,), method = "SLSQP",

                   options = {'disp': False},

                   constraints = (weights_sum_to_1),

                   bounds=bounds
                  )
return results.x

rf = 0.1

w_msr = msr( rf、er、cov)

r_msr = erk.portfolio_returns

vol_msr = erk.portfolio_vol(w_msr, cov)

msr(0.1, er[l], cov.loc[l,l])

答案:

array([4.51375048e-15, 1.00000000e+00, 1.40512602e-16 , 0.00000000e+00])

I am trying to find the max Sharpe ratio portfolio within an efficient frontier using a 4 asset portfolio. For some reason when I go to discover the required weights of each asset to reach the MSR, I receive an array that goes beyond the bounds of 0.0 - 1.0 which is weird as I have written the bounds in my formula above. How can I fix this?

def msr(riskfree_rate, er, cov):

"""
target_ret -> W
"""

n = er.shape[0]

init_guess = np.repeat(1/n, n)

bounds = ((0.0, 1.0),)*n

weights_sum_to_1 = {
    'type': 'eq',
    'fun': lambda weights: np.sum(weights) -1  
}

def neg_sharpe_ratio(weights, riskfree_rate, er, cov):

    r = erk.portfolio_returns(weights, er)

    vol = erk.portfolio_vol(weights, cov)

    return -(r - riskfree_rate)/vol
    

results = minimize(neg_sharpe_ratio, init_guess,

                   args = (riskfree_rate, er, cov,), method = "SLSQP",

                   options = {'disp': False},

                   constraints = (weights_sum_to_1),

                   bounds=bounds
                  )
return results.x

rf = 0.1

w_msr = msr(rf, er, cov)

r_msr = erk.portfolio_returns

vol_msr = erk.portfolio_vol(w_msr, cov)

msr(0.1, er[l], cov.loc[l,l])

answer:

array([4.51375048e-15, 1.00000000e+00, 1.40512602e-16, 0.00000000e+00])

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文