Python-对多股票的投资组合进行分析

本文探讨了如何使用Python分析股票投资组合,包括选择风险最小和收益与风险平衡的股票组合,计算投资组合的收益,分析相关性和协方差矩阵,并运用蒙特卡洛模拟寻找最优投资策略,涉及Markowitz模型和夏普比率。
摘要由CSDN通过智能技术生成

一、 股票数据

1 股票选择

一共有十只股票,投资者购买目标指数中的资产,如果购买全部,从理论上讲能够完 美跟踪指数,但是当指数成分股较多时,购买所有资产的成本过于高昂,同时也 需要很高的管理成本,在实际中一般不可行,投资者购买成分股时,过多过少都不太合理。所以对十只股票数据选择。分别考虑风险最小和收益与风险平衡两种选择。此处不详细讨论股票的选择问题。
根据各股票所占投资权重选择股票。

1-1 风险最小时

十只股票所占权重:
[0.1753033 0.00369514 0.15429923 0.05403638 0.05760288 0.08978148 0.0404732 0.24393783 0.11091322 0.24791015]

权重大小代表在风险最小的情况下选择各支股票的概率,筛选出前五的股票:abc001,abc003,abc008,abc009,abc010作为成分股。

1-2 投资最优组合

收益和风险平衡时,各支股票的占比为:
[0.13995881 0.04174609 0.0744733 0.19486535 0.06728951 0.03574238 0.04879157 0.17721958 0.04126201 0.22572025]

根据模拟的结果,我们选取股票:abc001,abc004,abc007,abc008,abc010五支股票

首先导入将要用的Python包。

import pandas as pd
import matplotlib.pyplot as plt
from pandas import read_excel
import numpy as np

下面只展示1-1选择的股票组合(1-2选择的组合类似,只需要改变股票名)

2 获取每支股票的收盘价

将股票的每日的收盘价存入数据框 StockPrices 变量中。

# 创建空的DataFrame变量,用于存储股票数据
StockPrices = pd.DataFrame()
market_value_list=[]  #存储每支股票的平均市值
# 创建股票代码的列表
ticker_list = ['abc001','abc003','abc008','abc009','abc010']
# 使用循环,挨个获取每只股票的数据,并存储每日收盘价
for ticker in ticker_list:
   stock_data =  pd.read_excel('C:/Users/asus/Desktop/zqb/data/'+ticker+ '.xlsx', parse_dates=['时间'], index_col='时间',encoding='utf-8')
   stock_data=stock_data.loc['2019-01-29':'2020-03-25']
   market_value_list.append(stock_data['成交量'].mean()) 
StockPrices.index.name = 'date'  # 日期为索引列
# 输出数据的前5行
print(StockPrices.head())

在这里插入图片描述

3 计算股票的日收益率

计算股票每天的收益率,将数据存储在数据框 StockReturns 变量中。

# 计算每日收益率,并丢弃缺失值
StockReturns = StockPrices.pct_change().dropna()
# 打印前5行数据
print(StockReturns.head())

在这里插入图片描述
至此,我们已经准备好了用于分析的数据 StockReturns, 它记录了5支股票2019-01-29到2020-03-26每天的收益率。

二、投资组合的收益计算

我们选了5支股票,可资金怎么分配呢?这就需要对它们设置相应的权重,下面我们采用两种权重分配的方案,来计算不同组合下的投资收益。

1 给定权重的投资组合

第一种方案是预先设置一组权重(所有股票权重的和为1)。这5支股票:对应的权重如下:[0.35,0.25,0.17,0.1,0.13]。
我们将每支股票的收益,乘上其对应的权重,得到加权后的股票收益;再对所有股票加权后的收益求和,得到该组合投资的收益。

stock_return = StockReturns.copy()
# 绘制直方图
#给定权重的投资组合
# 设置组合权重,存储为numpy数组类型
portfolio_weights = np.array([0.35,0.25,0.17,0.1,0.13])
# 计算加权的股票收益
WeightedReturns = stock_return.mul(portfolio_weights, axis=1)
# 计算投资组合的收益
St
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值