3、VWAP预测模型:线性回归预测VWAP、基于成交量分布的预测、机器学习模型引入、模型评估指标
做VWAP策略这么多年,我最大的体会是:预测比执行更难。你想想看,VWAP本身是个滞后指标——等它算出来,行情早变了。所以真正的难点在于,怎么在盘中提前把未来的VWAP给"猜"出来。
这一章,我们就来聊聊预测模型。我会从最简单的线性回归讲起,再到成交量分布预测,最后引入机器学习。嗯,每个方法我都踩过坑,咱们一个一个说。
3.1 线性回归预测VWAP
先说最简单的。线性回归预测VWAP,说白了就是拿历史数据去拟合一条直线,然后外推。
核心思路:假设VWAP在短期内是线性变化的。比如过去5分钟的VWAP值,跟时间呈线性关系。那我们用最小二乘法算出斜率和截距,就能预测下一分钟的VWAP。
我在项目中遇到过一个问题:直接用价格做回归,效果很差。为什么?因为价格有趋势,但VWAP的累积特性导致它变化很慢。后来我改用VWAP的差分值做回归,效果好了不少。
代码实现其实很简单:
import numpy as np
from sklearn.linear_model import LinearRegression
# 假设过去5分钟的VWAP数据
vwap_history = np.array([100.1, 100.2, 100.3, 100.4, 100.5])
time_steps = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
# 训练模型
model = LinearRegression()
model.fit(time_steps, vwap_history)
# 预测下一分钟
next_minute = np.array([[6]])
predicted_vwap = model.predict(next_minute)
print(f"预测VWAP: {predicted_vwap[0]:.2f}")
但说实话,这个方法局限性很大。它假设VWAP匀速变化,可实际行情哪有这么听话?遇到突发大单,预测值立马就偏了。
3.2 基于成交量分布的预测
这个方法比线性回归靠谱多了。它的核心思想是:VWAP的走势,本质上是由成交量分布决定的。
你想想看,VWAP = 总成交额 / 总成交量。如果我们能预测未来每个价格区间上的成交量分布,那VWAP自然就能算出来。
具体怎么做?我个人习惯用历史成交量分布曲线来拟合。比如,过去10天同一时间段的成交量分布,取个平均,作为今天的预期分布。
举个例子:
# 假设历史成交量分布(价格区间 -> 成交量比例)
hist_dist = {
(100.0, 100.2): 0.05,
(100.2, 100.4): 0.10,
(100.4, 100.6): 0.20,
(100.6, 100.8): 0.35,
(100.8, 101.0): 0.20,
(101.0, 101.2): 0.10
}
# 根据当前已实现成交量,动态调整预期分布
def adjust_distribution(hist_dist, realized_vol, current_price):
# 如果当前价格在某个区间成交量异常,调整该区间权重
# 具体算法略...
return adjusted_dist
这里有个坑,我曾经踩过:历史分布不能直接套用。比如今天出了个重大新闻,成交量分布会完全变形。所以一定要加入实时修正因子。
3.3 机器学习模型引入
好了,终于到重头戏了。机器学习模型,说白了就是让算法自己学出VWAP的变化规律。
我试过很多模型,最后常用的就三个:
- 随机森林:抗噪能力强,适合处理高维特征
- XGBoost:精度高,但容易过拟合
- LSTM:能捕捉时序依赖,但训练慢
特征工程才是真正的难点。我一般会用这些特征:
- 过去N分钟的VWAP值(N=5,10,20)
- 过去N分钟的成交量
- 当前价格与VWAP的偏离度
- 买卖盘口深度(Level2数据)
- 时间因子(距离开盘/收盘的分钟数)
代码示例(XGBoost):
import xgboost as xgb
from sklearn.model_selection import train_test_split
# 构造特征矩阵 X,标签 y(下一分钟VWAP)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = xgb.XGBRegressor(
n_estimators=200,
max_depth=5,
learning_rate=0.05,
subsample=0.8
)
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
嗯,这里要注意:不要用未来数据。我见过有人把未来N分钟的成交量也作为特征,结果回测曲线漂亮得不行,实盘一跑就崩。这是典型的未来函数问题。
3.4 模型评估指标
模型好不好,不能光看回测曲线。我一般用这几个指标:
| 指标 | 公式 | 说明 |
|---|---|---|
| MAE | mean(|y_true - y_pred|) | 平均绝对误差,直观 |
| RMSE | sqrt(mean((y_true - y_pred)^2)) | 对大误差惩罚更大 |
| MAPE | mean(|(y_true - y_pred)/y_true|) | 百分比误差,适合不同价格水平 |
| R² | 1 - SS_res/SS_tot | 拟合优度,越接近1越好 |
我个人最看重MAPE。为什么?因为VWAP的绝对值在不同股票上差异很大,茅台和工商银行的VWAP差了上百倍。用百分比误差才能公平比较。
另外,我建议加上一个方向准确率指标:预测的VWAP是涨了还是跌了,跟实际是否一致。这个指标对交易策略的决策特别重要。
知识体系总览
下面这张图,是我梳理的VWAP预测模型的知识结构。你可以把它当作一个导航图:
这张图把四个预测方法串起来了。从左到右,复杂度在增加,但精度也在提升。我个人建议:先跑通线性回归,再逐步升级到机器学习。别一上来就搞LSTM,容易把自己搞晕。
好了,这一章的内容就到这里。VWAP预测是个系统工程,没有银弹。关键是根据自己的数据条件和交易场景,选最合适的模型。
公众号:蓝海资料掘金营,微信deep3321