神经网络的顾问,分享经验。
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:
这个预兆是这样的。经过测试。
不过,说真的,如果你有话要说,我们来谈谈吧)。我又不是来玩游戏的 :)这个预兆是这样的。经过测试。
Sergey Chalyshev:
指示器中的信号有两种类型,离散型和模拟型可供选择。在空白处填上零。
第一个帖子中的图片是训练样本吗?如果它不在样本范围内,那么看看训练样本就很有意思了,有这么多的神经元,网络应该把所有的输入数据都记在心里。
训练样本是最后1000条,或者说,如果你从时间序列的第0条开始看,那么第一条就不是样本了。
我明天会试一下,看看显示什么。到目前为止,拧开了第二个人字形,更大的一个人字形,看它是如何在2个输出上工作的。到目前为止,没有什么突出的表现,平均在零度时工作 :)
论坛上几乎没有关于现成的解决方案和神经网络在市场上交易的有效性的信息。我建议在这里讨论和分享经验。如果已经有一个讨论的主题,请链接到它。
我正在使用这里的 类,简单的多层Perspectron。我希望班级算得准,我是靠作者的经验来算的。开始做实验了,很有意思:)
目前,我在输入端有11个诱因,输出端是一个向未来转移了1条的之字形。
这些是我8个月来的网格结果。我正在训练1000条,10000个epochs,一个隐藏层中有70个神经元。信号被反转,纯粹由神经网络完成,没有额外的过滤器。15分钟tf。