Discussione sull’articolo "Indicatori multipli su un grafico (Parte 04): Passiamo a un Expert Advisor"
Nuovo articolo Indicatori multipli su un grafico (Parte 04): Iniziare con gli EA è stato pubblicato:
Autore: Daniel Jose
Ciao Daniel, ho seguito i tuoi articoli, ma per quanto riguarda la Parte 03?
C'è stato un piccolo problema al momento di richiedere il rilascio per la pubblicazione, ma ho già autorizzato la pubblicazione della Parte 03, sarà presto disponibile anche questa, questo problema è stato causato più dal numero di articoli che ho già inviato ... attualmente ci sono altri 15 articoli da analizzare, tutti coinvolti nello sviluppo di questo EA e con ognuno di essi le cose diventano sempre più complesse .... ma vi ringrazio per aver seguito la serie ... aspettatevi un sacco di novità a partire dall'articolo 05, da quel momento in poi ne varrà davvero la pena perché diventerà qualcosa di grande, questi primi articoli sono solo per introdurvi a ciò che verrà...😁👍
Ciao Daniel,
Ho dei problemi con gli indicatori multicolore e i tuoi articoli, che mi piacciono, indicano che potresti conoscere la soluzione.
Vorrei produrre una funzione che imposti tutti gli attributi dell'indicatore senza utilizzare le opzioni #property, ad esempio #property indicator_color1 clrCrimson,clrWhite,clrLime
Nel programma di prova qui sotto, ho riscontrato che con la #property indicator_color1 clrCrimson,clrWhite,clrLime inclusa, il programma funziona correttamente, mentre se la commento, il programma non funziona correttamente.In questo caso sembra che vengano tracciati solo alcuni dei punti di dati, come se si utilizzasse un time frame "più alto" o si saltassero alcuni punti di dati. Sospetto che la direttiva property color stia impostando altri attributi che non ho identificato quando vengono specificati più colori.
Il secondo problema è che ovviamente non capisco i dettagli e i requisiti dell'utilizzo di grafici multicolore. Ho cercato nella documentazione e non ho trovato alcun articolo che fornisca una panoramica su come utilizzare gli indicatori multicolore. Mentre il primo grafico cambia colore correttamente, il secondo, che traccia i minimi, non cambia colore secondo la mia chiamata di funzione. Questo grafico richiede tutte e tre le proprietà: type2, color2 e width2 per funzionare correttamente. Sono anche perplesso sul motivo per cui le dichiarazioni delle proprietà utilizzano 2 invece di 3. Ho utilizzato l'indicatore Laguerre Adaptive Filter di Mladen per identificare che gli indicatori di proprietà utilizzano il numero della trama, 2, e non il numero dell'indicatore 3 per visualizzare correttamente.
Qualsiasi suggerimento, riferimento o aiuto sarà molto apprezzato.
Saluti, CapeCoddah
Qualsiasi suggerimento, riferimento o aiuto sarà molto apprezzato.
Cordiali saluti, CapeCoddah
Se sei un po' confuso, posso capirlo... ma tutta la confusione sta nel fatto che non stai osservando i dettagli del tuo codice. Cercherò di spiegare alcuni dettagli che sono nel commento, poi parlerò un po' del tuo codice....
Il primo punto è che si può anche produrre un indicatore multicolore senza usare #property indicator_colorN ma per l'utente e anche per voi è più pratico, più sicuro e più semplice capire e modificare il codice, perché tutto quello che dovete fare è andare nelle proprietà è modificare i colori presenti lì, e per l'utente è più semplice perché dovrà solo scegliere il colore da modificare e fare la modifica, questo nella finestra standard che MT5 crea per gli indicatori. In qualche modo si sta già facendo la cosa giusta quando si usa il comando PlotIndexSetInteger per generare i cambiamenti di colore, e questo è il modo in cui non si usa #property indicator_colorN, ma quando si usano le proprietà spesso non ha senso usare il comando PlotIndexSetInteger per impostare altri colori, Questo perché la cosa può essere più complicata da mantenere e più confusa per l'utente, dato che potrebbe non capire bene cosa lo standard di colore sta cercando di dire, anche se il codice è vostro e sarete gli unici a usare l'indicatore, non ha molto senso, a meno che in rari casi non creiate un modello di colore dinamico.
Ora parliamo del secondo punto: Il problema in questo caso è che state confondendo il numero di cose che l'indicatore traccerà ( 2 per 2 linee ) con le proprietà dell'oggetto ( in questo caso linea ) e per la linea da tracciare, in realtà è necessario dichiarare almeno 3 informazioni, che sono TypeN, ColorN, WidthN, dove la N indica il numero dell'oggetto, con la pratica e il tempo finirete per capire queste piccole differenze tra le proprietà dell'indicatore e le proprietà degli oggetti che utilizza... Non arrendetevi... continuate a studiare e presto le cose saranno più chiare... 😁👍
Ora vediamo un po' del vostro codice... Non vi mostrerò esattamente come correggerlo (se lo facessi non sarebbe divertente... .... 😁👍✌ ), ma voglio che prestiate attenzione al fatto seguente, che è importante:
Buf=Set_IndexBuffer5(Buf, dataHi, INDICATOR_DATA , DRAW_COLOR_LINE , 4 , "High" , clrYellow , clrWhite , clrDodgerBlue ); Buf=Set_IndexBuffer5(Buf, dataHic, INDICATOR_COLOR_INDEX ); Buf=Set_IndexBuffer5(Buf, dataLo, INDICATOR_DATA , DRAW_COLOR_LINE , 4 , "Low" , clrYellow , clrWhite , clrDodgerBlue ); Buf=Set_IndexBuffer5(Buf, dataLoc, INDICATOR_COLOR_INDEX );
Notate che ho segnato due cose nel vostro codice... ora vediamo cosa succede quando viene riprodotto sul grafico....
Vede che solo una delle etichette è quella dichiarata nel codice, solo la HIGH .... e la LOW ?!?! dov'è ?!?! questo è il primo punto che dovrebbe correggere, perché il fatto che l'etichetta LOW non venga mostrata indica che il modello di colore che viene utilizzato è quello dichiarato in #property indicator_color2, cioè, si ha un fallimento a questo punto, se si tenta di rimuovere le proprietà dell'indicatore 2 che creano effettivamente la linea LOW, anche mantenendo il resto del codice, la linea HIGH verrà tracciata, ma la linea LOW no....perché?!?! perché in effetti non state definendo le informazioni necessarie per tracciare la linea LOW, questo dinamicamente tramite l'uso della chiamata PlotIndexSetInteger... sembra strano ... ma questo è ciò che sta accadendo ....
Quando si riesce a risolvere questo problema, se si vuole davvero utilizzare il modo dinamico di dichiarare i dati dell'oggetto riga utilizzando PlotIndexSetInteger, si potranno eliminare i comandi di compilazione #property indicator_color dalla scena, poiché i dati necessari saranno impostati dinamicamente, ma se non si vuole fare questo sforzo, va bene....
Ora voglio che guardiate l'immagine qui sopra e la confrontiate con i colori che state usando in #property indicator_color ... osservate questi colori con molta attenzione .... se lo fate noterete qualcosa di strano .... ancora una volta non vi dirò di non perdere il divertimento, ma cercate di usare colori diversi, senza ripeterne nessuno... quando li ripetete diventa più difficile capire dove sia l'errore... 😁👍
Ora un ultimo dettaglio: Il fatto che tu pensi che stia tracciando solo alcuni punti e saltandone altri può essere dovuto a due motivi: Il pattern di colori non è in contrasto con lo sfondo del grafico, provate a usare colori che contrastino con lo sfondo del grafico, e il secondo, ma non credo che sia effettivamente il caso, è che potrebbe esserci un errore nell'evento OnCalcule, state restituendo -1 o il valore di i, la cosa corretta è restituire rates_total, quindi cambiate questo nel codice per evitare problemi futuri...
Ciao Daniel,
Mi sono confuso: pensavo che le caratteristiche del disegno fossero definite utilizzando le specifiche del buffer come in MQ4 mentre, almeno per le specifiche DRAW_COLOR..., le caratteristiche del disegno sono definite utilizzando l'identificatore di trama sequenziale. Inoltre, la proprietà indicator_colorX ha in realtà due funzioni, la prima per contare e impostare il numero di colori e la seconda per impostare ciascun colore specificato nella posizione corretta dell'array.Allego due file: Color Test, che ora funziona correttamente anche se necessita di ulteriori perfezionamenti, e MACD Original2_1 di MLADEN, leggermente modificato. Il programma di Mladen è interessante in quanto ha definito due tracciati ma utilizza solo un buffer di indici di colore.
Grazie per l'assistenza

