import numpy as np
import pandas as pd
import pandas_datareader.data as web
from datetime import date
import numpy.random as npr
import matplotlib.pyplot as plt
from pylab import mpl
#设置中文字体
plt.rcParams['font.family'] = 'Arial Unicode MS'
plt.rcParams['axes.unicode_minus']=False
df = web.DataReader('600036.SS','yahoo',date(2018,1,1),date(2020,12,31))['Adj Close']#计算对数收益率
R = np.log(df/df.shift(1))
#剔除缺失值
R = R.dropna()
#计算年化收益率
miu = R.mean()*252
#计算年化波动率
sigma = R.std()*np.sqrt(252)
print('茅台白酒股票预期年收益率为{:.4f},收益率的年化波动率为{:.4f}'.format(miu,sigma))
#生成2022年的交易日日期,其中freq='B'表示工作日,freq='D'表示日历日
date = pd.period_range('2022/1/2','2022/12/31',freq = 'B')
#转换成str格式
date = date.astype(str)
n = len(date)
I = 100#模拟100条路径
dt = 1/365
result = np.zeros((n,I))
#招商银行2022年1月2日股价作为初始股价
result[0] = 43.17
#根据几何布朗运动公式预测股价
for t in range(1,n):
e = npr.standard_normal(I)
result[t] = result[t-1]*np.exp((miu - 0.5*sigma**2)*dt+sigma*e*np.sqrt(dt))
result = pd.DataFrame(result,index = date)
print(result)
#绘制茅台白酒2023年股价模拟路径
plt.plot(result)
plt.xlabel('日期')
plt.ylabel('股价')
plt.xticks([1,64,126,191,252],['2023.1.1','2023.3.1','2023.5.1','2023.8.1','2023.11.31'])
plt.xticks(rotation = 30)#调整横坐标刻度值的角度
plt.title('2022年1月2日-2022年12月31日招商银行股价模拟')
plt.show()
相似问题