zikzak kodu
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
Gösterge arabellekleri yalnızca yüksek ve düşük değerleri içerir, ara verileri bir döngüde doldururum, onları 1'e dönüştürürüm - mevcut çubukta büyüyor, -1 düşüyor. Doğru görünüyor, ancak hatalar varsa - lütfen beni düzeltin
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; } }
Güzel! Sadece alış ve satış için gerçek takas sinyallerine bahis yaptığınızda.
Ne için? )
Böyle bir işaret. Test ettikten sonra.
Eğitim için bir girdi verisi vektörüne ihtiyacım var ve burada sinyaller kesiliyor - ya al ya da sat ya da boşluklar .. ve sıfırlarla değil, onları nasıl dolduracakları açık değil .. Zigzag, bence, daha az ideal değil girdiler, ama yanılıyor olabilirim .. zayıf bir şekilde hala sinir ağlarında dolaşıyorum ..
Eğitim için bir girdi verisi vektörüne ihtiyacım var ve burada sinyaller kesiliyor - ya al ya da sat ya da boşluklar .. ve sıfırlarla değil, onları nasıl dolduracakları açık değil .. Zigzag, bence, daha az ideal değil girdiler, ama yanılıyor olabilirim .. zayıf bir şekilde hala sinir ağlarında dolaşıyorum ..
Göstergede, aralarından seçim yapabileceğiniz ayrık ve analog olmak üzere iki tür sinyal bulunur. Boşlukları sıfırlarla doldurun.
Eğitim örneğindeki ilk gönderideki resim? Bu örneklem dışındaysa, bu kadar çok sayıda nöron içeren eğitim örneğine bakmak ilginçtir, ağın tüm girdi verilerini ezberlemesi gerekir.
Göstergede, aralarından seçim yapabileceğiniz ayrık ve analog olmak üzere iki tür sinyal bulunur. Boşlukları sıfırlarla doldurun.
Eğitim örneğindeki ilk gönderideki resim? Bu örneklem dışındaysa, bu kadar çok sayıda nöron içeren eğitim örneğine bakmak ilginçtir, ağın tüm girdi verilerini ezberlemesi gerekir.
Eğitim örneği son 1000 çubuktur, daha doğrusu ilk çubuktur, bir zaman serisinde olduğu gibi 0'dan bakarsanız, ondan önceki her şey örnek dışıdır.
Yarın bağlamaya çalışacağım bakalım ne çıkacak. Henüz olağanüstü bir şey verilmedi, ortalama olarak sıfıra kadar çalışıyor :)
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Forumda hazır çözümler ve piyasada ticaret için sinir ağının etkinliği hakkında çok az bilgi var. Sizi burada tartışmaya ve deneyimlerinizi paylaşmaya davet ediyorum. Zaten tartışması olan bir konu varsa, lütfen bağlantı kurun.
Buradaki sınıfları, her zamanki çok katmanlı algılayıcıyı kullanıyorum. Umarım sınıflar her şeyi doğru düşünür, yazarın deneyimine güvenirim. Denemeye başladım, ilginç :)
Şu anda girişte 11 hindi var, çıkışta zikzak, geleceğe 1 bar kaydırılmış.
Bunlar, şebeke tarafından 8 ay boyunca verilen sonuçlardır. Gizli katmanda 1000 çubuk, 10000 dönem, 70 nöron üzerinde eğitim alıyorum. Sinyaller terstir ve ek filtreler olmaksızın tamamen sinir ağı tarafından sağlanır. 15 dk tf.