用python,matplotlib,numpy,pandas写一个程序:现有十只股票的数据"万华化学600309.xls","伊利股份600887.xls","恒瑞医药600276.xls","招商银行600036.xls","海尔智家600690.xls","海螺水泥600585.xls", "片仔癀600436.xls","贵州茅台600519.xls","通策医疗600763.xls", "长江电力600900.xls",以市值为权重捏合这十只股票,形成自定义的茅指数。市值是每天动态变化的,所以我们以当天的流通市值来捏合茅指数时,每天的权重都在变。假设mktvalue_tk为第t天,第 k 只股票的流通市值,r_kt为第t天第 k只股票的收益率。 第t 天总市值: sum_mktvalue= mktvalue_tk求和。 第t天,第 k 只股票占茅指数的权重: weight_tk = mktvalue_tk/sum_mktvalue。 “茅指数”每日收益率: mao_t = ,weight*r_kt最终结果请打印倒数三天的收益率以便检查。
时间: 2023-07-06 20:09:31 浏览: 48
以下是程序代码:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 定义股票代码和文件名
stocks = {"万华化学": "600309", "伊利股份": "600887", "恒瑞医药": "600276", "招商银行": "600036", "海尔智家": "600690",
"海螺水泥": "600585", "片仔癀": "600436", "贵州茅台": "600519", "通策医疗": "600763", "长江电力": "600900"}
file_path = "./stock_data/"
# 读取数据并计算每只股票的收益率
returns = pd.DataFrame()
for name, code in stocks.items():
file_name = file_path + code + ".xls"
data = pd.read_excel(file_name)
data.set_index("日期", inplace=True)
data.sort_index(inplace=True)
returns[name] = data["收盘价"].pct_change()
# 计算每天的茅指数收益率
mao_returns = pd.DataFrame()
for date in returns.index:
mktvalue = pd.Series()
for name, code in stocks.items():
file_name = file_path + code + ".xls"
data = pd.read_excel(file_name)
data.set_index("日期", inplace=True)
data.sort_index(inplace=True)
mktvalue[name] = data.loc[date]["流通市值"]
sum_mktvalue = mktvalue.sum()
weight = mktvalue / sum_mktvalue
mao_returns[date] = weight.dot(returns.loc[date])
# 打印倒数三天的茅指数收益率
print("倒数第一天茅指数收益率:{:.2%}".format(mao_returns.iloc[-1]))
print("倒数第二天茅指数收益率:{:.2%}".format(mao_returns.iloc[-2]))
print("倒数第三天茅指数收益率:{:.2%}".format(mao_returns.iloc[-3]))
```
这段代码会读取指定路径下的十只股票的数据,计算每只股票的收益率,并根据当天的流通市值来计算茅指数的权重,最终计算出每天的茅指数收益率。最后会打印倒数三天的茅指数收益率以供检查。