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 · 4721 次点击
    这是一个创建于 2984 天前的主题,其中的信息可能已经有所发展或是发生改变。
    突发奇想想写一个神经网络的策略,于是随便找了一支股票用 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   ·   实用小工具   ·   3457 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.