基于时间序列的股票趋势预测模型

转载 2007年09月12日 15:04:00

 基于时间序列的股票趋势预测模型

http://www.2nsoft.cn/2ndn/index.jsp?func=Examples/FinancePre/FinancePre.html

1、示例说明

        股票趋势预测代表经济预测中的一种特定类型,它具有其独有的特点。因为实际操作中我们不需要准确地知道下一天的收盘价,只需知道被观测市场的走向(升或降),从而用来决定我们的交易操作(长期/短期-买入/卖出)。我们所希望的是利用历史价格数据预测将来中短期(从2到10或15天)内的价格走势。因而我们的神经网络也不需要预测下一个交易日的准确收盘价,我们从预测的趋势上去发现我们的交易策略。
        换句话说,我们需要预测的是市场的拐点。请看下图:

        这是一只股票的日K曲线,我们要成功进行股市操作就要根据红色箭头来交易,在最低点买进,在最高点卖出。一个好的交易系统应当只是真正的拐点出现时给出提示,避免生成虚假信号,例如,象篮色箭头所指部分,市场只下降了几个百分点就马上又继续上升。
        可见,我们所要设计的神经网络不需要预测市场的日准确收盘价,我们只对正确预测拐点感兴趣。

2、神经网络建模

        打开2ndn神经网络设计工具,在主界面中通过拖拉方式添加下图所示的图元,这样神经网络模型就建好了,2ndn会自动的随机设置连接的权系数。 当然这个网络目前还没有进行训练,没有任何实际的功能。

        用户也可以直接打开随应用程序附带的示例程序,C:/Program Files/2NDN/Sample/FinancePre/FinancePre.ser(假如系统安装在C:/Program Files/2NDN),选择文件FinancePre.ser后,示例程序则在主界面中打开,如下图所示:

下面对设计器中的各图元说明如下:

① Yahoo输入 (Input Data)

        用于神经网络从yahoo接收金融市场得来的金融数据,设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:

        其中“符号”是指特定股票的代号。如600728.SS是指新太科技股份有限600728的股票。这个代号必须是由Yahoo定义的代号。“时期”指从Yahoo获取股票市值的周期,‘Daily’获取每天收市记录的股票市值,‘Monthly’获取每月月初记录的股票市值,‘Yearly’获取每年年初记录的股票市值。
“选择列”可选:
第一列:Open
第二列:High
第三列:Low
第四列:Close
第五列:Volume
第六列:Adjusted close

对于特定的股票代码,你必须根据所需的列来设置"选择列"。如果你希望将open,high及volume列作为输入,则需将‘1-2,5’写到“选择列”。
其它设置参考2ndn帮助文档说明。

② 规范化 (DeltaNorm1)

        在此对输入样本数据进行归一化处理,设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:

说明:若输入最大/最小值设置为0,表示自动取相应节点的最大/最小值。

        下图为经归一化处理后进行查验的结果:

③ Delay (Delay Input Layer)

        这里,我们使用YahooFinance输入组件从Yahoo获取股票价格的时间序列,将其与一个延时层相连。设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:

        这个组件的属性面板中,除"行数"之外,还可以设置"taps值"参数,它是指我们用来提供给神经网络的时间窗口的大小。
        如果设taps值为5,我们就得到一个尺寸为6的时间窗口,由下面的值组成:
[x(t), x(t-1), x(t-2), x(t-3), x(t-4), x(t-5)]
        请记住时间窗口的尺寸等于taps+1,因为延时层还同时输出时间序列的当前值x(t)。

        选中该图元,鼠标右键弹出快捷菜单,选"查验":

④ Sigmoid (Hidden Layer)

        网络隐层, 设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:

⑤ Sigmoid (Output Layer)

       网络输出层,设置方法参见④。

⑥ 图表 (NetOutput)

        这个组件用来在测试阶段显示出网络的预测结果曲线。设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:

说明:X轴最大值要大于网络所使用的金融数据有天数。

⑦ 训练 (Teacher)

        神经网络训练层,属性设置如下:

⑧ Yahoo输入 (Desired Data)

        用于神经网络从yahoo接收金融市场得来的金融数据,用于生成训练网络的拐点信息。设置方法同" ① Yahoo输入 (Input Data) ",如下:

        下图为经归一化处理后的结果:

⑨ 规范化 (DeltaNorm2)

        在此对训练目标样本数据进行归一化处理,设置方法同"② 规范化 (DeltaNorm1)"。

⑩ 拐点抽取 (TurningPnts)

        生成用来训练网络的拐点信息,属性设置如下:

        "最小改变率"属性用来指示两拐点之间的最小变化率,来生成相应的信号。它不能设置太小值,否则会生成太多的信号(其中很多都是错误信号)。
算法如下:

  • 当市场价格上升超过期望的变化率时,前面一个低点就被标注为'买'信号,相应的输出值设为0。
  • 当市场价格下降超过期望的变化率时,前面一个高点就被标注为'卖'信号,相应的输出值设为+1。
  • 上述两点之间的日期对应的期望值以插值到0与+1的方式进行规范化。

 

⑾图表 (RMSE Error)

        均方误差曲线,用来显示训练过程中的误差变化情况。设置方法:鼠标选中该图元,右键弹出快捷菜单,点击<属性>,弹出下面的对话框:

说明:X轴最大值要大于网络所使用的金融数据有天数。将"显示"设置为"True"时,将打开图表显示。

3、神经网络训练

        我们使用2007-6-1到2007-8-1的数据训练网络:将两个yahoo输入插件的时间段都设为2007-6-1至2007-8-1。打开控制面板,设置学习率为0.3,动量常数为0.3,训练样本数为41(该值可通过查验样本得到),训练步数为1000次,均方误差为0.001,是否训练设置为True,是否验证设置为False,是否指导设置为True,预测学习数设置为6(该值为taps+1),是否均方误差设置为True。点击【运行】开始训练。控制面板上会显示训练的进度和收敛情况。如果权值参数选择不合理的话有可能造成网络不能收敛。这时可以选择【工具】->【初始化】,重新随机生成初始的权系数。

4、神经网络测试

        网络训练完成后,就可以对生成的网络模型进行测试了,我们使用2007-7-1到2007-9-1的数据作为测试数据,对该时间段内的股票价格拐点进行预测,测试时,将两个yahoo输入插件的时间段都设为2007-7-1到2007-9-1。打开控制面板,设置测试样本数(这里为42),训练步数为1次,是否训练设置为False,是否验证设置为True。点击【运行】开始测试,预测结果将自动在图表插件中显示出来。
        下面是2007-7-1到2007-9-1的股票实际价格走势:

        下图是神经网络根据历史数据作出的拐点预测曲线:

        可以看出,该网络模型能够将绝大部分的股票走势的拐点正确预测出来,效果非常理想。

5、高级应用(把完成训练的神经网络移植到第三方应用中)

        为了在第三方应用程序中使用训练好的神经网络,可以把训练好的网络输出到文件中,然后在程序中读取这个文件,以实现对未知对象的预测。选择【文件】->【导出模型…】,把当前神经网络保存到文件中。然后就可以在程序中使用了。

下面是从文件中读取神经网络的代码:
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:/2ndn/sample/FinancePre/FinancePre.snet"));
    Object obj = ois.readObject();
    System.out.println("obj is " + obj);
    ois.close();
    NeuralNet net = (NeuralNet) obj;
然后在程序中就可以使用了。

--=== 利用微软网格控件进行编辑输入==--

利用微软网格控件进行编辑输入(作者:王莉梅 2001年01月18日 16:51)  Visual Basic中提供了许多标准控件和定制控件,每一个控件都可以提供一组特殊的用户界面和编程能力。充分利用每...
  • coolstar
  • coolstar
  • 2001-05-04 17:31:00
  • 1608

算法-基于成交量的Adaboost股价涨跌预测模型

基于上篇文章提到的思路,个人觉得你不能用A来预测A,所以我打算换一种数据。 上篇文章 《算法-基于MACD的Adaboost股价涨跌预测模型》 虽然给出了adaboost算法,但是并没有完全正确的表达...
  • mtaxot
  • mtaxot
  • 2016-07-26 10:52:20
  • 26850

基于python的AR模型股票预测

  • 2015年05月27日 10:47
  • 116KB
  • 下载

[译] 实时股票预测的开源参考结构

[译] 实时股票预测的开源参考结构 大数据文摘 2016-01-06 08:20 关于转载授授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体、媒体、机构转载务必申请授权,后台留言...
  • robertin
  • robertin
  • 2016-01-12 12:04:38
  • 2203

基于keras 的神经网络股价预测模型

这些年从网上的各位大牛那学到很多,本着开源开放的精神,今天我决定开源我量化交易代码。输入股票代码,和训练的数据时间,自动预测股票未来的走势。。。。。。。。。。。。。。。。。。 from matplot...
  • luoganttcc
  • luoganttcc
  • 2017-11-06 19:44:49
  • 3199

基于时间序列的股票趋势预测模型

 基于时间序列的股票趋势预测模型http://www.2nsoft.cn/2ndn/index.jsp?func=Examples/FinancePre/FinancePre.html1、示例说明  ...
  • NNeter
  • NNeter
  • 2007-09-12 15:04:00
  • 4785

小波分析 + 支持向量机(SVM)预测股票涨跌幅的实现

刚刚开始进入量化投资领域,最近在做金融数据方面的预测,用到了数据挖掘的...
  • k474905973
  • k474905973
  • 2014-06-12 20:26:37
  • 7028

股票预测 - ARIMA

时间序列分析 ARIMA 1. 指数平滑法 2. 时间序列的预处理 2.1. 平稳性 2.2. 纯随机性(白噪声检验) 3. 平稳时间序列建模 3.1. ARIMA模型 3.2. 时间序列建模...
  • qq_32417287
  • qq_32417287
  • 2018-04-15 19:46:35
  • 70

时间序列分析记录一

datasales
  • zhaoyuxia517
  • zhaoyuxia517
  • 2017-11-15 11:23:25
  • 217

分解时间序列(季节性数据)

一个季节性时间序列中会包含三部分,趋势部分、季节性部分和无规则部分。分解时间序列就是要把时间序列分解成这三部分,然后进行估计。 对于可以使用相加模型进行描述的时间序列中的趋势部分和季...
  • zhaoyuxia517
  • zhaoyuxia517
  • 2017-11-20 20:02:22
  • 687
收藏助手
不良信息举报
您举报文章:基于时间序列的股票趋势预测模型
举报原因:
原因补充:

(最多只允许输入30个字)