如果想不清楚如何解决如下问题,那么冒然搭建股票量化交易系统是非常危险的。本文根据多年开发心得,将搭建过程中遇到的重难点问题进行了梳理。
1、社会中的各种信息是否已经全部反映在了K线中?
有不少观点认为K线中已经蕴含了所有信息,估计有更多的人不认同这个观点。对于不认同的观点而言,一个简单的反例是我拿出一大笔钱在某一时刻随机买入某一只股票对其股价造成波动,那么从历史K线就无法预测出我的这个行为,然而这种行为是噪声而不是规律。在很多其它的机器学习问题中也会遇到这种噪声点。所以我认为上面这个反例并不合适。是否有更好的反例?
2、量化交易模型的贝叶斯误差有多大?
不像图像分类这种问题,可以很容易找到很多人类专家来估计出贝叶斯误差。想找到操盘专家的难度相对较大。那么对应的贝叶斯误差也不容易估计出来。然而人类不一定能完成的事情计算机往往可以完成,比如天气预报。
3、如何保证评估集和测试集具有相同的分布?
不同于图像分类、翻译、语音识别这类问题,量化交易对划分数据集的要求更高。首先它需要确保训练集不能透露出未来信息,举个例子,不能让模型在t时刻知道任何与[t+1,正无穷)相关的信息。其次,评估集和测试集的分布几乎一定是不一样的,因为测试集的分布每天都在变化。
如果按照下面的代码生成评估集和训练集,评估集和训练集的分布是一样,和测试集的分布不一样,所以评估集没有发挥出其应有的作用。此处的评估集更像是train-val,测试集更像是dev,而实盘更像是test。
if (initialMode.equals(Mode.train)) {
//最后一段序列不参与评估
if (count == 1) {