Preguntas para principiantes en MQL5. Los profesionales no pasan de largo. - página 6

 
_o0O:

Sobre todo, ninguna, de ahí que cualquier pregunta sea bienvenida.

La ayuda no contiene este matiz. DRAW_NONE no funciona ni en #property ni en PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE), PlotIndexSetString(0, PLOT_LABEL, "Buff") tampoco funciona, así que ¿cuál es la lógica detrás de especificar clrNONE para lograr este objetivo?

Además, no todo el mundo puede leer la documentación del idioma.

El código presentado tiene todo para comprobar y entender.

 
Alexey Viktorov:

Además, no todo el mundo sabe leer la documentación del idioma.

El código proporcionado tiene todo lo necesario para comprobarlo y entenderlo.

¿Quieres hablar?

DE ACUERDO. Por favor, muéstrame el lugar de la ayuda donde hay una solución a mi problema. Y tu código es una muleta, una característica no documentada, ya que especificar clrNONE para no renderizar el buffer parece delirante.

 
Alexey Viktorov:

No es necesario poner el tipo DRAV_NONE, sino el color clr_NONE.

Este es el código de prueba

Explícate:

limit = rates_total-prev_calculated; // Это тупо для примера. В нормальном индикаторе так делать нельзя!

¿Por qué no puedes? ¿Por qué en rojo con una exclamación?

 
_o0O:

¿Cómo puedo hacer que algunos topes del indicador no se dibujen en el gráfico, sino que muestren sus valores en la" ventana dedatos" del indicador?

Lo hago:


pero el indicador sigue dibujando un buffer.

Puede ver un ejemplo aquí:

3TF_RSI_Average
3TF_RSI_Average
  • www.mql5.com
Индикатор Three timeframes RSI Average - отображает в отдельном окне три индикатора Relative Strength Index с заданных таймфреймов и их среднее значение. Имеет десять настраиваемых параметров: RSI period - период расчёта RSIOverbought - уровень перекупленностиOversold - уровень перепроданностиDrawing mode - режим рисованияFirst RSI timeframe...
 
Artyom Trishkin:

Puede ver un ejemplo aquí:

No, no es eso.

En tu ejemplo, se dibujan 4 buffers y 4 están en la ventana de datos. lo que se necesita es que no se dibujen, sino que estén en la ventana de datos y tengan un nombre determinado.

 
_o0O:

No, no es eso.

En tu ejemplo, se dibujan 4 buffers y 4 están en la ventana de datos, lo que hace falta es que no se dibujen, sino que estén en la ventana de datos y tengan un nombre determinado.

¿Y si miras con atención? Hay una desactivación de la visualización de tres de los cuatro búferes - uno por uno. Pero cuando se desactivan en la ventana de datos, se siguen mostrando, y con nombres dados mediante programación - todo como se pide. ¿O he entendido mal la pregunta?

 
Artyom Trishkin:

¿Qué tal una mirada más cercana? Hay una opción para desactivar la visualización de tres de los cuatro búferes, uno a la vez. Pero cuando los desactiva, siguen apareciendo en la ventana de datos, y con los nombres programados, tal y como pidió. ¿O he entendido mal la pregunta?

Sí, veo que hay

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,InpShowRSI1);

InpShowRSI1 toma los valores 0 o 1, así es como funciona.

Pero he especificado PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_NONE); y no ha funcionado

 
_o0O:

sí, puedo ver allí

PlotIndexSetInteger(0,PLOT_DRAW_TYPE,InpShowRSI1);

InpShowRSI1 toma los valores 0 o 1, así es como funciona.

Pero he especificado PlotIndexSetInteger(0,PLOT_DRAW_TYPE, DRAW_NONE); y no ha funcionado

DRAW_NONE == 0

DRAW_LINE == 1

Así que tienes algo más en alguna parte. En teoría, también debería funcionar para ti.

 
Artyom Trishkin:

Explícate:

¿Por qué no puedes? ¿Por qué en rojo con una exclamación?

Si el indicador calcula múltiples barras, tal implementación volará fuera de la matriz. Así que hay que forzar los músculos de la cabeza en cada caso...
 
Alexey Viktorov:
Si el indicador va a calcular varias barras, dicha implementación volará fuera de la matriz. Por lo tanto, en cada caso debemos forzar los músculos de la cabeza.

No, no es necesario. Todo se hace una vez en el límite>1. Esta es la primera ejecución y la carga del historial. Y si tiene period_sm=10 de alisamiento, entonces el límite en este caso debe ser menor en 10. En consecuencia:

if(limit>1)
  {
   limit=rates_total-period_sm-1;
   ArrayInitialize(Buffer,InitValue);
  }

InitValue - valor para inicializar el buffer - 0 o EMPTY_VALUE - según sea el caso. O tal vez -100500 ...

Razón de la queja: