Problema con l'indicatore ZigZag - pagina 3

 
FMIC:


Come spiegato prima in un post precedente, non si può solo usare il buffer Alto e Basso per ottenere i punti ZigZag, perché includono anche i punti ridipinti (punti ciano e rosa sul mio). Anche sullo ZigZag standard è così, ma non li vedi. Ecco perché il mio indicatore li mostra in modo che tu possa capire meglio.

Devi confrontare i buffer Alti e Bassi con il primo che contiene ENTRAMBI i bassi e gli alti per filtrare SOLO i punti ZigZag.

NB! Dovrai confrontare il primo buffer (Modo 0) con gli altri 2 buffer per decidere se è un Punto Alto o un Punto Basso (es. se sia il Buffer 1 che il Buffer 3 hanno lo stesso valore allora è un punto ZigZag Basso, e se sia il Buffer 1 che il Buffer 2 sono uguali allora è un punto Alto).

Se vuoi, allega il tuo file ad un post, e lo correggerò in modo che tu possa vedere come usarlo correttamente ( ATTACCA, non usare SRC per non essere un post lungo ).


Ciao FMIC,

Grazie per la tua spiegazione e il tuo aiuto. Non sono ancora riuscito ad ottenere i valori alti e bassi. Il problema è che si ridisegna (normalmente) e non riesco a trovare il massimo e il minimo storico. Sto anche usando il modo 0 e il modo 1 o il modo 0 e il modo 2 nell'indicatore zigzag originale ma tutti i risultati hanno già entrambi i valori. Voglio dire che non c'è una singola linea con zh (modo 1) o zl (modo 2) con valori ma nessun zz (modo 0). Quindi non sono riuscito a usare questo metodo.

Inoltre ho usato l'indice della funzione iCustom() ma non ci sono riuscito. Sembra molto semplice ma ci sto lavorando da più di 1 giorno ma non ho trovato una soluzione.

Trovate il mio codice nell'allegato (versione 5). Qualsiasi aiuto è molto apprezzato.

File:
 

Eseguo alcuni altri test ed eseguo anche un test visivo. Ho anche messo l'indice iCustom a 100 tick indietro per evitare il repainting ma lo fa. Il problema è che quando si chiama l'indicatore zigzag si guarda ai dati attuali; 100 tick prima, 10 tick prima o 1000 tick prima non hanno alcun impatto su di esso. Quindi è meglio usare l'indice come 1.

La mia comprensione è che ho bisogno di eseguire un altro ciclo controllando gli array e correggendo i massimi e i minimi eliminando i dati; ad esempio se ci sono due massimi consecutivi eliminerà il più basso e farà il contrario per i minimi. Il mio pensiero iniziale è di tornare indietro, diciamo di 100 giorni, nell'array e controllare se ci sono massimi consecutivi. Non ho ancora concluso l'algoritmo.

Avete un'idea migliore? Compreso l'utilizzo di un approccio completamente diverso per identificare i massimi e i minimi nei dati storici?

 
aed71:

Eseguo alcuni altri test ed eseguo anche un test visivo. Ho anche messo l'indice iCustom a 100 tick indietro per evitare il repainting ma lo fa. Il problema è che quando si chiama l'indicatore zigzag si guarda ai dati attuali; 100 tick prima, 10 tick prima o 1000 tick prima non hanno alcun impatto su di esso. Quindi è meglio usare l'indice come 1.

La mia comprensione è che ho bisogno di eseguire un altro ciclo controllando gli array e correggendo i massimi e i minimi eliminando i dati; ad esempio se ci sono due massimi consecutivi eliminerà il più basso e farà il contrario per i minimi. Il mio pensiero iniziale è di tornare indietro di 100 giorni nell'array e controllare se ci sono massimi consecutivi. Non ho ancora concluso l'algoritmo.

Avete un'idea migliore? Compreso l'utilizzo di un approccio completamente diverso per identificare i massimi e i minimi nei dati storici?


Ciao aed71,

Sono appena tornato da un lavoro ed è ora di andare a letto. Darò un'occhiata al tuo codice in modo più dettagliato domattina e ti fornirò una soluzione corretta.

