如何用 Python 构建神经网络择时模型 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
datayes2015
V2EX    Python

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

  •  
  •   datayes2015 2016-09-27 20:07:40 +08:00 5026 次点击
    这是一个创建于 3300 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突发奇想想写一个神经网络的策略,于是随便找了一支股票用 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 年作为测试集,将模型用于测试集的效果,可以看出还是有一定的跟踪效果的。



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


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


    7 条回复    2016-09-28 14:12:12 +08:00
    menc
        1
    menc  
       2016-09-27 20:17:44 +08:00   3
    总共 627 组样本
    12 维输入
    用的还是 DL 用的非常少的 sigmoid 激活函数
    就放进 NN 里跑了?

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


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

    机器学习不是银弹,不是你喂给它输入,调调参数,就能出一个很厉害的东西。
    lovdanny
        2
    lovdanny  
       2016-09-27 21:10:09 +08:00
    @menc 说的在理
    billgreen1
        3
    billgreen1  
       2016-09-27 21:52:21 +08:00
    @menc 真的笑,笑出声。可能我笑点低吧
    20150517
        4
    20150517  
       2016-09-27 23:13:10 +08:00
    @menc 他不会回你的,他就定期 spam python 区,像机器人一样,我都举报几次了
    menc
        5
    menc  
       2016-09-28 02:02:41 +08:00 via iPhone   2
    @20150517 这账号是花钱置顶了的,明显的广告文,我写这些只是为了让广大 v2er 不要被高大上的术语迷惑
    LokiSharp
        6
    LokiSharp  
       2016-09-28 11:08:10 +08:00
    这种是付费广告文吧?
    datayes2015
        7
    datayes2015  
    OP
       2016-09-28 14:12:12 +08:00
    @menc 那亲想看怎么样的干货呢?我可以写一篇,量化入门?机器学习?还是?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5585 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:11 PVG 15:11 LAX 00:11 JFK 03:11
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86