经过一个多月的努力,终于完成了一个简单的人工智能来判断第二日股票的涨跌,用的是一个简单的全连接神经网络。Tensorflow的架构,简单说一下实现算法的业务逻辑。
一、数据处理。
取出某个股票的400个交易日内的历史记录。对400个交易日内进行各个指标的运算,将运算结果记录数据库中。获取了6个常见的指标,比如说KDJ,MACD等。
把400个指标记录分别拆分成训练集和测试集,如下:
随机拆分的比例大约:9:1
二、训练网络
将这些数据放入到神经网络中进行训练,训练的正确率达到90%就可以。
然后用测试集进行验证。
由于每个股票都会有单独的特点,因此各个股票都会有一个独立的拟合模型。
网络结构代码如下:
1. 定义输入层函数:
2. 定义神经网络结构
3. 编译网络
4. 对网络进行训练
这个训练指标感觉一般,产生了一定的过拟合,所以说各个股票的训练模型在使用的过程中还需要调整。
5. 使用测试集对结果验证
在这里测试集的正确率是95.34%, 还是比较高的。
三、结果处理
由于是股票投资,对结果的处理,采用了一个分类处理的方式,将神经网络的处理结果分成3类:-10%至-3%, -3%至3%, 3%至10%。
简单来说就是,大跌情况,横盘震荡情况,大涨情况。三种情况对应三个人工智能判断的结果,来指导第二天股票的买卖。如图:
初步的想法是,实盘过程中震荡结果必然是最多的,但对多只股票进行运算,比如10-20只,当某个股票出现大涨的指标后,第二天及时买入,第三天立即卖出。
四、业务部署
训练出的模型需要与各个股票对应,股票也许多只,因此在模型的部署上要求会比较高,否则会带来潜在的大量工作。首先是初次任务,当股票被纳入到股票池中后,获取其400日之内的全部历史数据计算入库和处理,同时到处用于神经网络的训练集和测试集。盘后的定时任务,通过定时任务将当日的股票数据进行加载和运算。
时间仓促的缘故,神经网络的训练过程没有与业务系统结合,需要手动训练。但使用工作流的部署方式,让效率有所提高。将模型推送到git会自动的将线上的模型库更新。
五、后期处理
刚刚写完的一种对股票涨停的判断,由于在量化交易过程中,会存在测不准原理。这个指标方式还是需要时间的检验,后期会将每周新产生的数据纳入到机器学习的范畴中。达到自动学习自动提高正确率。