神经网络的顾问,分享经验。

 

论坛上几乎没有关于现成的解决方案和神经网络在市场上交易的有效性的信息。我建议在这里讨论和分享经验。如果已经有一个讨论的主题,请链接到它。

我正在使用这里的 类,简单的多层Perspectron。我希望班级算得准,我是靠作者的经验来算的。开始做实验了,很有意思:)

目前,我在输入端有11个诱因,输出端是一个向未来转移了1条的之字形。

这些是我8个月来的网格结果。我正在训练1000条,10000个epochs,一个隐藏层中有70个神经元。信号被反转,纯粹由神经网络完成,没有额外的过滤器。15分钟tf。

 

Zigzag代码

//+------------------------------------------------------------------+
//|                                                       FastZZ.mq5 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
#property version   "1.00"
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 1
#property  indicator_label1  "ZZ"
#property  indicator_type1   DRAW_ZIGZAG
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//+------------------------------------------------------------------+
input int Depth=2000; // Minimum points in a ray
//+------------------------------------------------------------------+
double zzH[],zzL[];
double depth;//, deviation;
int last,direction;
//+------------------------------------------------------------------+
void OnInit()
  {
   SetIndexBuffer(0,zzH,INDICATOR_DATA);
   SetIndexBuffer(1,zzL,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);
   depth=Depth*_Point;
//deviation=10*_Point;
   direction=1;
   last=0;
  }
//+------------------------------------------------------------------+
int OnCalculate(const int total,
                const int calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick[],
                const long &real[],
                const int &spread[])
  {
   if(calculated==0) last=0;
   for(int i=calculated>0?calculated-1:0; i<total-1; i++)
     {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      //---
      if(direction>0)
        {
         if(high[i]>zzH[last])//-deviation)
           {
            zzH[last]=0;
            zzH[i]=high[i];
            if(low[i]<high[last]-depth)
              {
               if(open[i]<close[i]) zzH[last]=high[last]; else direction=-1;
               zzL[i]=low[i];
              }
            last=i;
            set=true;
           }
         if(low[i]<zzH[last]-depth && (!set || open[i]>close[i]))
           {
            zzL[i]=low[i];
            if(high[i]>zzL[i]+depth && open[i]<close[i]) zzH[i]=high[i]; else direction=-1;
            last=i;
           }
        }
      else
        {
         if(low[i]<zzL[last])//+deviation)
           {
            zzL[last]=0;
            zzL[i]=low[i];
            if(high[i]>low[last]+depth)
              {
               if(open[i]>close[i]) zzL[last]=low[last]; else direction=1;
               zzH[i]=high[i];
              }
            last=i;
            set=true;
           }
         if(high[i]>zzL[last]+depth && (!set || open[i]<close[i]))
           {
            zzH[i]=high[i];
            if(low[i]<zzH[i]-depth && open[i]>close[i]) zzL[i]=low[i]; else direction=1;
            last=i;
           }
        }
     }
//----
   zzH[total-1]=0;
   zzL[total-1]=0;
   return(total);
  }
//+------------------------------------------------------------------+

指标缓冲区只包含高值和低值,我在循环中填充中间数据,将其转换为1 - 在当前条形图上上升,-1下降。似乎是正确的,但如果有错误,请纠正我。

void FillZZarray()
{
  ArrayResize(zz,vector);   
   int lastcountbar = 0;
   for(int i=0;i<vector;i++) // Заполняем массив выходов
     {
      if(zzH[i]>0)  
       {
        zz[i]=1; lastcountbar = 1;
        if(i!=0)
          for(int q=i-1;q>=0;q--)
           {
            if(zz[q]==0)zz[q]=lastcountbar;
           } 
       }    
      if(zzL[i]>0) 
       {
        zz[i]=-1; lastcountbar = -1; 
        if(i!=0)
          for(int q=i-1;q>=0;q--)
           {
            if(zz[q]==0)zz[q]=lastcountbar;
           } 
       } 
      if(zzH[i]==0 && zzL[i]==0) zz[i] = lastcountbar;
     }
}
 
酷!只有当把它放在真实的,交换买入和卖出的信号。
 
Vladimir Tkach:
酷!只有当你把它放在真实的,改变买入和卖出信号的位置。
为什么?)
 
Maxim Dmitrievsky:
为什么?)
这个预兆是这样的。经过测试。
 
Vladimir Tkach:
这个预兆是这样的。经过测试。
不过,说真的,如果你有话要说,我们来谈谈吧)。我又不是来玩游戏的 :)
 
Maxim Dmitrievsky:
不,说真的......让我们来谈谈吧,如果你有办法的话)。我又不是来玩游戏的 :)
试试这个 教程吧。
Sampler
Sampler
  • 投票: 33
  • 2012.06.01
  • Serj
  • www.mql5.com
Индикатор i_Sampler рассчитывает идеальные входы, предназначен для обучения нейросети.
 
Sergey Chalyshev:
试试这个 感应器进行训练。

我需要一个用于训练的输入数据矢量,这里的信号是中断的--然后是买入,然后是卖出,然后是跳过......我不知道如何填补它们,不是用零......。我不知道如何用零来填充它们......在我看来,Zigzag提供的输入并不那么完美,但我可能是错的......我对神经网络还不是很有经验......

 
Maxim Dmitrievsky:

我需要一个用于训练的输入数据矢量,这里的信号是中断的--然后是买入,然后是卖出,然后是跳过......我不知道如何填补它们,不是用零......。我不知道如何用零来填充它们,这不清楚......在我看来,Zigzag提供了不亚于完美的输入,但我可能是错的......我对神经网络还不是很有经验......

该指示器有两类信号,离散和模拟信号可供选择。在空白处填上零。

第一个帖子中的图片是培训样本上的吗?如果是样本外,那么在训练样本上看是很有意思的,有这么多的神经元,网络 应该把所有的输入数据都熟记于心。

 
Sergey Chalyshev:

指示器中的信号有两种类型,离散型和模拟型可供选择。在空白处填上零。

第一个帖子中的图片是训练样本吗?如果它不在样本范围内,那么看看训练样本就很有意思了,有这么多的神经元,网络应该把所有的输入数据都记在心里。

训练样本是最后1000条,或者说,如果你从时间序列的第0条开始看,那么第一条就不是样本了。

我明天会试一下,看看显示什么。到目前为止,拧开了第二个人字形,更大的一个人字形,看它是如何在2个输出上工作的。到目前为止,没有什么突出的表现,平均在零度时工作 :)

 
Maxim Dmitrievsky:

平均来说,在零度时就能发挥作用 :)

这就是为什么有人建议你从买入转为卖出。

我还没有听说有人在神经网络上赚到稳定的钱,它非常不稳定。最简单的TS在muwings 上--而且它们的工作更稳定。