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

转载 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;
然后在程序中就可以使用了。

相关文章推荐

R学习日记——时间序列分析之ARIMA模型预测

今天学习ARIMA预测时间序列。  指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有要求。但是,如果你想使用指数平滑法计算出预测区间, 那么预测误差必须是...

时间序列预测模型方法

简介 时间序列预测法是一种历史资料延伸预测,也称历史引伸预测法。是以时间数列所能反映的社会经济现象的发展过程和规律性,进行引伸外推,预测其发展趋势的方法。 时间序列,也叫时间数列、历史复数或动态数...

R语言 时间序列分析之ARIMA模型预测

原文地址:R语言学习日记——时间序列分析之ARIMA模型预测作者:Kevin ARIMA预测时间序列: 指数平滑法对于预测来说是非常有帮助的,而且它对时间序列上面连续的值之间相关性没有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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