- 第11章 统计学
- 11.1 正态性检验
- 11.1.1 基准案例
- 11.1.2 现实世界的数据
- 11.1 正态性检验
第11章 统计学
11.1 正态性检验
可以说 , 正态分布是金融学中最重要的分布 , 也是金融理论的主要统计学基础之一。尤其是下面这些金融理论基础 , 在很大程度上依赖于股票市场收益的正态分布。
投资组合理论
当股票收益呈正态分布时,最优化投资组合可以在这样的环境中选择:
只有平均收益和收益的方差(或者波动率)以及不同股票之间的协方差与投资决策(即最优化投资组合构成)相关。
资本性资产定价模型
同样. 当股票收益呈正态分布时 , 单独证券的价格可以很好地以和某种大规模市场指数的关系表示:这种关系通常用单一股票与市场指数的联动指标( β β
)表示。
有效市场假设
有效市场指的是价格反映所有可用信息的市场 , 其中的 “所有”可以是挟义的 ,也可以是广义的(例如 “所有公开信息”或者同时包括 “只为个人所有 ”
的信息);如果这个假设成立 , 股票价格波动将是随机的,而收益呈正态分布。
期权定价理论
布朗运动是随机股票(和其他证券)价格变动的标准、 基准模型:著名的 Black-Scholes-Merton
期权定价公式使用几何布朗运动作为股票在一段时间内随机波动的模型,这种波动造成收益呈正态分布。
上述的理论只是支持金融学中正态性假设重要性的一部分原因。
11.1.1 基准案例
几何布朗运动中的路径特性:
正态对数收益率
在两点之间的对数收益率 l o g S t S s = l o g S t − l o g S s ( 0 <
s < t ) l o g S t S s = l o g S t − l o g S s ( 0 < s < t )
对数-正太价值
在任何时点 t>0 , 价值 S_t 呈正态分布
import numpy as np
import scipy.stats as scs
import statsmodels.api as sm
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(1000)
# 为几何布朗运动生成蒙特卡洛路径
def gen_paths(S0, r, sigma, T, M, I):
"""
Generates Monte Carlo paths for geometric Brownian motion.
:param S0: initial stock/index value
:param r: constant short rate
:param sigma: constant volatility
:param T: final time horizon
:param M: number of time steps/intervals
:param I: number of paths to be simulated
:return:ndarray,shape(M+1,I)
simulated paths given the parameters
"""
dt = float(T) / M
paths = np.zeros((M + 1, I), np.float64)
paths[0] = S0
for t in range(1, M + 1):
rand = np.random.standard_normal(I)
rand = (rand - rand.meand()) / rand.std()
paths[t] = paths[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt + sigma * np.sqrt(dt) * rand)
return paths
[/code]
下面是蒙特卡洛模拟的一种可能的参数化, 和 gen_paths 函数相结合, 生成25万条路径,每条有 50 个时间步:
```code
S0 = 100.
r = 0.05
sigma = 0.2
T = 1.0
M = 50
I = 250000
paths = gen_paths(S0, r, sigma, T, M, I)
# 展示前10条模拟路径:
plt.plot(paths[:, :10])
plt.grid(True)
plt.xlabel('time steps')
plt.ylabel('index level')
[/code]
几何布朗运动的10条模拟路程
![几何布朗运动的10条模拟路程](https://img-
blog.csdn.net/20180708074435798?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjAxODI1OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
我们主要感兴趣的是对数收益率的分布。
```code
# 成一个包含所有对数收益率的ndaray对象
log_returns = np.log(paths[1:] / paths[0:-1])
# 考虑50个时间步上的第一条模拟路径
paths[:, 0].round(4)
# array([ 100. , 100.7527, 108.5193, 108.258 , 102.0603, 102.2424,
# 104.9457, 108.018 , 109.4967, 111.2178, 110.6562, 108.7809,
# 103.3086, 104.2923, 104.8908, 112.0843, 112.0133, 115.4933,
# 115.5401, 115.0547, 117.1103, 112.3911, 115.136 , 115.2618,
# 118.937 , 117.607 , 116.4971, 118.4645, 119.9851, 120.5452,
# 113.0165, 112.4183, 107.3345, 110.4752, 108.1386, 107.5009,
# 106.6545, 110.8543, 107.9486, 111.291 , 1