Indicadores: DRAW_FILLING

 

DRAW_FILLING:

El estilo de dibujo DRAW_FILLING pinta el área que existe entre los valores de dos búferes de indicador. En concreto, dibuja dos líneas y llena el área que hay entre ellas con el color especificado.

DRAW_FILLING

Autor: MetaQuotes Software Corp.

 

He intentado escribir mi propio indicador utilizando el código publicado utilizando la propiedad de dibujo DRAW_FILLING.

Pero tengo problemas con la adhesión de secciones dibujadas vecinas separadas por valores vacíos.

Si en una ventana aparecen dos secciones dibujadas, entonces a pesar de que están separadas por una sección del indicador con valor EMPTY_VALUE, esta sección vacía se sigue dibujando con valores de secciones vecinas.


Retomé este caso porque los códigos publicados para el indicador de sesiones no me funcionan, así que decidí reescribirlo todo.

He aquí un borrador.

Archivos adjuntos:
Session.mq5  4 kb
 

Sólo puedo ofrecer esta opción


Archivos adjuntos:
Session.mq5  4 kb
 
Rosh:

Sólo puedo ofrecer esta opción


Gracias, pero un poco no ir, voy a parar tal vez en objetos gráficos.

 
Urain:

Gracias, pero un poco no va, me detendré en objetos gráficos.

Desde el dibujo en el estilo DRAW_FILLING se realiza con polígonos, no se puede obtener rectángulos bonitos, por desgracia.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Rosh:
Dado que el dibujo estilo DRAW_FILLING se hace con polígonos, no se pueden obtener rectángulos bonitos, por desgracia.
Bueno, este método no es adecuado para este propósito, lo que no lo hace malo para otros fines.
 

Me he encontrado con el mismo problema (pegado en zonas de valores vacíos). Aunque parece que arriba se dice que es imposible obtener rectángulos, pero como hay un ejemplo que dibuja estos rectángulos(indicador de sesiones de trading), decidí indagar en el tema.

Francamente hablando, no pude entender cómo obtener rectángulos en el indicador anterior. Por lo tanto, agradeceré cualquier explicación (de los desarrolladores de la plataforma, del autor, de terceros desarrolladores).

Por otra parte, en el curso de los experimentos resultó que no es tan difícil obtener rectángulos - sólo tiene que intercambiar los búferes de archivo después de una sección de valores vacíos. En otras palabras, este código

...
//--- 
   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;
         }
      }
   }
//--- valor de retorno de prev_calculado para la siguiente llamada
   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;
   }
//---
}

da este resultado:

Muestra de llenado


Parece que el problema está resuelto. Escribí un indicador que asigna diariamente intervalos de tiempo especificados por el usuario, y me llevé una nueva sorpresa:

Zona horaria

Por más vueltas que le doy, no consigo eliminar los "efectos secundarios". Nótese que en el primer caso (código e imagen de arriba) no se observaba nada parecido.

De ahí las preguntas:

  • ¿por qué el indicador de sesiones de negociación (enlace al principio del post) no tiene el problema de pegarse en las áreas de valores vacíos?
  • ¿Por qué en algunos casos los rectángulos se dibujan normalmente, y en otros casos tenemos efectos secundarios? Los códigos se adjuntan al final del post. (Sí, si estos fenómenos se produjeran siempre, estaría de acuerdo con la afirmación sobre los polígonos).

Repito: agradeceré todas las explicaciones.

P.S.1 Como me parece, la solución al problema de los rectángulos, es una buena alternativa a los objetos (que de alguna manera en realidad no quiero usar). Después de todo, es la misma selección de intervalos de tiempo, y la inversión lineal, y las áreas Darvas, y la selección de varios patrones, etc, etc.

P.S.2 Pensé en poner el indicador TimeZone en la base de código, pero ¿vale la pena (con estas barras de "izquierda")?

Archivos adjuntos:
 
Se ha corregido el error de representación de las barras "izquierdas".
 

use PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); para no llenar el rango.

¿Por qué a veces tiene efecto pero a veces no?


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

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