我已授权

注册

陈道民:自组织竞争网络与行情的分类和识别

2013-06-06 15:21:47 和讯股票  陈道民

  最近在看神经网络算法,所以做了一个简单的尝试——对证券价格的行情进行简单的分类和识别。

  自组织竞争网络是一种典型的无导师学习的神经网络,它可以通过不断的“观察”、“分析”和“比较”,从而发现样本的内在规律,从而对其进行分类和识别。它与有导师学习的神经网络最大的区别就是无需知道期望的输出,也就是说一场搏击比赛无需裁判来判定胜负,通过比赛者自身之间的相互竞争,最后活着站在擂台上的那一个就是胜利者,并且胜利者可以获得各种奖励甚至成为搏击界的权威(该神经元相关的各连接权值和阈值向着其有利竞争的方向发展),而失败者则啥也没有(其神经元对应的权值和阈值都保持不变)。

  在用它对行情进行识别之前,我们首先要对行情进行分类,例如说“涨/跌/平”,或者“趋势/震荡”等等。在这里我对上证指数进行分类——“上涨”、“下跌”和“区间震荡”三类,然后对样本外的的数据进行识别,看看其识别结果能否令我们满意。当然,这识别结果与你输入的训练数据有着密切关系。

图1 上证指数
图1 上证指数

  从中抽取一部分数据来定义“类”(数据经过了一定的处理):

图2 训练数据
图2 训练数据(点击看大图)

  把上图中显示的行情数据(上涨:SZI1D(1011:1110);下跌:SZI1D(831:930);区间震荡:SZI1D(1431:1530)),作为训练数据,去对net进行训练。

  MATLAB的代码如下:

  clc

  clear

  close all

  load SZI1D

  P = [pstd1 pstd2 pstd3]; %训练样本

  T = tstd; %测试样本

  String = cellstr({'上涨';'下跌';'区间震荡'});

  Q = minmax(P); %训练数据的最小、最大值,P为训练数据

  net = newc(Q,3,0.1); %建立网络,因为我定义了3种行情,所以输出层有3个神经元,学习速率为0.1

  net = init(net); %对网络进行初始化

  net = train(net,P); %训练网络

  a = vec2ind(sim(net,P));%训练样本的分类结果

  y = vec2ind(sim(net,T));%测试样本的识别结果

  figure

  plot(T)

  R = ['识别结果 : ' char(String((y ==a)))];

  title(R,'fontsize',12)

  下面,是一些识别的结果。

图3 第601-700日行情识别
图3 第601-700日行情识别

图4 第700-800日行情识别
图4 第700-800日行情识别

图5  第1116-1215日行情识别
图5 第1116-1215日行情识别

  当然,这只是一个简单的例子,有很多细节还需要处理,离实际的应用还有很长的路要走:

  (1)训练数据必须具有一定的代表性和广泛性,否则效果将会非常差;

  (2)这是对历史行情进行识别的,也就是说,我们只能站在t时间对t-lookback+1:t的行情进行识别,因此具有一定的滞后性(或许在实际应用当中我们还要结合行情变换的周期来使用);

  (3)暂时只想到以上两点。

  或许有人会问我,这些直接用肉眼判断不就行了吗,何必搞得那么麻烦呢。我只想说,我觉得这样做很有意思,很感兴趣,例如说,结合波浪理论,让电脑帮我自动“数浪”,那难道不是件很有意思的事情吗?当然,这些东西能否为我在交易中带来超额收益,都已不重要了(如果能的话,那就再好不过了)。

  在上面的基础上,我们将训练好的网络分别对上证指数、恒生指数和道琼斯指数进行移动识别。

图6 上证指数移动识别
图6 上证指数移动识别(点击看大图)

图7 恒生指数移动识别
图7 恒生指数移动识别(点击看大图)

图8 道琼斯指数移动识别
图8 道琼斯指数移动识别(点击看大图)

  效果“麻麻地”,可能是由于回顾的周期比较长,因为我的lookback设了100,所以上面的识别结构都是t-100+1:t的识别结果,滞后性很强。(陈道民 佛科院)

  

(责任编辑:金明正 HF023)
看全文
写评论已有条评论跟帖用户自律公约
提 交还可输入500

最新评论

查看剩下100条评论

热门新闻排行榜

和讯热销金融证券产品

【免责声明】本文仅代表作者本人观点,与和讯网无关。和讯网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。