d 的值始终介于 0 和 4 之间。如果 d=2,则没有自相关。如果 d 远小于 2,则存在正自相关;但是,如果它低于 1,则错误中的相似性比合理的要多。d 大于 2 越远,误差项中出现的负自相关越多。正自相关或序列相关意味着正误差因素很有可能跟随另一个正误差因素。
04 t统计量
t检验(也称为学生 t 检验)是W. S. Gossett为了观测酿酒质量提出来的,用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著,适用于样本容量较小(n<30),而总体标准差未知的正态分布。当分布中使用较少的价格或交易时,我们可以预期曲线的形状会更加多变。例如,它可能被分散开,这样分布的峰值会更低,而尾部会更高。t 检验根据其自由度 (df) 计算,即 n – 1,其中 n 是样本大小,即分布中使用的价格数量。

样本中的数据越多,结果就越可靠。随着样本量 n 的增加,t 的值接近尾部区域的标准正态值。
在测试交易系统时,自由度可以是策略产生的交易数量。当交易很少时,结果可能无法代表您使用更长的交易历史将获得的结果。在测试策略时,会发现交易数量与策略中使用的参数或变量数量之间存在类似的关系。使用的变量越多,需要进行的交易就越多,才能以可接受的置信水平创造预期。
t检验分为单样本检验、相关配对检验和独立双样本检验。
- 单样本t检验主要检验单个样本的平均值是否等于目标值,如某只个股在某段时间周期内的平均收益率是否等于市场平均收益率(如上证综指)。
- 相关配对t检验是检验相关或配对观测之差的平均值是否等于目标值,如为了检测业绩增长公告是否能带来超额收益,对发布业绩增长公告的公司公告前N日(如N=3)和公告后N日的收益率进行比较,检验是否存在显著差异。
- 独立双样本检验是检验两个独立样本的平均值之差是否等于目标值,如检验某个交易策略在不同的交易期间内是否表现一致。
- 其中,和分别是价格在期间1和期间2的平均值,和分别是价格在期间1和期间2的标准差,和分别是期间1和期间2的样本数量(观察值)。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import tushare as ts
sns.set_style("darkgrid")
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
### 计算标准正态分布0-1之间的概率
def normal_pdf(x, mu=0, sigma=1):
sqrt_two_pi = np.sqrt(2 * np.pi)
pdf=(np.exp(-(x-mu) ** 2 / 2 / sigma ** 2) / (sqrt_two_pi * sigma)) return pdf
mu = 0 # 均值为0
sigma = 1 # 标准差为1
#用统计模拟绘制正态分布的直方图
plt.figure(figsize=(12,6))
sample = np.random.normal(mu, sigma, size=10000)
plt.hist(sample, bins=100, alpha=0.7, density=True)
print(pd.Series(sample).describe())
#根据正态分布的公式绘制PDF曲线
x = np.linspace(-4, 4, 300)
y = normal_pdf(x, mu, sigma)
plt.plot(x,y, color='orange', lw=3,label='$\mu=0,\sigma=1$')
plt.legend()
plt.show()
count 10000.000000
mean -0.019925
std 0.995619
min -3.453845
25% -0.697581
50% -0.009903
75% 0.660925
max 4.106088
dtype: float64

下面以全球指数交易数据为分析样本,使用Python进行描述性统计分析。使用efinance包获取全球指数数据,efinance相当于对东方财富网数据的爬虫。
#使用pip install efinance安装efinance包用于获取交易数据
import efinance as ef
from tqdm import tqdm
global_indexs=['道琼斯','标普500','NDX','上证指数','深证成指','沪深300',
'创业板指','上证50','中证500','恒生指数','英国富时','法国CAC40','德国DAX',
'日经225','韩国KOSPI','澳大利亚标普200','印度孟买SENSEX','俄罗斯RTS','加拿大S&P',
'台湾加权','美元指数','路透CRB商品指数']
#NDX为纳斯达克指数
index_data=pd.DataFrame()
for index in tqdm(global_indexs):
index_data[index]=ef.stock.get_quote_history(index).set_index('日期')['收盘']
index_data.rename(columns={'NDX':'纳斯达克'},inplace=True)
100%|██████████████████████████████████████████████████████████████████████████████████| 22/22 [00:10<00:00, 2.11it/s]
sns.pairplot(index_data[['上证指数','深证成指','沪深300','创业板指','上证50','中证500']]);

从配对相关和个体分布图来看,国内各大指数存在较强的相关性,分布呈现“左偏(负偏),长右尾”的特征,即大部分时间处于较低点位数(收益低),短时间处于高点位数(异常高收益),这也反映了波动程度可能很大。
sns.pairplot(index_data[['上证指数','标普500','法国CAC40','德国DAX','日经225']]);

