一、 股票数据
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())
</