企业微信

统计学在股票量化中的核心地位

股票量化交易依赖数据驱动决策,统计学提供从海量价格、成交量、财务指标中提取有效信号的方法。期货市场同样如此,高频数据、多品种价差、期限结构均需统计工具处理。没有统计学,量化模型只能停留在直觉层面,无法验证策略是否具有可持续的盈利概率。

描述性统计与市场特征提取

计算股票日收益率均值、标准差、偏度、峰度,可以判断收益分布是否偏离正态。期货主力合约的滚动收益率序列常呈现尖峰厚尾,直接使用正态假设会低估极端风险。通过滚动窗口计算波动率,能够识别市场状态切换。


import pandas as pd

import numpy as np

# 假设df包含股票或期货的收盘价序列

df['return'] = df['close'].pct_change()

rolling_mean = df['return'].rolling(20).mean()

rolling_std = df['return'].rolling(20).std()

sharpe = rolling_mean / rolling_std * np.sqrt(252)

假设检验与因子有效性

量化选股因子是否有效,需要统计检验。t检验判断因子收益率均值是否显著异于零,Mann-Whitney U检验比较不同组别收益分布差异。期货跨期套利中,协整检验确认价差是否长期均衡。缺少假设检验,容易将随机波动误认为稳定规律。


from scipy import stats

group_a = df[df['factor'] > df['factor'].median()]['return']

group_b = df[df['factor'] <= df['factor'].median()]['return']

t_stat, p_value = stats.ttest_ind(group_a, group_b)

if p_value < 0.05:

    print('因子分组收益差异显著')

时间序列分析构建预测模型

股票价格和期货价格都是时间序列,自相关、偏自相关、单位根检验是建模前提。ARIMA模型捕捉线性依赖,GARCH模型刻画波动率聚集。协整关系用于配对交易,误差修正模型描述短期偏离与长期均衡的调整速度。

股票量化交易中统计学如何提升策略胜率

平稳性检验与差分

ADF检验判断序列是否平稳。非平稳序列直接回归会产生伪回归。期货连续合约价格通常一阶差分后平稳,股票对数价格也常需差分。


from statsmodels.tsa.stattools import adfuller

result = adfuller(df['close'])

print('ADF统计量:', result[0], 'p值:', result[1])

# 若p值大于0.05,进行一阶差分

df['diff'] = df['close'].diff().dropna()

result_diff = adfuller(df['diff'].dropna())

自回归与移动平均

ARIMA(p,d,q)中p由PACF截尾确定,q由ACF截尾确定。股票日内高频数据可用ARMA建模,期货夜盘与日盘衔接处需考虑交易时段效应。


from statsmodels.tsa.arima.model import ARIMA

model = ARIMA(df['diff'].dropna(), order=(2,0,2))

result = model.fit()

print(result.summary())

forecast = result.forecast(steps=5)

概率模型与风险控制

量化交易的核心是管理不确定性。凯利公式根据胜率和赔率确定下注比例,但需用历史数据估计胜率与赔率分布。VaR和CVaR度量期货组合的尾部风险。蒙特卡洛模拟生成大量价格路径,评估策略最大回撤概率。

凯利公式与仓位管理


win_rate = 0.55

win_loss_ratio = 1.5

kelly_fraction = win_rate - (1 - win_rate) / win_loss_ratio

position_size = max(0, kelly_fraction) * capital

实际交易中需用半凯利或分数凯利降低波动。期货杠杆放大盈亏,统计估计误差可能导致过度下注。

蒙特卡洛回撤模拟


import numpy as np

returns = df['return'].dropna().values

n_simulations = 10000

n_days = 252

max_drawdowns = []

for _ in range(n_simulations):

    sample = np.random.choice(returns, size=n_days, replace=True)

    cum = (1 + sample).cumprod()

    peak = np.maximum.accumulate(cum)

    drawdown = (cum - peak) / peak

    max_drawdowns.append(drawdown.min())

print('95%置信度最大回撤:', np.percentile(max_drawdowns, 5))

统计套利与期货配对交易

期货配对交易利用两个相关合约价差的均值回归特性。计算价差Z-score,当Z-score超过阈值开仓,回归均值平仓。统计量包括价差均值、标准差、半衰期。股票市场中性策略同样依赖统计套利,做多低估组合、做空高估组合。

协整检验与价差构建


from statsmodels.tsa.stattools import coint

score, p_value, _ = coint(price_a, price_b)

if p_value < 0.05:

    spread = price_a - beta * price_b

    z_score = (spread - spread.mean()) / spread.std()

    # z_score > 2 做空价差,z_score < -2 做多价差

半衰期计算


import statsmodels.api as sm

spread_lag = spread.shift(1).dropna()

spread_ret = spread.diff().dropna()

model = sm.OLS(spread_ret, spread_lag).fit()

half_life = -np.log(2) / model.params[0]

半衰期决定持仓周期,过短则交易成本吞噬利润,过长则暴露方向性风险。

过拟合防范与统计稳健性

量化策略在历史数据上表现优异,可能只是统计假象。多重比较校正、样本外测试、交叉验证是必要步骤。股票因子挖掘中,尝试数千个因子后,部分因子仅因偶然显著。Bonferroni校正或FDR控制降低假阳性。期货高频策略需考虑交易成本、滑点、市场冲击。

样本外滚动回测


from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)

for train_index, test_index in tscv.split(X):

    X_train, X_test = X[train_index], X[test_index]

    y_train, y_test = y[train_index], y[test_index]

    model.fit(X_train, y_train)

    score = model.score(X_test, y_test)

统计显著性不等于经济显著性。夏普比率、信息比率、换手率综合评估。期货策略还需关注保证金占用、隔夜跳空风险。

贝叶斯统计与动态更新

贝叶斯方法将参数视为随机变量,先验分布结合新数据得到后验分布。股票收益预测中,贝叶斯收缩估计降低极端值影响。期货波动率建模中,贝叶斯GARCH动态更新参数。粒子滤波和马尔可夫链蒙特卡洛实现复杂后验推断。

贝叶斯线性回归


import pymc as pm

with pm.Model() as model:

    alpha = pm.Normal('alpha', mu=0, sigma=10)

    beta = pm.Normal('beta', mu=0, sigma=10)

    sigma = pm.HalfNormal('sigma', sigma=1)

    mu = alpha + beta * X

    y_obs = pm.Normal('y_obs', mu=mu, sigma=sigma, observed=y)

    trace = pm.sample(1000, tune=1000)

贝叶斯方法自然处理参数不确定性,适合小样本或结构突变场景。股票财报数据更新频率低,贝叶斯先验可融入行业知识。

统计学习与机器学习融合

统计学习提供正则化、偏差方差权衡、模型选择理论。Lasso回归筛选股票因子,岭回归处理多重共线性。随机森林和梯度提升树捕捉非线性关系,但需统计检验避免过拟合。期货订单流数据用逻辑回归预测短期方向,统计显著性指导特征工程。

Lasso因子筛选


from sklearn.linear_model import LassoCV

lasso = LassoCV(cv=5, random_state=0).fit(X_train, y_train)

selected = np.where(lasso.coef_ != 0)[0]

统计学习强调可解释性,深度学习黑箱模型在量化中需谨慎。股票量化追求稳定夏普比率,期货量化追求低回撤。统计学贯穿数据清洗、信号生成、风险控制、绩效评估全流程。没有扎实统计基础,量化策略如同沙上建塔。