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.
Sólo puedo ofrecer esta opción
Gracias, pero un poco no ir, voy a parar tal vez en objetos gráficos.
Gracias, pero un poco no va, me detendré en objetos gráficos.
- www.mql5.com
Dado que el dibujo estilo DRAW_FILLING se hace con polígonos, no se pueden obtener rectángulos bonitos, por desgracia.
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:

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:

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")?
use PlotIndexSetDouble (1,PLOT_EMPTY_VALUE,EMPTY_VALUE); para no llenar el rango.
¿Por qué a veces tiene efecto pero a veces no?
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso

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.
Autor: MetaQuotes Software Corp.