脚本形式的神经网络 - 页 4

 
rip:
YuraZ:

并不总是需要归一化,谁说网格可能而且必须只对0和1起作用?


我可以附上一个简单的网格和一个例子,(不幸的是现在手头没有材料)--我以后会做的。

其中,一个简单的NN解决了这个问题,而不需要通过归一化进行数据准备

不幸的是,这不是源头


我所举的例子,虽然!这就像它已经正常化了。

该条件有两个范围


1 0-100

2 10-30


你只需要找到一个范围内的位置的比率--已知的是

从本质上讲,这就是缩放。

几乎总是需要规范化。数据必须在激活函数的定义范围内。

在脚本中,sigmoid是[-1;+1]。如果你把它换成,比如说,一个指数......。或平方根。


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


这里有一个网络创建的例子... 输入为LOW,即没有规范化。

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


这里有一个网络创建的例子... 输入是LOW,即没有正常化。


使用非正常化的数据有时是非常有用的。它们不会失去信息性,而信息性在转换过程中可能会丢失。

而且也没有正式的机制来确定训练样本的信息量......。


顺便说一下,这篇文章没有显示任何地方使用了什么激活函数。显然,定义区域[-inf;+inf]或[0;+inf]的东西 ...

 

改变了一下程序!

略微改变了输出格式


现在,SCRIPT认为有责任以高精确度计算输出数据。

当然,该程序不是通用的,而是专门针对一些输入和输出的。

但隐藏层的大小!在学习过程中会被调整。



在下一个版本中,我将努力使它在输入和输出的数量上更加灵活。

如果成功,我将添加一个遗传算法

其目的将是杀死有大量错误的神经元

并以很少的错误重现神经元!

即从本质上说,在阵列中寻找那些错误最少的神经元,并从这些神经元中孕育,以取代

那些行为不端的神经元...


1 目前的学习率很低

2 变化 - 第一层的隐藏神经元数量是随机的,没有逻辑性

3 如果在输入和输出的样本数据上获得较高的准确性,则停止学习过程


附加的文件:
 

我如何使用这个?在图表上放一个脚本,成堆的数字开始重写...他们说这些数字说明了什么?

 
Blast:

我如何使用这个?在图表上放一个脚本,成堆的数字开始重写...这些数字说明了什么?

你需要它们做什么?我已经有了自己的GA算法,但我几乎没有理解代码--我需要时间来弄清楚把输入放在哪里,如何输出,何时购买-结算,以及我是否能做到这一点?或者你是为了圣杯 而来?

 
Loknar:
爆炸

我如何使用这个?在图表上放一个脚本,成堆的数字开始重写...这些数字说明了什么?

你需要它们做什么?我已经有了自己的GA算法,但我几乎没有理解代码--我需要时间来弄清楚把输入放在哪里,如何取出来,何时买入结算,如果有的话?或者说,你在这里追求的是圣杯?

爆炸 ,不要寻找专家顾问或指标--这是很遥远的事情。


这更像是对MQL4中的神经网络 原理的研究。

---

一般来说,用C++的DLL形式或其他快速语言来编写是合理的。


Loknar - 这只是在开始时对脚本的修改,试图在输出时获得更准确的数据。

--

顺便尝试添加一个层:-),更不用说输出输入...管道学习算法在一瞬间就死了......


---

想试试像

3项产出

输出不只是0或1或-1 0+1,而是一个范围

x 0 0 - 买入持有

0×0--平仓(退出买入或卖出)

0 0 x 卖出 - 持有 卖出

其中x不是0或1,而是在某个范围内有一些偏差,例如-1.000 0.000 +1.000

即可以取值为0.1122或-0.012。


对三个输出的组合进行了越界分析


每个时间段有9个入口 - 以M1 M5 M15 M30 H1 H4共54个入口为例

我们把平均数3 5 8 13 21 34 55 89 144 233之间的差额输入到每个流量上。

共计 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 每个时间段共9人

我们在网格视图中获得一种VERIABLE的平均数...:-) 在矩阵中

当我们有像模式2 3 4 5 6 7 8 9 10 11风扇完全打开向上判断的东西时,所有看起来像卖的

当我们有-2-3-4-5-6-7-8-9-10-11的图案时,图案是完全向下开放的--BAY。

这些数字是任意的,有时是一个模式-1 -3 -7 -10 -15 -20 -30 -40 -80,在更大的时间范围内的模式



---

的训练样本,如


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................ H4

 

为训练准备数据





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
爆炸

我如何使用这个?在图表上放一个脚本,成堆的数字开始重写...这些数字说明了什么?

你需要它们做什么?我已经有了自己的GA算法,但我几乎没有理解代码--我需要时间来弄清楚把输入放在哪里,如何取出来,何时买入结算,如果有的话?还是说你在这里追求圣杯了?

最初我喜欢神经网络的 想法。我所知道的是,拥有1000个点的网络会以某种方式收敛到一个点。并且,自动交易是以基于网络算法的EA赢得的。我有计划创建我自己的这种网络版本,但在这个阶段我对mql4和神经网络都不了解。

因此,首先我将把我的策略放到专家顾问中,学习mql4。然后我将考虑网络问题。

我已经下载了你的版本,只是为了感兴趣。这是我第一次遇到这样的事情。我不了解这种网络的运作。我不知道这种网络是如何工作的,所以我有这样的问题。

我将很高兴收到关于类似主题的任何参考资料,在您看来,这些资料是值得关注的!

 

本网络

YuraZ:

改变了一些软件!

稍微改变了一下

的显示格式。

现在,SCRIPT认为有责任高度准确地计算出输出数据。

该程序不是通用的,而是专门针对输入和输出的数量。

但隐藏层的大小!在学习过程中会被调整。



在下一个版本中,我将努力使它在输入和输出的数量上更加灵活。

如果成功,我将添加一个遗传算法

其目的将是杀死有大量错误的神经元

并以很少的错误重现神经元!

即在阵列中寻找那些错误最少的神经元,并从它们中选取一个来替换。

那些行为不端的神经元...


1 目前的学习率很低

2 变化 - 第一层的隐藏神经元数量是随机的,没有逻辑性

3 如果它在输入和输出的样本数据上获得较高的准确性,就停止学习


同样的网络,但用微软Visual C++ 6.0编写。

速度比MQL4高了好几个数量级

算法不变,从MQL4到C++的转移是尽可能直接的,不需要使用类对象。

附加的文件:
yzpnn.zip  63 kb
 

另一个选择,但在MQL


只是试图在M1上工作,显示当前的趋势方向。

3日退出,理论上你可以不在启动时授课 - 但立即采取准备好的权重 - 提前授课


---

9个输入,将缪斯的 归一化差值输入其中

---

OUT-1 OUT-2 OUT-3 输出

0.9 0.01 0.01 趋势上升

0.01 0.9 0.01 Flet

0.01 0.01 0.9 趋势下降



---

我计划增加3-4个时间段,并一次性数完!"。

PNN在已经称重的情况下工作速度非常快

---


实验性测试代码 - 请不要踢我。






附加的文件:
原因: