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

 
Artyom Trishkin:
Corregir el indicador de la curva. Puede dibujar una línea sólo en el recálculo completo, que se realiza mediante un comando del menú contextual.
Alexey Viktorov:

También hay uno en mql4.

Gracias.

 
Lo saqué con una muleta). Quería que el indicador se actualizara después de arrastrar manualmente la línea vertical, de la que toma el tiempo. He utilizado la función de evento de arrastrar un objeto y he puesto en ella la función de cambio de TF con retorno a la inicial. Pero por alguna razón la actualización se retrasa, unos segundos. La función de cambio de TF funciona tan lentamente que no lo entiendo.
 
khorosh:
Lo resolvió con una muleta). Necesitaba actualizar el indicador después de arrastrar manualmente una línea vertical, de la que toma el tiempo. He utilizado la función de arrastrar un objeto y he puesto en ella la función de cambiar de TF con un retorno a la inicial. Pero por alguna razón la actualización se retrasa, unos segundos. La función de cambio de TF es demasiado lenta, no la entiendo.

Esta función es asíncrona. Sólo devuelve el resultado del comando en la cola de eventos.

Para actualizar inmediatamente, es necesario ejecutar el comando ChartRedraw() después del comando de cambio de gráfico

Este es, por supuesto, un enfoque equivocado. Si desea actualizar el gráfico sólo después de la finalización del desplazamiento de la línea, el bucle de recálculo del indicador debe ser llamado no desde OnCalculate() sino desde ChartEvent() - el desplazamiento de la línea es capturado - se llama a la función de recálculo del indicador, que ejecutará todo el ciclo de recálculo de la línea con los nuevos datos (la línea es necesaria para algunos datos, ¿no?).

¿O simplemente el indicador no está hecho correctamente y no actualiza la barra de cero en los datos actuales, y tú lo has pateado?

 
ilyav:

¿Puede alguien ayudar a arreglar el código de EA en MT5?

He leído los manuales, pero no puedo superar 2 barnices al compilar.

la declaración de 'xxxx ' oculta la declaración global

и

posible pérdida de datos debido a la conversión de tipos

Vea el consejo adjunto.

Sólo he arreglado estúpidamente los nombres de las variables globales y he hecho coincidir los tipos.

Son 10.000.000 que puedes cobrar - por superar tu pereza.

Archivos adjuntos:
 
Artyom Trishkin:

Sólo he corregido los nombres de las variables globales y he alineado los tipos.

Me debes 10 000 000 por superar tu pereza.

Muchas gracias.

Me da vergüenza mostrar cómo lo he arreglado)

int CountTrades(long PositionID1)

 
Artyom Trishkin:

Esta función es asíncrona. Sólo devuelve el resultado del comando en la cola de eventos.

Para actualizar inmediatamente debe ejecutar el comando ChartRedraw() después del comando de cambio de gráfico

Este es, por supuesto, un enfoque equivocado. Si necesita actualizar el gráfico sólo después de la finalización del desplazamiento de la línea, el bucle de recálculo del indicador debe ser llamado no desde OnCalculate() sino desde ChartEvent() - el desplazamiento de la línea es capturado - se llama a la función de recálculo del indicador, que realizará el ciclo completo de recálculo de la línea con los nuevos datos (la línea es necesaria para algunos datos, ¿no?).

¿O tal vez el indicador simplemente se hizo incorrecto y no actualiza la barra cero en los datos actuales y usted lo jodió?

El indicador cuenta las últimas barras no calculadas. Y después de arrastrar la vertical, debería recalcular completamente después de leer el nuevo tiempo de la vertical. Escribí sobre ello aquí y añadí capturas de pantalla de cómo funciona.

Gracias, intentaré poner en práctica tu idea. En general no soy muy bueno con los indicadores, me he manejado con Asesores Expertos principalmente.

 
Artyom Trishkin:

Esta función es asíncrona. Sólo devuelve el resultado del comando en la cola de eventos.

Para actualizar inmediatamente, es necesario ejecutar el comando ChartRedraw() después del comando de cambio de gráfico

Este es, por supuesto, un enfoque equivocado. Si desea actualizar el gráfico sólo después de la finalización del desplazamiento de la línea, el bucle de recálculo del indicador debe ser llamado no desde OnCalculate() sino desde ChartEvent() - desplazamiento de la línea - llamar a la función de recálculo del indicador, que ejecutará todo el ciclo de recálculo de la línea con los nuevos datos (la línea es necesaria para algunos datos, ¿verdad?).

¿O tal vez el indicador no está hecho correctamente y no actualiza la barra de cero en los datos actuales, y usted lo pateó?

Hice lo que me aconsejó. Todo ha funcionado perfectamente. Ahora, instantáneamente, después de arrastrar el indicador se redibuja completamente. Gracias de nuevo.

 
khorosh:

Hice lo que me aconsejó. Todo ha funcionado perfectamente. Ahora, inmediatamente después de arrastrar el indicador se redibuja completamente. Gracias de nuevo.

De nada. Pero debería dibujarse en OnCalculate(), ¿o no?

Cuando se arrastra en un gráfico, el indicador no está al tanto de los cambios de la línea, pero debe dibujar la línea.

 
Artyom Trishkin:

De nada. ¿Pero debería dibujarse en OnCalculate(), o no?

Cuando se aplica a un gráfico, no está al tanto de los movimientos de la línea, pero debe dibujar la línea.

Cuando el indicador se adjunta al gráfico, se crea una línea vertical en init() y se establece inicialmente un tiempo para ella, por ejemplo Time[10]. He duplicado el código enOnChartEvent() y OnCalculate(). Sólo en OnChartEvent recalculo por todas las barras.

 
khorosh:

Cuando se instala el indicador en el gráfico en init() se crea una línea vertical e inicialmente se fija en algún tiempo, por ejemplo Time[10]. He duplicado el código en OnChartEvent() y OnCalculate(). Sólo en OnChartEvent recalculo por todas las barras.

¿No sería mejor crear simplemente la función Refresh(), por ejemplo, con los parámetros formales necesarios, y llamarla cuando sea necesario?

Y por cierto, al obtener el rates_total en el indicador más allá de OnCalculate() usando Bars() con un rango de fechas, se puede coger un cuelgue del indicador:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Análogo de iBarShift

Nikolai Semko, 2018.04.05 23:47

Hasta aquí esta variante, pero ahora quiero añadirla para evitar este fallo de cuelgues de la función Bars, sobre el que ya he escrito a servicedesk.

La esencia de este error es que si en la función Bars tantostart_time comostop_time están dentro de una barra o están en el futuro (a la derecha de la barra cero), entonces esta función se cuelga durante más de 10 segundos.

Quizá más adelante haga una versión adecuada más rápida pero más engorrosa.