Python 如何寻找组合收益率和标准差的极值问题
1、认识投资组合的收益率和标准差公式

2、导入相关的模块和包

3、读取数据并处理数据

4、已jlr的资金权重为0.4来计算组合的收益率与标准差
求得焦炭与焦煤的组合的收益率为0.16%
求得焦炭与焦煤的组合的标准差为0.02047。
以上是在资产的资金权重确定的情况下计算组合的期望收益率和组合的标准差。如果资产的资金权重不知道,而想要风险最低,即标准差的值最小,而求得最佳的资金权重的比例。

5、用组合标准差最小和组合收益率最大 分别求的不同的资金权重比例
import numpy as np #导入numpy库,是科学计算库
from sympy import * #导入解方程组的模块
def ZHbestrate(A,B): #设置函数
w=np.linspace(0,1,100) #w取值,0-1等分100个数值
r=w*np.mean(A)+(1-w)*np.mean(B) #组合收益率公式
std=(w**2*np.var(A)+(1-w)**2*np.var(B)+\
2*w*(1-w)*np.std(A)*np.std(B)*A.corr(B))**0.5 #组合标准差公式
return (std.min(),r.max()) #返回求组合标准差最小,组合收益率最大的值
print(ZHbestrate(jlr,aulr),'组合标准差最小','组合收益率最大')
stdmin=ZHbestrate(jlr,jmlr)[0] #取组合标准差最小的值
rmax=ZHbestrate(jlr,jmlr)[1] #取组合收益率最大的值
w_rmax=Symbol('w_rmax') #设置参数,组合收益率最大是的资金权重比例
print(solve(w_rmax*np.mean(jlr)+\
(1-w_rmax)*np.mean(jmlr)-rmax,w_rmax)) #解方程组(组合收益率最大时)
w_stdmin=Symbol('w_stdmin') #设置参数,组合标准差最小时的资金权重比例
print(solve((w_stdmin**2*np.var(jlr)+(1-w_stdmin)**2*np.var(jmlr)+\
2*w_stdmin*(1-w_stdmin)*jlr.corr(jmlr)*np.std(jlr)*np.std(jmlr))*0.05\
-stdmin,w_stdmin)) #解方程组(当组合标准差最小时)
