展会信息港展会大全

用2NDN快速构建基于时间序列的股票预测模型及示例详解
来源:互联网   发布日期:2011-12-16 19:11:07   浏览:63075次  

导读:0.概述 2NDN神经网络建模仿真工具是一个可视化的神经网络建模应用开发平台,她基于可连接组件的模块化结构实现,可扩展性极强,可用于各种行业的运营管理和系统分析,尤其是生产效率改善的有效工具。在企业、学校和政府机构得到广泛应用,尤其适合高校建立系...

0.概述

2NDN神经网络建模仿真工具是一个可视化的神经网络建模应用开发平台,她基于可连接组件的模块化结构实现,可扩展性极强,可用于各种行业的运营管理和系统分析 ,尤其是生产效率改善的有效工具。在企业、学校和政府机构得到广泛应用,尤其适合高校建立系统仿真实验室。

> 以下通过一个案例--快速构建基于时间序列的股票预测模型为例,详细介绍2NDN的操作步骤。

1.案例说明

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

换句话说,我们需要预测的是市场的拐点。请看下图:

用2NDN快速构建基于时间序列的股票预测模型及示例详解

这是一只股票的日K曲线,我们要成功进行股市操作就要根据红色箭头来交易,在最低点买进,在最高点卖出。一个好的交易系统应当只是真正的拐点出现时给出提示,避免生成虚假信号,例如,象篮色箭头所指部分,市场只下降了几个百分点就马上又继续上升。

可见,我们所要设计的神经网络不需要预测市场的日准确收盘价,我们只对正确预测拐点感兴趣。

2.神经网络建模

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

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

① Yahoo输入 (Input Data)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

其中“符号”是指特定股票的代号。如600728.SS是指新太科技股份有限600728的股票。这个代号必须是由Yahoo定义的代号。“时期”指从Yahoo获取股票市值的周期,‘Daily’获取每天收市记录的股票市值,‘Monthly’获取每月月初记录的股票市值,‘Yearly’获取每年年初记录的股票市值。

“选择列”可选:

第一列:Open

第二列:High

第三列:Low

第四列:Close

第五列:Volume

第六列:Adjusted close

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

其它设置参考2ndn帮助文档说明。

② 规范化 (DeltaNorm1)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

③ Delay (Delay Input Layer)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

这个组件的属性面板中,除"行数"之外,还可以设置"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)。

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

④ Sigmoid (Hidden Layer)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

⑤ Sigmoid (Output Layer)

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

⑥ 图表 (NetOutput)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

⑦ 训练 (Teacher)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

⑧ Yahoo输入 (Desired Data)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

⑨ 规范化 (DeltaNorm2)

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

⑩ 拐点抽取 (TurningPnts)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

算法如下:

当市场价格上升超过期望的变化率时,前面一个低点就被标注为'买'信号,相应的输出值设为0。

当市场价格下降超过期望的变化率时,前面一个高点就被标注为'卖'信号,相应的输出值设为+1。

上述两点之间的日期对应的期望值以插值到0与+1的方式进行规范化。

⑾图表 (RMSE Error)

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

说明: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。点击【运行】开始训练。控制面板上会显示训练的进度和收敛情况。如果权值参数选择不合理的话有可能造成网络不能收敛。这时可以选择【工具】->【初始化】,重新随机生成初始的权系数。

用2NDN快速构建基于时间序列的股票预测模型及示例详解

4、神经网络测试

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

下面是2007-7-1到2007-9-1的股票实际价格走势:

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

用2NDN快速构建基于时间序列的股票预测模型及示例详解

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

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;

然后在程序中就可以使用了。


赞助本站

相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港