Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 481

 
¡Hola!

¿Alguien tiene un ejemplo de código que dibuje algunos iconos, por ejemplo, flechas en el gráfico del indicador, cuando las líneas se cruzan, si hay dos, o cuando se cruza la línea "0", o cualquier otro criterio? Preferiblemente en la parte superior e inferior de la ventana del indicador de autoescala.
 
Sergei Vladimirov:
Pulse "Cargar". Sólo se cargan automáticamente las últimas 2048 barras, el resto hay que patearlo.
Así es como salió después de "Cargar" ...
 
Mike:
Así es como salió después de "Load" ...
Borra a la fuerza la carpeta del archivo de historia y ejecuta el terminal - luego carga todas las citas.
 
Leo59:
¡Hola!

¿Tal vez alguien tenga un código de ejemplo que dibuje algunos iconos, como flechas en el gráfico del indicador, al cruzar las líneas, si hay dos, o al cruzar la línea "0", o cualquier otro criterio? Preferiblemente en la parte superior e inferior de la ventana del indicador de autoescala.

Aquí está uno de mis pavos, tal vez te ayude. El código es para MT4, tal cual. También funciona con troncos.

void PlotArrowUP(int i)
{
    string sup = "\xE9"; //233
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen); //настроить масштаб под свои нужды
    ObjectCreate("arr1"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]-dprice);   
    ObjectSetText("arr1"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowUp);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowUp(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}

void PlotArrowDown(int i)
{
    string sup = "\xEA"; //234
    datetime dt = iTime(NULL, 0, i); 
    double dprice = (WindowPriceMax()-WindowPriceMin())/(100.0/ArrowOffsetInPercentOfScreen);
    dprice*= 2.0;
    ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);   
    ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
    ArrowIdx++;
    if(EnableLogFile)
    {
        string dts = TimeToStr(TimeCurrent(), TIME_DATE | TIME_MINUTES | TIME_SECONDS);
        FileWrite(LogFile1, dts, "  call PlotArrowDown(i) i=", i, "  FastBuffer[i]=", FastBuffer[i]);
    }
}
 
Alexey Volchanskiy:

Вот из моего индюка, может, поможет. Код для МТ4, выкладываю, как есть. Там еще работа с логами.

Gracias Alexey por tu comentario.

En tu ejemplo es a través de objetos. Me pregunto si es posible hacerlo a través de arrays, para que cuando cambie de escala, siempre estén en los límites superior e inferior de la ventana.
 
Leo59:
Alexey Volchanskiy:
Gracias Alexey por tu comentario.

En su ejemplo, es a través de objetos. Me pregunto si es posible hacerlo a través de arrays, de forma que cuando cambie de escala, estén siempre en la parte superior e inferior de la ventana.

No entiendo lo de las matrices. Ver comentarios, he añadido

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, FastBuffer[i]+dprice);
// "arr0"+ArrowIdx - формируем уникальное имя стрелки
// FastBuffer[i]+dprice - тут формируется цена, на которой будет рисоваться стрелка
   
ObjectSetText("arr0"+ArrowIdx, sup, ArrowFontSize, "Wingdings", ColorArrowDown);
ArrowIdx++; // для каждой стрелки нужно уникальное имя

Además, si necesita dibujar en el borde superior, haga lo siguiente

ObjectCreate("arr0"+ArrowIdx, OBJ_TEXT, 0, dt, ChartGetDouble(0,CHART_PRICE_MAX,0); 

Lea la ayuda del editor; aquí se describe en detalle con ejemplos

MQL4 Reference / Constantes, enumeraciones y estructuras estándar / Constantes de los gráficos / Ejemplos de trabajo con gráficos

 
Alexey Volchanskiy:

No entiendo lo de las matrices. Ver los comentarios, he añadido

Además, si necesita dibujar en el borde superior, haga lo siguiente

Lea la ayuda del editor; aquí se describe en detalle con ejemplos

MQL4 Reference / Constantes, enumeraciones y estructuras estándar / Constantes de los gráficos / Ejemplos de trabajo con gráficos

Cambiar

WindowPriceMax() и WindowPriceMin()

Los objetos deben ser redibujados forzosamente a una distancia determinada de los bordes de la ventana

 
Leo59:

Con el cambio

los objetos tendrán que ser forzados a redibujarse a una distancia determinada de los bordes de la ventana

Los objetos antiguos seguirán en su sitio, a los precios de siempre. Si necesita moverlos a los límites, tendrá que redibujarlos manualmente. No conozco completamente su problema.

Puede utilizar OnChartEvent para seguir los cambios de la ventana.

 
Alexey Volchanskiy:

Los objetos antiguos seguirán en su sitio, a los precios de siempre. Si necesita moverlos a los límites, tiene que volver a dibujarlos a mano. Simplemente no conozco su tarea por completo.

Puede utilizar OnChartEvent para seguir los cambios de la ventana.

A primera vista, parece una tarea sencilla. PERO! ....
Hay una línea de cualquier oscilador en la ventana del indicador, que se está moviendo relativamente "0" con diferente amplitud.
El problema real es:
- En el cruce "0" de abajo a arriba, dibuje una flecha en el borde inferior de la ventana del indicador,
- En el "0" cruzando desde arriba hacia abajo, para dibujar una flecha cerca del borde superior de la ventana del indicador,
- en el autoescalado del gráfico del oscilador en la ventana del indicador, las flechas deberían permanecer automáticamente en sus bordes de la ventana del indicador.
Es decir, al desplazar el gráfico hacia adelante y hacia atrás por el historial o al cambiar su escala horizontal, las flechas siempre permanecen en los límites de la ventana del indicador.
 
Leo59:
A primera vista, la tarea parece tan sencilla como tres kopeks. PERO! ....
Hay una línea de cualquier oscilador en la ventana del indicador, que gira relativamente "0" con diferente amplitud.
El problema real es:
- En el cruce "0" de abajo a arriba, dibuje una flecha en el borde inferior de la ventana del indicador,
- En el "0" cruzando desde arriba hacia abajo, para dibujar una flecha cerca del borde superior de la ventana del indicador,
- en el autoescalado del gráfico del oscilador en la ventana del indicador, las flechas deberían permanecer automáticamente en sus bordes de la ventana del indicador.
Es decir, al desplazar el gráfico hacia adelante y hacia atrás por el historial o al cambiar su escala horizontal, las flechas siempre permanecen en los límites de la ventana del indicador.

La tarea es y es bastante sencilla.

Cuando la ventana se cambia o se desplaza, se llama aOnChartEvent, que pasa un evento sin parámetros:

CHARTEVENT_CHART_CHANGEevento de cambio de gráfico

Si se produce este evento, determinamos la barra visible izquierda y derecha y dentro de estos límites encontramos todas las flechas en la ventana del indicador. Si se encuentra, lo movemos a la frontera deseada. Cuando cree flechas, déles nombres como UpArrow***** y DownArrow***** para evitar problemas relacionados con el análisis. Entonces, por si acaso, llame a ChartRedraw.

Razón de la queja: