选取两只指数:沪深300、标普500,两个股,2018年1月1日至今的日线行情数据,做正态性检验。
沪深300:(其实可以四个股票放在一个data里的,做这个题的时候还不会)
from pylab import mpl,plt
import numpy as np
import pandas as pd
import scipy.stats as scs
import statsmodels.api as sm
import tushare as ts
import datetime
import yfinance as yf
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline
pro = ts.pro_api(自己的token)
HS300 = pro.index_daily(ts_code='000300.SH', start_date='20180101')
HS300['trade_date'] = pd.to_datetime(HS300['trade_date'])
HS300 = HS300.set_index('trade_date')
HS300 = HS300.sort_index()
HS300 = HS300['close'].dropna()
(HS300/HS300.iloc[0]*100).plot(figsize=(15,7))
#收益率
r_log = np.log(HS300/HS300.shift(1))
#风险
std = np.sqrt(r_log.var()*252)
#参数初始化
r = r_log[:5].mean()
sigma = std
M = len(r_log)
plt.figure(figsize = (15,7))
plt.hist(r_log.dropna(),bins=70,density=True,label='frequency',color='b')
plt.xlabel('returns')
plt.ylabel('frequency')
x = np.linspace(plt.axis()[0],plt.axis()[1])
plt.plot(x,scs.norm.pdf(x,loc=r/M,scale=sigma/np.sqrt(M)),'r',lw=2.5,label='pdf')
plt.legend()
这个参数取的也不知道对不对,难过。
#QQ检验
sm.qqplot(r_log.dropna(),line='s')
plt.title('HS300')
plt.xlabel('theoretical quantiles')
plt.ylabel('sample quantiles')
标普500、贵州茅台、黄金ETF
import seaborn as sns
sns.set(font='SimHei',rc={'figure.figsize':(13,6)})
tickers = {
'SPY':'标普500',
'600519.SS':'贵州茅台',
'518880.SS':'黄金ETF'
}
data = yf.download(list(tickers),start='2018-01-01')['Close']
data.rename(columns=tickers,inplace=True)
data = data.dropna()
(data/data.iloc[0]*100).plot(figsize=(15,7))
#收益率
r_log = np.log(data/data.shift(1))
M = 600
for i in range(3):
fig = plt.figure(figsize=(8,6))
retu = r_log.iloc[:,i]
r = retu[:5].mean()
sigma = np.sqrt(retu.var()*252)
retu.hist(bins=50,density=True,label='frequency')
plt.title(r_log.columns[i])
plt.xlabel('returns')
plt.ylabel('frequency')
x = np.linspace(plt.axis()[0],plt.axis()[1])
plt.plot(x,scs.norm.pdf(x,loc=r/M,scale=sigma/np.sqrt(M)),'r',lw=2.5,label='pdf')
plt.legend()
import matplotlib
#避免负号变成方框
matplotlib.rcParams['axes.unicode_minus']=False
fig,ax = plt.subplots(1,3,figsize=(20,5))
for i in range(3):
sm.qqplot(r_log.iloc[:,i].dropna(),line='s',ax=ax[i])
ax[i].set_title(r_log.columns[i])
ax[i].set_xlabel('theoretical quantiles')
ax[i].set_ylabel('sample quantiles')