Python 股指期货高频数据机器学习预测

代码详见:股指期货高频数据机器学习预测
主要学习本文对特征的提取和数据预处理操作
文章目录数据预处理模型探索 模型之外
问题描述
通过对交易委托账本(订单簿)中数据的学习 , 给定特定一只股票10个时间点股票的订单簿信息 , 预测下20个时间点中间价的均值 。
评价标准为均方根误差 。
交易时间为工作日9:30-11:30,13:00-15:00 , 快照频率3秒 。
股价的形成分为集合竞价和连续竞价
竞价原则:价格优先 , 时间优先 。
交易委托账本具体信息:
问题分析
在这个问题中 , 我们利用10个时间点股票的订单簿信息 , 预测特定一只股票下20个时间点中间价的均值 , 来判断其在一分钟内的价格变化特征 , 以便于高频交易 。高频交易的意义在于 , 对于人类来说 , 很难在一分钟之内判断出股价变化情况 , 并完成交易 。因此 , 只能利用计算机进行自动化交易 。
对于无信息无模型预测 , 即利用订单簿中最后一个价格“预测” , 得到的均方根误差为0.00155 。试图通过分析数据、建立模型 , 做出高于此误差的预测 。
数据分析 数据集
训练集(rawdata , .csv):条订单簿信息
测试集(test data, .csv):1000条(100组)订单簿信息
为了避免概念的混淆 , 下文中如果特别说明 , “测试集”均指 board所依赖的数据 。此外 , 这里的“训练集”下文中包含经过数据清理和预处理的训练集( data)和验证集(test data) 。
数据清洗
为了将训练集转换为测试集的格式 , 即通过10个间隔3秒的订单簿记录 , 来预测后20个间隔3秒的订单簿记录中中间价的均值 , 必须对数据清洗 。
将训练集集中连续的+(平方)条数据作为一组数据 。
检查每一组数据 , 去掉含有时间差不为3秒的连续两条数据的组 。这样可以跳过跨天的以及不规整的数据 。
数据预处理 归一化
给定的数据特征(日期、时间、价格、成交量等)的量纲不同 , 并且数据绝对值差的较大 。如测试集第一条数据:
和差6个数量级 。
首先 , 数据归一化后 , 最优解的寻优过程明显会变得平缓 , 更容易正确地收敛到最优解 。
其次 , 在支持向量机(SVM)等不具有伸缩不变性的模型中 , 大数量级的数据会掩盖小数量级的数据 。这是因为随机进行初始化后 , 各个数据拥有同样的或近似的缩放比例 , 相加之后小数量级的数据便被大数量级的数据“吃掉了” 。
此外 , 对于具有伸缩不变性的模型 , 如逻辑回归 , 进行归一化也有助于模型更快地收敛 。
综上所述 , 对模型进行归一化是十分有必要的 。
训练集分布:
测试集分布:
从上面两张图片中可以看出 , 训练集和测试集中最重要的特征以及待遇测量——中间价只有约三分之一重合 。这意味着如果按照数值直接进行归一化 , 可能会有较差的结果 。
我采取的第一种方式是预测差值:即每组数据待预测量为下20条数组中的均值与最后一个的差值 , 并将各个价格减去最后一个的值 , 这样可以使训练集和验证集分布更为接近 , 但是这样造成的问题是 , 在量纲存在的情况下 , 最后一个的值仍是有价值的 , 将它直接消去不合适 。