微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scipy.Optimize.Minimize 函数为所有输入值返回几乎相同的值请帮我找出错误

如何解决Scipy.Optimize.Minimize 函数为所有输入值返回几乎相同的值请帮我找出错误

minvol() 函数应该返回导致相同回报量的最小标准偏差的权重。标准差由 portvol() 函数计算,投资组合收益由投资组合 return() 函数根据此权重数据计算。但是,对于我的回报范围内的所有权重值,我从优化函数(最小化)中得到的投资组合标准偏差值有些相同。我的代码肯定有问题。有人可以帮我确定是什么吗?

from scipy.optimize import  minimize
import matplotlib.pyplot as plt

rho=[[1,0.4000,0.2500,0.2000,0.1500,0.2000],[0.4000,1,0.7000,0.6000,[0.2500,0.7500,0.1000],[0.2000,0.1500],[0.1500,0.3000],0.1000,0.3000,1]]
o=[[0]*6]*6
arr=[0.0680,0.2240,0.2210,0.2310,0.0680]
for i in range(6):
    o[i][i]=arr[i]
cov=np.matmul(np.matmul(o,rho),o)
er=[0.400,0.1060,0.0830,0.1190,0.1280,0.0620]
def portfolio_return(w):
    return np.dot(w,er)
def portvol(w):
    return np.matmul(np.matmul(np.transpose(w),cov),w)

def minvol(target):
 initw=np.repeat(1/6,6)
 bounds=((0.0,1.0),)*6
 is_target = {'type': 'eq','fun':lambda w:(target - portfolio_return(w))}
 sumweight = {'type':'eq','fun':lambda w:(np.sum(w)-1)}
 cons=[is_target,sumweight]
 result=minimize(portvol,initw,method="SLSQP",options={'disp':False},constraints=cons,bounds=bounds)
 return result.x

def wtdefine():
    target=np.linspace(0.0620,100)
    weights=[minvol(tar) for tar in target]
    return weights
def plotter():
    weights=wtdefine()
    rets=[portfolio_return(w) for w in weights]
    vols=[portvol(w) for w in weights]
    print(rets,vols)
    plt.plot(vols,rets)
    plt.show()
plotter()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。