马科维茨有效前沿是经典的资产配置模型,对于给定收益率,有效前沿上的投资组合风险最小。
初学时,感觉绘制有效前沿是个极其有难度的事情,基本不可能完成。后来学了Python的一些数值计算方法,才感觉用程序绘制有效前沿其实是能完成的。
本文选择了上证50成分股进行有效前沿绘制,并用shibor代替无风险利率绘制CML。
一.公共函数
1.引入所用到的库
2.定义根据股票代码获取股票价格的函数
用到的财经数据库还是tushare,根据股票列表逐个获取行情,并将行情拼接成一个df返回。
3.定义计算投资组合收益率、风险、夏普比率的函数
因为数据是日行情,所以算出收益率和风险后要进行年化。其中计算期望收益率标准差的部分,用到的是协方差矩阵与权重的矩阵运算,从这我感受到了矩阵之美,感兴趣的可以自己进行数学推导。
二.蒙特卡洛方法生成资产组合
1.定义生成投资组合的方法
该函数有四个返回值,分别是各投资组合的各股票的权重列表,是各投资组合的收益率列表,各投资组合的波动率列表,各投资组合的夏普比率列表,其中第一个是二维数组,后三个是一维数组。
2.定义用到的变量
无风险利率本来想用一年的shibor的均值,无奈tushare的api返回空值,只好自己查了下s