如何用 Python 构建神经网络择时模型

2016-09-27 20:07:40 +08:00
 datayes2015
突发奇想想写一个神经网络的策略,于是随便找了一支股票用 python 实现了一下,股票和特征都有限,仅作为参考,有空还会尝试下全部股票池的策略和加入更多的因子作为特征,特别地,由于我经常犯未来函数的错误,希望大家帮我检查下。所谓神经网络就是多个特征交叉影响结果的数据统计模型,因为 python 有直接的包,具体细节就不说了。本文用的是 pybrain 的包,虽然用的算法比较慢,但是比较灵活简单。

import matplotlib.pyplot as plt
from matplotlib import rc
rc('mathtext', default='regular')
import seaborn as sns
sns.set_style('white')
因为铜币不够导致篇幅有限,余下的请看: https://uqer.io/community/share/57a883b3228e5b9b98a88f24

本文选的是 000001.XSHE 平安银行这只股票(就只是单纯随便选而已),选取了波动率指标: EMV ,短期和长期均线指标: EMA5 和 EMA60 , MA5 和 MA60 ,动量和反转指标: REVS5 和 REVS20 ,成交量指标: VEMA5 ,财务指标: PE ,能量指标: Elder ,这 12 个指标作为输入值,下一日股票的涨跌幅作为输出值。

考虑到样本的容量需要保证,但是太久远的数据可能参考性不大,本文选取 2012-2015 这三年的输入和输出总共 627 组样本作为训练集。

因为铜币不够导致篇幅有限,余下的请看: https://uqer.io/community/share/57a883b3228e5b9b98a88f24

这里对数据进行了中心化处理,保证不同参数的可比性。


这里定义了 Sigmoid 函数其作用是将取值为 R 的输入映射到[-1,1]上,以满足神经网络模型的输入需要。

这一步是训练模型,本文设定的模型除了输入和输出层外,含有两个隐藏层,每个隐藏层含有 13 个单元,并且设定了迭代次数为 500 次,理论上迭代次数应该越多越好,但实际上后面的迭代带来的误差缩小已经微乎其微。

另外这里的 momentum 的大小是解跳出局部最优的步长,太大就很难收敛,太小就容易陷入局部最优。 weightdecay 指的是单次权重改变的步长,太大也会不容易收敛,太小就比较慢。

此模型训练结果每次都不一样,可以多训练几次找到误差相对较小的保存下来。

话不多说,上图咯



本文选取 2015-2016 年作为测试集,将模型用于测试集的效果,可以看出还是有一定的跟踪效果的。



这是买入卖出信号,红色表示买入,绿色表示卖出。


这是策略的回测结果,可见策略在股市平稳波动是效果较好,而出现突发性的上涨和下跌是效果较差。


4719 次点击
所在节点    Python
7 条回复
menc
2016-09-27 20:17:44 +08:00
总共 627 组样本
12 维输入
用的还是 DL 用的非常少的 sigmoid 激活函数
就放进 NN 里跑了?

“此模型训练结果每次都不一样,可以多训练几次找到误差相对较小的保存下来。 ”
这个真是笑死了,模型训练不稳定了还可以这么玩,找一个 loss 小的保存下来?


说句实在话,这么多软文也写了,没有任何干货。
一不教人入门量化,直接就上模型。
二对模型和机器学习本身根本不了解,只是在瞎用。
误人子弟这种事情,是最可怕的。

机器学习不是银弹,不是你喂给它输入,调调参数,就能出一个很厉害的东西。
lovdanny
2016-09-27 21:10:09 +08:00
@menc 说的在理
billgreen1
2016-09-27 21:52:21 +08:00
@menc 真的笑,笑出声。可能我笑点低吧
20150517
2016-09-27 23:13:10 +08:00
@menc 他不会回你的,他就定期 spam python 区,像机器人一样,我都举报几次了
menc
2016-09-28 02:02:41 +08:00
@20150517 这账号是花钱置顶了的,明显的广告文,我写这些只是为了让广大 v2er 不要被高大上的术语迷惑
LokiSharp
2016-09-28 11:08:10 +08:00
这种是付费广告文吧?
datayes2015
2016-09-28 14:12:12 +08:00
@menc 那亲想看怎么样的干货呢?我可以写一篇,量化入门?机器学习?还是?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/309368

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX