1. 书籍和文中所提到的数据会在文末提供百度云下载,所有数据都不会有加密,可以放心下载使用
2. 文中计算的结果与书中不同是由于数据使用的时间段不同
目录
2. 二项分布在金融市场中的应用
3. 正态分布在金融市场的应用
4. 上证综指与深证综指的相关性关系分析
1. 概率密度函数和累积分布函数
概率密度函数和累积分布函数都是用来刻画随机变量之不确定性的,描述的是总体的特征。我们可以从变量的样本观测值来推估其总体特征,包括其概率分布情况。
原始数据中没有收益率数据,要先计算收益率数据
import pandas as pd import numpy as np df_hs300 = pd.read_csv('index_hs300.csv',encoding='utf-8') df_hs300.head()
df_hs300['tradeDate'] = pd.to_datetime(df_hs300['tradeDate']) df_hs300.sort_values(by='tradeDate',ascending=True,inplace=True) df_hs300['daily_returns'] = ((df_hs300['closeIndex']-df_hs300['closeIndex'].shift(1))/df_hs300['closeIndex'].shift(1))*100 df_hs300.head()
# 提取2014年的数据 df_2014 = df_hs300[(df_hs300['tradeDate']>='2014-01-01') & (df_hs300['tradeDate']<='2014-12-31')] df_2014.head()
import matplotlib.pyplot as plt from scipy import stats density=stats.kde.gaussian_kde(df_2014.iloc[:,-1]) bins = np.arange(-5,5,0.02) # 设定分割区间 plt.figure(figsize=(20,10)) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.subplot(211) plt.plot(bins,density(bins)) plt.title('沪深300收益率序列的概率密度曲线图') plt.subplot(212) plt.plot(bins,density(bins).cumsum()) plt.title('沪深300收益率序列的累积分布函数图')
使用stats模块中的gaussian_kde()可以估计沪深300收益率序列的概率密度。
对于累积分布函数,使用cumsum()计算出沪深300收益率序列的累积分布
2. 二项分布在金融市场中的应用# 估算2014年沪深300上涨的概率p p = len(df_2014[df_2014['daily_returns']>0])/len(df_2014) p # out: 0.5306122448979592 # 估计10个交易日中,有6个交易日中上涨的概率 prob = stats.binom.pmf(6,10,p) prob # out: 0.227514943156623433. 正态分布在金融市场的应用
# 获取沪深300收益率序列的均值和方差 hs300_2014mean = df_2014['daily_returns'].mean() hs300_2014mean # out: 0.17742427435875363 hs300_2014var = df_2014['daily_returns'].var() hs300_2014var # out: 1.4712202841870292 # 查询累积密度值为0.05的分位数 stats.norm.ppf(0.05,hs300_2014mean,hs300_2014var**0.5) # out: -1.8176823416932844. 上证综指与深证综指的相关性关系分析
原始数据是收盘价,需要先算日收益率
# 上证综指 000001 # 深证综指 399106 df_000001 = pd.read_csv('index_000001.csv',encoding='utf-8') df_399106 = pd.read_csv('index_399106.csv',encoding='utf-8') df_000001['tradeDate'] = pd.to_datetime(df_000001['tradeDate']) df_399106['tradeDate'] = pd.to_datetime(df_399106['tradeDate']) df_000001.sort_values(by='tradeDate',ascending=True,inplace=True) df_399106.sort_values(by='tradeDate',ascending=True,inplace=True) df_000001['daily_returns'] = (df_000001['closeIndex']-df_000001['closeIndex'].shift(1))/df_000001['closeIndex'].shift(1) df_399106['daily_returns'] = (df_399106['closeIndex']-df_399106['closeIndex'].shift(1))/df_399106['closeIndex'].shift(1) df_000001_2014 = df_000001[(df_000001['tradeDate']>='2014-01-01') & (df_000001['tradeDate']<='2014-12-31')] df_399106_2014 = df_399106[(df_399106['tradeDate']>='2014-01-01') & (df_399106['tradeDate']<='2014-12-31')] # 绘制上证综指与深证综指收益率的散点图 plt.scatter(df_000001_2014['daily_returns'],df_399106_2014['daily_returns']) plt.title('上证综指与深证综指收益率的散点图') plt.xlabel('上证综指收益率') plt.ylabel('深证综指收益率')
# 计算上证综指与深证综指收益率的相关系数 df_000001_2014.rename(columns={'daily_returns':'returns_000001'},inplace=True) df_399106_2014.rename(columns={'daily_returns':'returns_399106'},inplace=True) two_df = pd.merge(df_000001_2014,df_399106_2014,how='inner',on='tradeDate') two_df['returns_000001'].corr(two_df['returns_399106']) # out: 0.7081399117953504
相关系数的结果与书本上的不同,由于本人没有书中自带的数据,无法确认不同的原因,猜测是用的数据时间长度不同。
PS:
链接:https://pan.baidu.com/s/18UF1sWDvlYvkzdq-iXvung
提取码:jhac
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)