Comunque, come nota veloce, non devi guardare indietro di 1000 o 100 barre, solo abbastanza per contemplare i parametri"profondità" e "backstep".

Inoltre, dato che stai solo raccogliendo e analizzando i dati, prendi in considerazione uno Script per andare avanti istantaneamente su tutta la storia dei dati, invece di un EA che usa intervalli di tick. In questo modo, non dovrai preoccuparti di ridisegnare i dati.

Domani ti fornirò una spiegazione più completa.

Cordiali saluti,
FMIC

 

Ciao FMIC,

Da ieri sto lavorando sull'algoritmo per eliminare i falsi alti e bassi e ho codificato la versione allegata per questo. In qualche modo elimina i falsi segnali però a volte cancella quello originale dove non dovrebbe farlo.

Il principio dietro il codice è:

Se c'è un massimo; torna indietro fino all'ultimo minimo conosciuto e passo dopo passo controlla se il massimo attuale è più alto del precedente, allora cancella il massimo precedente.

Lo stesso vale per la parte bassa. Ho messo alcune spiegazioni al codice.

Almeno non ho più alti e bassi contemporanei :-)

Ora devo trovare il bug che cancella i punti alti/bassi originali.

Se potete dare un'occhiata al mio codice forse potete capire il bug in poco tempo. Sono troppo concentrato, forse non riesco a vedere i bug anche semplici...

Grazie ancora per il tuo aiuto.

File:
 

Buongiorno "aed71",

Non ho ancora guardato il tuo file più recente, ma ecco il mio script (non indicatore, non EA) per esaminare un certo periodo di tempo e produrre i massimi e i minimi a ZigZag in un file CSV.

Basta allegare lo script a un grafico e verrà eseguito in pochi secondi. Poi basta rivedere il file CSV che viene generato nella cartella "MQL4\Files". Ho incluso un esempio eseguito sul grafico giornaliero EURUSD per l'anno 2013.

Dal momento che questo è uno script, non dovete preoccuparvi di ridipinture.

Cordiali saluti,
FMIC

PS! Esaminerò il tuo ultimo file e poi ti darò i miei commenti.

EDIT: Ho guardato il tuo ultimo codice ed è dappertutto. Basta dare un'occhiata al mio codice e vedere che il test per i massimi e i minimi è molto più semplice. Non c'è bisogno di tutta quella confusione nel tuo codice. Ecco un estratto (codice completo nel file ZIP):

if( dblZigZagPoint > 0 )  // Test if a ZigZag Point is found
{
   intZZCount++;  // Increment ZigZag Counter

   // Test if it is a High, Low or Unknown
   string strZZType = strZZUnknown;
   if( dblZigZagHigh > 0 ) strZZType = strZZHigh;
   else if( dblZigZagLow > 0 ) strZZType = strZZLow;
               
   // Output the ZigZag Point Data to CSV File
   FileWrite( intCSVFileHandle, intZZCount, strZZType, DoubleToString( dblZigZagPoint, intDigits ), Time[ intBarShift ] );
}
File:
 
FMIC:

Buongiorno "aed71",

Non ho ancora guardato il tuo file più recente, ma ecco il mio script (non indicatore, non EA) per esaminare un certo periodo di tempo e produrre i massimi e i minimi a ZigZag in un file CSV.

Basta allegare lo script a un grafico e verrà eseguito in pochi secondi. Poi basta rivedere il file CSV che viene generato nella cartella "MQL4\Files". Ho incluso un esempio eseguito sul grafico giornaliero EURUSD per l'anno 2013.

Dal momento che questo è uno script, non dovete preoccuparvi di ridipinture a tutti.

Cordiali saluti,
FMIC

PS! Esaminerò il tuo ultimo file e poi ti darò i miei commenti.

EDIT: Ho guardato il tuo ultimo codice ed è tutto fuori posto.
Basta dare un'occhiata al mio codice e vedere che i test per i massimi e i minimi sono molto più semplici.

Non c'è bisogno di tutta quella confusione nel tuo codice.


Ottimo lavoro, ha funzionato senza problemi, dovrebbe essere incluso nel codice base.... Grazie.

