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