Come estrarre solo i punti di svolta in basso estratti dall'indicatore zigzag? - pagina 3

 
jackprobe:
Grazie deVries. lo proverò ...


e se metti qualcosa come

questo all'interno del tuo codice ....

 
ubzen:

Ecco cosa mi è venuto in mente. Non ho controllato i risultati di deVries sopra [lo stavo facendo quando ha postato].


Ciao, ubzen, vedo solo il tuo codice come sotto:

Non so quale sia il significato di queste due linee di codice: if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];

Trovo che non cambia quasi nulla quando elimino i codici di queste due linee, quindi non so perché aggiungete queste due linee.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_width1 1
#property indicator_color2 Yellow
#property indicator_width2 1

double Bottoms[];
double Toppers[];

int init()
{

   IndicatorBuffers(2);

   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,Bottoms);
   SetIndexEmptyValue(0,0.0);

   SetIndexStyle(1,DRAW_SECTION);
   SetIndexBuffer(1,Toppers);
   SetIndexEmptyValue(1,0.0);

  IndicatorShortName("zz show top & bottom");
  return(0);
}

int deinit()
{
  return(0);
}

int start()
{
  int counted_bars=IndicatorCounted();
  int limit=0;
  limit = Bars-counted_bars;
  
  for(int shift=limit-1;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
  }
  
  return(0);
}
 
vx0532:


Ciao, ubzen, vedo solo il tuo codice come sotto:

Non so quale sia il significato di queste due linee di codice: if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];

Trovo che non cambia quasi nulla quando elimino i codici di queste due linee, quindi non so perché aggiungi queste due linee.


Zigzag con linea ai minimi e linea ai massimi
 


Scrivo questi codici qui sotto nell'EA

ma quando lo provo nei dati storici, "print" mostra tutti 0, perché?

for(int shift=99;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
 }
 
 shift=0;
 while(shift<100)
 {
 Print("Bottoms,Toppers:",Bottoms[shift]," , ",Toppers[shift]);
 shift++;
 }
 

leggi il mio messaggio 1 pagina indietro

deVries 2013.10.19 12:13 #

https://www.mql5.com/en/forum/144092/page2#854926


//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;
 
deVries:

Grazie deVries, ho capito questo problema dopo aver esaminato il tuo post.

Quindi sono giunto alla conclusione che possiamo usare un doppio array e una variabile per ricevere il valore di ritorno di iCustom() nel codice dell'indicatore; ma possiamo solo usare una variabile per ricevere il valore di ritorno di iCustom() nel codice dell'EA.

la tua spiegazione è che:"sono i buffer sbagliati e devi trovare il valore di i in quale barra sarà il top o il bottom "

la mia comprensione è che in EA, quando usiamo l'array x[i] per ricevere iCustom(), l'assegnazione è ok, ma la barra dell'assegnazione è incerta.

quindi iCustom() non restituisce semplicemente un valore ma anche altre cose, sì?

ma ancora non capisco il significato del codice: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"

 
vx0532:

Grazie deVries, ho capito questo problema dopo aver esaminato il tuo post.

Quindi sono giunto alla conclusione che possiamo usare un doppio array e una variabile per ricevere il valore di ritorno di iCustom() nel codice dell'indicatore; ma possiamo solo usare una variabile per ricevere il valore di ritorno di iCustom() nel codice dell'EA.

la tua spiegazione è che:"sono i buffer sbagliati e devi trovare il valore di i in quale barra sarà il top o il bottom "

la mia comprensione è che in EA, quando usiamo l'array x[i] per ricevere iCustom(), l'assegnazione è ok, ma la barra dell'assegnazione è incerta.

quindi iCustom() non restituisce semplicemente un valore ma anche altre cose, sì?

ma non capisco ancora il significato del codice: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"


stai ancora lottando per ottenere dati dall'indicatore ZigZag

perché vuoi che ti spieghi cosa non c'è nel mio codice?

perché non cercate il codice di

//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;

l'intero codice puoi trovare una pagina indietro.... https://www.mql5.com/en/forum/144092/page2#854926

se capisci il funzionamento di quel codice allora è semplicemente usando lo stesso metodo in EA's

 
  1. deVries: l'intero codice si trova una pagina indietro....
    Non dire una pagina indietro, pubblica il link al post esatto. È il segno # a destra del tuo nome (clic destro, copia il link) una pagina indietro
  2. vx0532: ma non capisco ancora il significato del codice: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    Cosa pensi che significhi "if(x> 0.1) x=x;"? Niente! Il codice corretto dopo dice:
        if(ZigZag[shift]>0.1 && Low[shift]==ZigZag[shift]) Bottoms[shift]=ZigZag[shift];
        if(ZigZag[shift]>0.1 && High[shift]==ZigZag[shift]) Toppers[shift]=ZigZag[shift];
    
 
WHRoeder:
  1. deVries: l'intero codice si trova una pagina indietro....
    Non dire una pagina indietro, pubblica il link al post esatto. È il segno # a destra del tuo nome (clic destro, copia il link) una pagina indietro
  2. vx0532: ma non capisco ancora il significato del codice: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    Cosa pensi che significhi "if(x> 0.1) x=x;"? Niente! Il codice corretto dopo dice:

done https://www.mql5.com/en/forum/144092/page2#854926
 

Cari tutti,

grazie per questa meravigliosa discussione sullo ZigZag e i codici. Vorrei aggiungere un nuovo tocco alla discussione
Per me sarebbe di grande utilità se potessi estrarre i valori alti/bassi calcolati dall'indicatore ZigZag
(con un dato, specifico set di parametri) insieme ai loro tempi di occorrenza in un file di testo o csv,
qualcosa come questo:

- Day, Time, High-Value, High(Boolean)
- Day, Time, Low-Value, Low(Boolean)

Vorrei estrarre questi valori per ulteriori analisi in MS Excel al fine di identificare le probabilità di
occorrenza di periodi di tempo e ampiezze in un grafico. Alla fine, gli istogrammi saranno creati da
questi dati, indicando la "firma" del valore nel grafico identificando periodi di tempo intrinseci e
e ampiezze di oscillazione intrinseche.

Forse sto cercando di reinventare la ruota qui e c'è del codice là fuori che fa quello che voglio
fare. Se no, varrebbe la pena di sviluppare tale codice. Sto facendo questo tipo di analisi manualmente
con tonnellate di grafici ogni giorno, e posso chiaramente affermare che conoscere la firma intrinseca di un valore
migliora notevolmente la possibilità di prevedere un cambio di direzione. Secondo me, questo processo potrebbe essere
facilmente automatizzato... ma avrei bisogno di aiuto da persone con esperienza di programmazione. Il risultato
sarebbe o un indicatore pratico, o anche un MT4 EA (Expert Adviser) automatico
che fa trading nei punti di svolta significativi.

Sarebbe bello trovare qualcuno qui che sia interessato ad uno sforzo collaborativo. Ma anche qualche suggerimento
su come estrarre i dati dall'indicatore ZigZag sarebbe utile. Molte grazie!

- spjuliman