Ho due domande se non ti dispiace:

1-) I miei dati che ho scaricato e che vedo nel grafico mostravano 4 cifre ma l'output dello script era di 5 cifre. Come può essere possibile? Intendo 5 cifre senza zero alla fine.

Conteggio,Tipo,Prezzo,DataTempo

1,H,1.34962,2013.11.04 00:30:00

2,L,1.34861,2013.11.04 02:15:00

3,H,1.35015,2013.11.04 03:00:00

4,L,1.34417,2013.11.04 05:15:00

5,H,1.35127,2013.11.04 11:15:00

6,L,1.34910,2013.11.04 15:45:00

7,H,1.35236,2013.11.04 18:15:00

8,L,1.35045,2013.11.04 19:45:00

9,H,1.35203,2013.11.04 22:45:00

2-) Lo script è molto utile, tuttavia questa era la prima parte del mio progetto in cui analizzo i dati storici. In seguito avevo intenzione di includere il codice al mio esperto e in qualche modo trovare la correlazione tra la storia recente e decidere per un'ulteriore ottimizzazione delle variabili attuali di conseguenza. In altre parole ho bisogno di eseguire qualcosa di simile anche nell'esperto. Quindi come sarebbe possibile convertirlo in esperto?

Grazie ancora per il vostro aiuto :-)


 
aed71:


Ottimo lavoro, ha funzionato senza problemi, dovrebbe essere incluso nel codice base.... Grazie.

Ho due domande se non ti dispiace:

1-) I miei dati che ho scaricato e che vedo nel grafico mostravano 4 cifre ma l'output dello script era di 5 cifre. Come può essere possibile? Intendo 5 cifre senza zero alla fine.

2-) Lo script è molto utile, tuttavia questa era la prima parte del mio progetto in cui analizzo i dati storici. In seguito avevo intenzione di includere il codice al mio esperto e in qualche modo trovare la correlazione tra la storia recente e decidere di conseguenza per un'ulteriore ottimizzazione delle variabili attuali. In altre parole ho bisogno di eseguire qualcosa di simile anche nell'esperto. Quindi come sarebbe possibile convertirlo in esperto?

Grazie ancora per il vostro aiuto :-)

  1. Se hai un broker a 5 cifre, allora i dati avranno le 5 cifre. Il problema di molti indicatori è che non usano la funzione "IndicatorDigits()" e quindi finiscono per visualizzare solo il numero predefinito di cifre indipendentemente da quello che viene fornito dal broker. Se guardate il mio codice ZigZagZug vedrete che l'ho impostato esplicitamente, per correggere il problema, cosa che MetaQuotes non ha fatto nel proprio codice:

    // Set Number of Digits (Precision)
       IndicatorDigits( Digits );

  2. Per quanto riguarda l'uso del codice in un esperto, questo dipende davvero da molte cose, come la strategia e come i repaint la influenzano. Alcune strategie non sono influenzate dai ritocchi, altre sono molto sensibili ad essi. Non sarò in grado di offrire molti consigli per una strategia "sconosciuta". In questo caso dovrete essere specifici. Ma ricorda che non hai bisogno di guardare indietro di 1000 barre. Se impari come funziona ZigZag e come usa i break-out alti e bassi e come cerca indietro, a volte hai solo bisogno di guardare indietro per una distanza di (Profondità + Backstep) barre - a seconda della strategia potrebbe essere leggermente più o anche meno, ma mai le 1000 o 100 che usi.

 

Grazie per le informazioni sulle cifre. È un mal di testa per me, ho bisogno di leggere e capirne i dettagli...

Lasciatemi elaborare meglio ciò che sto cercando di ottenere. Ho un esperto abbastanza redditizio (attualmente) che ho testato negli ultimi 10 anni. Tuttavia l'esperto non si comporta bene in ogni condizione, non molto male ma non promettente in alcuni anni/mesi. Ha alcune variabili pre-ottimizzate che hanno un impatto sulla sua redditività. Sono disposto a trovare una correlazione tra la storia recente e oggi per auto-ottimizzare le variabili.

