[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 29
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Puoi dirmi come disegnare i valori di un indicatore a zig-zag? Come viene attuato in generale? Cioè se voglio prendere un certo estremo, non solo l'ultimo.
Per esempio, ora voglio attaccare questo zigzag al mio Expert Advisor:
Capisco che ho bisogno di usare la funzioneiCustom come si usa di solito per indirizzare un indicatore personalizzato, ma la domanda è come collegare i nodi...
Il buffer cerca il valore NEUTRAL(EMPTY_VALUE) secondo il principio:
e l'accesso al buffer dell'indicatore tramite iCustom().Il buffer cerca un valore EMPTY_VALUE secondo il principio:
e si accede al buffer dell'indicatore tramite iCustom().
Ha senso. Ma si cercherà in questo modo finché non si troverà un valore non vuoto. E se, per esempio, io, e, infatti, voglio non l'ultimo valore non vuoto, cioè non l'ultimo estremo, ma un altro... Per esempio, qui nello screenshot:
Ha senso. Ma in questo modo la ricerca sarà fino a quando non troveremo un valore non vuoto. E se, per esempio, io, e, in effetti, voglio non l'ultimo valore non vuoto, cioè non l'ultimo estremo, ma un altro... Per esempio, qui nello screenshot:
Inserite un contatore di estremi nel ciclo e al numero di estremi (valore non vuoto in una riga), interrompete il ciclo.
Capito. Grazie. Ora dobbiamo applicare tutto questo nella pratica. Ho capito il succo, ma la mia mente è piena di filtri che mi fanno bollire il cervello...
Capito. Grazie. Ora dobbiamo applicarlo nella pratica. Ho l'idea, ma ci sono così tanti filtri nella mia mente che il mio cervello sta bollendo...
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
Se avete bisogno del numero di barra del picco, cambiate il tipo di funzione in int e invece di return(ind); scrivete return(i);
Notate anche che se usate i nel vostro codice, specialmente nelle ricerche (come nel tutorial) allora cambiate i in questa funzione con qualsiasi altra variabile, per esempio k.
E assicuratevi di configurare iCustom all'interno della funzione per il vostro indicatore.
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1)
if(ind!=0) n--;
else
if(ind!=0) return(ind);
}
}
Se avete bisogno del numero di barra del picco, cambiate il tipo di funzione in int e invece di return(ind); scrivete return(i);
Notate anche che se usate i nel vostro codice, specialmente nelle ricerche (come nel tutorial) allora cambiate i in questa funzione con qualsiasi altra variabile, per esempio k.
E assicuratevi di configurare iCustom all'interno della funzione per il vostro indicatore.
Nikolai, è interessante, naturalmente, che tu abbia scritto la condizione. Lo guardo e penso...
Si scopre che se il buffer dell 'indicatore personalizzato restituisce il valore zero, allora n--, e se ilbuffer dell'indicatore personalizzato restituisce il valore zero, allora ... restituiamo il valore del buffer dell'indicatore.
Ma le condizioni sono le stesse. E lì e così se non zero...
Nikolai, è interessante, certo, hai la condizione scritta. Mentre lo guardo, penso...
Si scopre che se il buffer indicatore personalizzato restituisce un valore di zero, allora n--, e se ilbuffer indicatore personalizzato restituisce un valore di zero, allora ... restituiamo il valore del buffer dell'indicatore.
Ma le condizioni sono le stesse. E lì e così se non zero...
Le parentesi sono cadute mentre cercavo di inserire il codice correttamente:
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(n>1) {
if(ind!=0) n--;
}else{
if(ind!=0) return(ind);
}
}
}
Se n>1 {
se il buffer non è vuoto, allora sottrarre 1 da n
il contrario{
se il buffer non è vuoto, restituisce il suo valore
}
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(ind!=0) {
if(n>1) n--; else return(ind);
}
}
}
double get_extrem(int n) {
for(int i=1;;i++) {
double ind=iCustom(Symbol(),0,"indicator_name",0,i);
if(ind!=0) {
if(n>1) n--; else return(ind);
}
}
}
In generale, tutto va bene in entrambi i modi. Sono solo abituato a scrivere il codice in modo un po' diverso, è più facile da leggere in questo modo mentre il tuo è diverso. La prima parentesi in ogni vostro codice non si sposta. L'ho messo nel mio EDITOR e tutto è al suo posto così:
Fondamentalmente, tutto va bene in entrambi i modi. Sono solo abituato a scrivere il codice in un modo diverso: è più facile da leggere in questo modo, mentre il tuo codice è diverso. La prima parentesi in ogni vostro codice non si sposta. L'ho messo in Editor e ogni cosa è al suo posto in questa forma:
quando il codice supera le 1000 linee, si inizia a scrivere in modo compatto).
anche in MT4 le prestazioni soffrono, soprattutto quando si eseguono i test. La versione laconica è più veloce.