Indicatori: DRAW_FILLING

 

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.

DRAW_FILLING

Autore: MetaQuotes

 

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.

File:
Session.mq5  4 kb
 

Posso solo offrire questa opzione


File:
Session.mq5  4 kb
 
Rosh:

Posso solo offrire questa opzione


Grazie, ma un po 'non andare, mi fermerò forse su oggetti grafici.

 
Urain:

Grazie, ma un po' non va, mi fermerò sugli oggetti grafici.

Poiché il disegno nello stile DRAW_FILLING è fatto con poligoni, non è possibile ottenere dei bei rettangoli, purtroppo.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Rosh:
Poiché il disegno in stile DRAW_FILLING viene eseguito con poligoni, purtroppo non è possibile ottenere dei bei rettangoli.
Questo metodo non è adatto a questo scopo, ma non per questo non è adatto ad altri scopi.
 

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:

Campione di riempimento


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:

Fuso orario

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")?

File:
 
È stato corretto l'errore di visualizzazione delle barre "a sinistra".
 

utilizzare PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); per non riempire l'intervallo.

Perché a volte ha effetto ma a volte non ha effetto?


rif https://www.mql5.com/zh/forum/417956/page4

问题,错误的讨论
问题,错误的讨论
  • 2022.05.05
  • www.mql5.com
那么,让我们开始吧...