Quindi quello che mi serve è trovare i picchi e i minimi nei dati storici per calcolare i periodi e l'ampiezza dei dati storici. Cercherò di trovare manualmente una correlazione tra i dati storici recenti e le variabili redditizie attuali dell'esperto. Se riesco a trovarla in qualche modo, aggiungerò un codice simile al mio esperto, ogni giorno controllerà i dati statistici dell'ultima settimana e in base alle costanti correlate auto-ottimizzerà le variabili dell'esperto.

Quindi questa è la strategia. Ho lavorato su molti altri argomenti per analizzare i dati storici, tra cui Fourier, Hurts Cycles, Goertzel, MESA ecc. ma ho concluso che utilizzare un metodo che si basa sui dati esistenti sarà molto meglio.

Quindi non ho bisogno di un'analisi high-low in tempo reale, in 15M di serie di dati, sono pronto a perdere i dati di mezza giornata (quasi 45 tick). Molto probabilmente guarderò gli ultimi 5 giorni e il cambiamento di 4,5 giorni credo sia sufficiente per trovare i nuovi valori ottimizzati.

Per quanto riguarda il mio codice, penso che il problema sia; mentre controlla i massimi precedenti va troppo indietro, dovrebbe fermarsi sul valore più basso locale. Ci sto ancora lavorando perché ho bisogno della parte esperta dello strumento.

 
aed71:

Grazie per le informazioni sulle cifre. È un mal di testa per me, ho bisogno di leggere e capirne i dettagli...

Lasciatemi elaborare meglio ciò che sto cercando di ottenere. Ho un esperto abbastanza redditizio (attualmente) che ho testato negli ultimi 10 anni. Tuttavia l'esperto non si comporta bene in ogni condizione, non molto male ma non promettente in alcuni anni/mesi. Ha alcune variabili pre-ottimizzate che hanno un impatto sulla sua redditività. Sono disposto a trovare una correlazione tra la storia recente e oggi per auto-ottimizzare le variabili.

Quindi quello che mi serve è trovare i picchi e i minimi nei dati storici per calcolare i periodi e l'ampiezza dei dati storici. Cercherò di trovare manualmente una correlazione tra i dati storici recenti e le variabili redditizie attuali dell'esperto. Se riesco a trovarla in qualche modo, aggiungerò un codice simile al mio esperto, ogni giorno controllerà i dati statistici dell'ultima settimana e in base alle costanti correlate auto-ottimizzerà le variabili dell'esperto.

Quindi questa è la strategia. Ho lavorato su molti altri argomenti per analizzare i dati storici, tra cui Fourier, Hurts Cycles, Goertzel, MESA ecc. ma ho concluso che utilizzare un metodo che si basa sui dati esistenti sarà molto meglio.

Quindi non ho bisogno di un'analisi high-low in tempo reale, in 15M di serie di dati, sono pronto a perdere i dati di mezza giornata (quasi 45 tick). Molto probabilmente guarderò gli ultimi 5 giorni e il cambiamento di 4,5 giorni credo sia sufficiente per trovare i nuovi valori ottimizzati.

Per quanto riguarda il mio codice, penso che il problema sia; mentre controlla i massimi precedenti va troppo indietro, dovrebbe fermarsi sul valore più basso locale. Ci sto ancora lavorando perché ho bisogno della parte esperta dello strumento.


Quello che hai descritto non aiuta molto a capire la natura dell'EA per poterti dare dei consigli.

Se lo desideri, mandami un messaggio privato con i dettagli e posso dare una buona occhiata al tuo EA e suggerirti il codice necessario per esso.

In alternativa, tutto quello che posso suggerirti è di cercare di implementarlo al meglio, e quando avrai un problema specifico da risolvere, torna sul forum e posta una domanda specifica su di esso e vedi se gli utenti possono aiutarti.

 

OK Grazie FMIC.

In effetti il mio problema riguardava l'esperto che ho condiviso nel forum. Il tuo script funziona bene e ti ringrazio per questo, ma fondamentalmente ne ho bisogno sotto forma di esperto che possa lavorare anche in modalità quasi in tempo reale.

Motivazione: