Codice a zig-zag
//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+
I buffer degli indicatori contengono solo valori alti e bassi, riempio i dati intermedi nel ciclo, convertendoli in 1 - in aumento sulla barra corrente, -1 in diminuzione. Sembra essere corretto, ma se ci sono errori, per favore correggetemi
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; } }
Fico! Solo quando lo metti sul reale, cambia le posizioni dei segnali di acquisto e di vendita.
Perché? )
Il presagio è questo. Dopo il test.
Ho bisogno di un vettore di dati di input per la formazione, e qui i segnali sono interrotti - poi comprare, poi vendere, poi saltare... e non so come riempirli, non con degli zeri... Non so come riempirli di zeri... Zigzag, secondo me, fornisce input che non sono meno perfetti, ma potrei sbagliarmi... Non sono ancora molto esperto di reti neurali...
Ho bisogno di un vettore di dati di input per la formazione, e qui i segnali sono interrotti - poi comprare, poi vendere, poi saltare... e non so come riempirli, non con degli zeri... Non so come riempirli di zeri, non è chiaro... Zigzag, secondo me, fornisce input non meno perfetti, ma potrei sbagliarmi... Non sono ancora molto esperto di reti neurali...
L'indicatore ha due tipi di segnali, discreto e analogico da scegliere. Riempi gli spazi vuoti con degli zeri.
L'immagine nel primo post è il campione di allenamento? Se è fuori campione allora è interessante vedere su campione di allenamento, con così tanti neuroni la rete dovrebbe memorizzare tutti i dati di input a memoria.
Ci sono due tipi di segnale nell'indicatore, discreto e analogico da scegliere. Riempi gli spazi vuoti con degli zeri.
La foto nel primo post è un campione di allenamento? Se è fuori campione allora è interessante guardare il campione di allenamento, con così tanti neuroni la rete dovrebbe memorizzare tutti i dati di input a memoria.
Il campione di allenamento sono le ultime 1000 barre, o meglio le prime se si guarda da 0° come nelle serie temporali, tutto ciò che precede è fuori campione.
Lo proverò domani e vedrò cosa mostra. Finora ho avvitato il secondo zigzag, quello più grande, guardando come funziona su 2 uscite. Niente di eccezionale finora, funziona in media a zero :)

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ci sono poche informazioni sul forum sulle soluzioni già pronte e sull'efficacia delle reti neurali per il trading sul mercato. Suggerisco di discutere e condividere le esperienze qui. Se c'è già un thread con una discussione, per favore linkatelo.
Sto usando classi da qui, semplice Perspectron multistrato. Spero che le classi contino correttamente, conto sull'esperienza dell'autore. Iniziato a sperimentare, interessante :)
Al momento ho 11 induks in ingresso, l'uscita è uno zigzag spostato di 1 barra nel futuro.
Questi sono i risultati della mia griglia di 8 mesi. Mi sto allenando su 1000 barre, 10000 epoche, 70 neuroni in uno strato nascosto. I segnali sono invertiti e puramente da rete neurale, senza filtri aggiuntivi. 15 min tf.