- 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
Il nuovo articolo Indicatori multipli su un grafico (Parte 04): Passiamo a un Expert Advisor è stato pubblicato:
Nei miei articoli precedenti, ho spiegato come creare un indicatore con più finestre secondarie, cosa che diventa molto utile quando si utilizzano indicatori personalizzati. Qui vedremo invece come aggiungere più finestre a un Expert Advisor.
Quando in passato ho deciso di creare qualcosa di nuovo utilizzando l'OOP (Programmazione orientata agli oggetti), l’ho fatto perché consapevole del fatto che l'utilizzo di questo approccio presentava seri vantaggi, tra cui la sicurezza e l'ereditarietà. Esiste anche il polimorfismo, ma lo useremo più avanti quando creeremo un sistema di ordini incrociati. In questo caso particolare utilizzeremo uno dei vantaggi dell'OOP: l'ereditarietà. C_TemplateChart è già una classe completamente funzionale. In questo caso, non vorremmo avere il problema di dover riprogrammare tutto da capo o rischiare di aggiungere codice alla classe, impedendo che questa possa essere utilizzata in altri luoghi. La soluzione è utilizzare l'ereditarietà, che consente di aggiungere nuovo codice o funzione senza modificare affatto il codice originale.
L'uso dell'ereditarietà presenta una serie di vantaggi, inclusi i seguenti: il codice già testato rimane tale; la complessità cresce senza un corrispondente aumento della dimensione del codice; solo le nuove funzionalità devono davvero essere testate; ciò che non cambia viene semplicemente ereditato, fornendo stabilità. In altre parole, le cose migliorano con il minimo sforzo e con la massima sicurezza. Per comprendere meglio, diamo un'occhiata alla documentazione:
Autore: Daniel Jose