除了用蒙特卡洛模拟进行投资组合求解外,也可以通过python的scipy.optimize库进行最优化求解。接着上一篇文章,我们继续使用scipy.optimize进行投资组合最优化求解工作。
import scipy.optimize as sco
# 定义计算投资组合的状态函数如下
def portfolio_status(weights):
weights = array(weights)[:,newaxis]
port_rets = weights.T @ array(returns.mean() * 250)[:,newaxis]
port_vols = sqrt(multi_dot([weights.T, returns.cov()*250, weights]))
# 返回组合收益率,组合波动率和夏普比率
return array([port_rets, port_vols, port_rets/port_vols]).flatten()
用最优化module求解最大夏普比率对应的组合
# 定义夏普比率(取负号)函数
def sharpe_ratio(weights):
return -portfolio_status(weights)[2] #取return结果中的第3个数
# 设置每一只股票权重范围为0 |