ZigZag personalizzato

 
Sto cercando di determinare la direzione dell'indicatore zigzag con il comando icustom.

Questo è quello che ho finora:

ZigZagHigh=iCustom(NULL,0, "ZigZag",MODE_HIGH,0);
ZigZagLow=iCustom(NULL,0, "ZigZag",MODE_LOW,0);

Le linee sono disegnate sul grafico, ma sia ZigZagHigh che ZigZagLow sono uguali a zero quando eseguo il programma.




Come potrei determinare la tendenza dell'indicatore ZigZag con la funzione icustom?


Grazie
 
qualunque cosa tu stia cercando di fare, questo non è probabilmente il modo per ottenerla.
guarda 'Custiom indicators, experts and strategy testing' -- ho spiegato il modo di usare iCustom...

Penso che dovresti cambiare l'indicatore e fare due buffer extra per ottenere quei dati.
il valore basso è per esempio LOWbuff[]
il valore alto è HIGHbuff[]

ora se hai un nuovo alto (all'interno dell'indicatore) allora controlli se questo è diverso dal valore memorizzato in questo momento... se lo è, hai un nuovo valore...
1.2815 ZigZag max per esempio
bar1
bar2
bar3
...
il nuovo valore di barx arriva come 1.2755

il tuo sarà qualcosa come HIGHBUFF[1.2815,1.2815,....,1.2815,1.2755,1.2755... . ]

poi usi Icustom(NULL,0, "ZigZag",3,0); --> e voilà! hai il tuo numero

Spero che tu possa capire di cosa sto parlando...

zolero
 
zolero:
qualunque cosa tu stia cercando di fare, questo non è probabilmente il modo per ottenerla.
guarda 'Custiom indicators, experts and strategy testing' -- ho spiegato il modo di usare iCustom...

Penso che dovresti cambiare l'indicatore e fare due buffer extra per ottenere quei dati.
il valore basso è per esempio LOWbuff[]
il valore alto è HIGHbuff[]

ora se hai un nuovo alto (all'interno dell'indicatore) allora controlli se questo è diverso dal valore memorizzato in questo momento... se lo è, hai un nuovo valore...
1.2815 ZigZag max per esempio
bar1
bar2
bar3
...
il nuovo valore di barx arriva come 1.2755

il tuo sarà qualcosa come HIGHBUFF[1.2815,1.2815,....,1.2815,1.2755,1.2755... . ]

poi usi Icustom(NULL,0, "ZigZag",3,0); --> e voilà! hai il tuo numero

Spero che tu possa capire di cosa sto parlando...

zolero


No, in realtà non capisco,


Tutto quello che voglio è fare in modo che il mio EA sappia da che parte sta puntando l'indicatore zigzag (SU O GIÙ). COME POTREI FARE?
 
Tutto quello che voglio è fare in modo che il mio EA sappia da che parte punta l'indicatore zigzag (SU O GIÙ). COME POTREI FARE?
Probabilmente vuoi conoscere gli ultimi due valori (dato che lo zigzag non ha sempre un valore). Quindi devi leggere gli ultimi due valori di un indicatore:

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
ora hai due numeri zig - ultimo valore e zag - valore precedente
se(zag>zig) l'indicatore mostra giù
se(zig>zag) l'indicatore mostra su

zolero
 
zolero:
Tutto quello che voglio è fare in modo che il mio EA sappia da che parte punta l'indicatore zigzag (SU o GIÙ). Come dovrei fare?
Probabilmente vuoi conoscere gli ultimi due valori (dato che lo zigzag non ha sempre un valore), quindi devi leggere gli ultimi due valori di un indicatore:

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
ora avete due numeri zig -- ultimo valore e zag -- valore precedente
se(zag>zig) l'indicatore mostra giù
se(zig>zag) l'indicatore mostra su

zolero

GRAZIE, capito, funziona come un fascino
 
c0d3:
zolero:
Tutto quello che voglio è fare in modo che il mio EA sappia da che parte punta l'indicatore zigzag (SU o GIÙ). Come dovrei fare?
Probabilmente vuoi conoscere gli ultimi due valori (dato che lo zigzag non ha sempre un valore), quindi devi leggere gli ultimi due valori di un indicatore:

  int n, i;
  double zag, zig;
i=0;
while(n<2)
{
   if(zig>0) zag=zig;
   zig=iCustom(NULL, 0, "ZigZag", 0, i);
   if(zig>0) n+=1;
   i++;
}
ora avete due numeri zig -- ultimo valore e zag -- valore precedente
se(zag>zig) l'indicatore mostra giù
se(zig>zag) l'indicatore mostra su

zolero

GRAZIE, ce l'ho, funziona come un fascino





DOPO AVERLO TESTATO,



se(zag<zig) l'indicatore mostra giù
se(zig<zag) l'indicatore mostra su


PENSO CHE SIA CORRETTO, DAREBBE DIREZIONE OPPOSTA CON (zag>zig), (zig>zag)

 
c0d3:
PENSO CHE QUESTO SIA CORRETTO, SI STAVA DANDO LA DIREZIONE OPPOSTA CON (zag>zig), (zig>zag)

Stavo guardando l'ultima linea già sul grafico. questo significa che l'ultima linea stava guardando giù [o su]. Ma c'è un piccolo problema nel prenderlo come un segnale verso l'alto o verso il basso: lo zigzag può [e spesso lo fa] ridisegnare se stesso. ciò significa che se la linea tra due punti si trova a sud (da 1,2900 a 1,2850) allora non significa che il prezzo salirà. Probabilmente salirà, ma c'è una grande possibilità che dopo qualche movimento verso il basso si abbia una nuova linea verso il basso (da 1,2900 a 1,2820) e così via. Il mio punto è che avere una linea sul grafico non significa che il movimento in questa direzione sia finito.
 
  
int n, i; doppio zag, zig;
i=0;
mentre(n<2)
{
if(zig>0) zag=zig;
zig=iCustom(NULL, 0, "ZigZag", 0, i);
if(zig>0) n+=1;
i++;
}
 

&nbint n, i; double zag, zig; i=0; while(n<2) { if(zig>0) zag=zig; zig=iCustom(NULL, 0, "ZigZag", 0, i); if(zig>0) n+=1; i++; }sp;int n, i; double zag, zig; i=0; while(n<2) { if(zig>0) zag=zig; zig=iCustom(NULL, 0, "ZigZag", 0, i); if(zig>0) n+=1; i++; }

 
Ho modificato un po' il codice dello zigzag per mostrare cosa intendo per falso segnale. come si dice: un'immagine può dire più di 1000 parole....


La linea rossa è lo zigzag originale e va dal basso verso l'alto e viceversa nei momenti migliori... almeno così sembra. Ma se stai codificando un ea allora l'ea ottiene segnali che sono vicini alla linea gialla. può essere anche peggio come ho fatto un hack molto veloce...
il codice sta ridisegnando la linea verso l'alto o verso il basso fino a quando la linea successiva è stata disegnata e così passo dopo passo cambiando la linea gialla (cancellando i valori massimi e minimi) fino ad ottenere una linea rossa...
 
Motivazione: