前言 金融行业的Python学习,不同于IT系统开发,我们并不需要达到程序员的水平。然而,学会Python可以让你实现一个人写完一个交易系统的需求,真正的一个人当成一支军队。 在量化交
前言金融行业的Python学习,不同于IT系统开发,我们并不需要达到程序员的水平。然而,学会Python可以让你实现一个人写完一个交易系统的需求,真正的一个人当成一支军队。 在量化交易里,Python是工具,金融是Sense,它可以让你的想法快速实现并得到验证。而在金融领域运用Python就必然会涉及资本市场最重要的部分——股票。“股市如此多娇,引无数投资者竞折腰”,用Python来分析股票投资组合收益率和波动率,是每个金融从业者都该掌握的本领。 我们缺少的,是在具体的金融场景下应用Python的经验。今天就让我们以金融股为分析对象,来一次Python金融实战,希望对你有所启发!
案例详情A公司是总部位于北京的一家公募基金管理公司,在公司对外发行的全部基金产品中,有一只名为“新金融股票型基金”,该基金在投资策略上是精选具有核心竞争优势、持续增长潜力且估值水平相对合理的A股市场金融股。 截止到2019年9月末,该基金重仓的股票包括浦发银行、招商银行、中信证券、海通证券、中国平安以及中国太保这6只股票,表7-2就列示了2014年1月至2019年9月末这6只股票的部分日收盘价,并且全部数据均存放于Excel文件。 2014年1月至2019年9月期间A股市场6只金融机构股票的部分日收盘价。 数据来源:上海证券交易所。(单位:元/股) 假定你是A公司的一位基金经理助理,日常的工作就是协助“新金融股票型基金”的基金经理跟踪并分析已投资的股票。根据基金经理的要求,你需要运用Python完成3项编程任务。 编程任务【任务 1】导入存放表7-2中这些股票在2014年1月至2019年9月期间日收盘价的Excel文件,计算每只股票的日收益率、年化平均收益率、年化收益波动率,计算日收益率时需要用自然对数。 【任务 2】针对由这6只股票构建的投资组合,随机生成包含每只股票配置权重的一个数组(权重合计等于1),并且计算以该权重配置的投资组合年化平均收益率、年化收益波动率。 【任务 3】随机生成包含2000组不同的股票配置权重的数组,以此计算出相对应的2 000个不同的投资组合年化平均收益率、年化收益波动率,并且以散点图的方式绘制在横坐标为年化收益波动率、纵坐标为年化平均收益率的坐标轴中。 编程提示针对任务2,假定投资组合由N只股票组成,wi代表了投资组合中第i只股票所占的权重(股票的市值占投资组合整体市值的比例),E(Ri)代表了投资组合中第i只股票的预期收益率(用该股票过去收益率的均值代替),可以得到投资组合预期收益率E(RP)的表达式如下: 同时,假设σi表示第i只股票的收益波动率,Cov(Ri,Rj)表示第i只股票收益率与第只股票收益率之间的协方差,投资组合收益波动率的σp表达式如下: 参考代码任务1的代码
从下图不难看出,由于6只股票均是金融类股票,因此在整体的走势方面存在一定的趋同性。但是每只股票的平均年化收益率则存在较大差异,其中,招商银行的平均收益率最高,浦发银行的收益率则最低。同时,从平均年化波动率来看,银行股最低,中国平安则最高。 2014年1月至2019年9月期间6只金融股股价走势图(股价在2014年首个交易日做归1处理) 任务2的代码
需要注意的是,由于是通过随机生成的数组,因此每一次得到的随机权重数组是不相同的,但是权重的合计数是等于1。
从以上的相关系数输出结果不难看出,由于都是金融股,因此不同股票之间的相关系数是比较高的,投资组合的分散化效应可能会不太理想。此外,根据随机生成的权重数,得到投资组合的年化收益率为9.581 6%,波动率高达31.545 4%。 任务3的代码
下图中的散点就是本次随机生成2 000组不同投资权重所对应的投资组合收益率和波动率。通过映射至纵坐标的数值,可以目测出投资组合的最高年化收益率超过16%,最低年化收益率则略低于7%;通过映射至横坐标的数值可以发现,投资组合的最高波动率接近37%,最低波动率则接近26%。 在随机生成的2000组不同投资权重条件下投资组合的收益率与波动率的关系图 |
2019-06-18
2019-07-04
2021-05-23
2021-05-27
2021-05-27