Ho provato a scrivere il mio indicatore utilizzando il codice pubblicato e la proprietà di disegno DRAW_FILLING.
Ma ho problemi con l'incollaggio di sezioni disegnate vicine separate da valori vuoti.
Se due sezioni disegnate appaiono in una finestra, nonostante siano separate da una sezione dell'indicatore con valore EMPTY_VALUE, questa sezione vuota viene comunque disegnata con i valori delle sezioni vicine.
Mi sono occupato di questo caso perché i codici pubblicati per l'indicatore delle sessioni non funzionano per me, quindi ho deciso di riscrivere tutto.
Ecco una bozza.
Posso solo offrire questa opzione
Grazie, ma un po 'non andare, mi fermerò forse su oggetti grafici.
Grazie, ma un po' non va, mi fermerò sugli oggetti grafici.

- www.mql5.com
Poiché il disegno in stile DRAW_FILLING viene eseguito con poligoni, purtroppo non è possibile ottenere dei bei rettangoli.
Ho riscontrato lo stesso problema (incollaggio su aree di valori vuoti). Anche se sembra che sia stato detto sopra che è impossibile ottenere dei rettangoli, ma dato che c'è un esempio che disegna questi rettangoli(indicatore delle sessioni di trading), ho deciso di approfondire l'argomento.
Francamente, non sono riuscito a capire come ottenere i rettangoli nell'indicatore di cui sopra. Pertanto, sarò grato per qualsiasi spiegazione (da parte degli sviluppatori della piattaforma, dell'autore, di sviluppatori terzi).
D'altra parte, nel corso degli esperimenti è emerso che non è così difficile ottenere dei rettangoli: basta scambiare i buffer di archiviazione dopo una sezione di valori vuoti. In altre parole, questo codice
... //--- for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) { if ( prev_calculated != rates_total && bar == rates_total - 1 ) { _up = up; } if ( bar % 4 == 0 ) { if ( up ) { draw(bar, high[bar], low[bar]); up = false; } else { draw(bar, low[bar], high[bar]); up = true; } } } //--- restituisce il valore di prev_calculated per la chiamata successiva return(rates_total); } //+------------------------------------------------------------------+ void draw(int bar, double price1, double price2) { //--- int start = bar-2; for ( int i = start; i <= bar; i++ ) { FillingBuffer1[i] = price1; FillingBuffer2[i] = price2; } //--- }
dà questo risultato:
Sembrerebbe che il problema sia risolto. Ho scritto un indicatore che assegna intervalli di tempo specificati dall'utente su base giornaliera, e ho avuto una nuova sorpresa:
Non importa come lo rigiro, non riesco a rimuovere gli "effetti collaterali". Si noti che nel primo caso (codice e immagine sopra) non è stato osservato nulla di simile.
Da qui le domande:
- perché l'indicatore trading sessions (link all'inizio del post) non ha il problema di attaccarsi alle aree di valori vuoti?
- Perché in alcuni casi i rettangoli vengono disegnati normalmente e in altri casi si hanno effetti collaterali? I codici sono allegati alla fine del post. (Sì, se questi fenomeni si verificassero sempre, sarei d'accordo con l'affermazione sui poligoni).
Ripeto: sarò grato per tutte le spiegazioni.
P.S.1 Come mi sembra, la soluzione al problema dei rettangoli, è una buona alternativa agli oggetti (che in qualche modo non voglio proprio usare). Dopo tutto, è la stessa selezione di intervalli di tempo, e l'inversione lineare, e le aree Darvas, e la selezione di vari modelli, ecc, ecc.
P.S.2 Ho pensato di inserire l'indicatore TimeZone nel codice base, ma ne vale la pena (con queste barre "sinistre")?
utilizzare PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); per non riempire l'intervallo.
Perché a volte ha effetto ma a volte non ha effetto?


- 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
DRAW_FILLING:
Lo stile del disegno DRAW_FILLING traccia un'area piena tra i valori di due buffer dell'indicatore. Infatti, traccia due linee e riempie l'area tra esse con il colore specificato.
Autore: MetaQuotes