Repaint Inspector

  • Utilidades
  • Quoc Dat Quach
    Quoc Dat Quach
    Software engineer with 8 years in fintech and mobile, writing MQL4/MQL5 since 2017. I build Expert Advisors, indicators, trade and risk-management panels and utilities for MT4/MT5, and I trade forex and gold on MT5 myself.
  • Versión: 1.0

Repaint Inspector comprueba si un indicador se actualiza, en lugar de dar por buena la afirmación sin más. Se aplica a un gráfico, se le asigna un nombre a cualquier indicador personalizado y a su lista de parámetros, y vuelve a leer los búferes de ese indicador en las barras que ya se han cerrado, contando cada valor que se mueve, cada valor que aparece y cada valor que desaparece, junto con hasta qué punto en el historial sigue ocurriendo esto.

Es una herramienta de medición. En un gráfico nunca envía una orden. En el Probador de Estrategias abre y cierra una posición de volumen mínimo al inicio, ya que la prueba automática de MQL5 Market comprueba que un Asesor Experto realice una operación de trading; esa operación se registra en el diario, no forma parte de la medición y se desactiva mediante una entrada. No utiliza ninguna DLL ni acceso a la red, y no escribe nada en el disco, salvo sus dos archivos CSV en MQL5\Files.

Por qué existe: que no se actualice (non-repainting) es una afirmación habitual en la descripción de un indicador y difícil de comprobar. La prueba habitual consiste en mirar el gráfico, recordar más o menos dónde estaban las flechas, recargar y volver a mirar. Esa prueba pasa por alto los dos casos que suponen una pérdida de dinero. El primero es que un valor de una barra que cerró hace tiempo cambie mientras el gráfico permanece abierto: la flecha se desplaza unos píxeles o desaparece mientras tu atención se centra en el borde derecho. El segundo es un indicador que se comporta de forma diferente mientras está activo y muestra un historial distinto tras recargarse, que es exactamente lo que le ocurre al usuario al cambiar de marco temporal, reiniciar la plataforma o abrir un nuevo gráfico. Ambos casos son medibles.

La forma en que se define la medición es lo que determina si el resultado tiene algún significado:

  • Una barra se identifica por su hora de apertura, nunca por su desplazamiento, por lo que las nuevas barras, el desplazamiento y la actualización del historial no pueden confundirse con un cambio.
  • Solo se comparan las barras cerradas, a partir del desplazamiento 1. La barra que aún se está formando cambia por definición y no indica nada sobre el repintado.
  • El primer valor observado para una barra cerrada se convierte en la referencia. Cada lectura posterior se compara con la lectura anterior, lo que cuenta como un evento, y, siempre que se cuente como un evento, con la primera lectura, que mide la deriva.
  • Se contabilizan por separado tres tipos de eventos, ya que no tienen la misma gravedad. Modificado: un valor ha cambiado a otro valor. Aparecido: una casilla vacía ha recibido un valor, por lo que se ha materializado una señal en una barra que ya estaba cerrada. Desaparecido: se ha borrado un valor publicado, lo cual es el tipo más grave, ya que la señal sobre la que actuó un operador ya no figura en el historial que ve el siguiente lector.
  • La cifra principal es MaxShift, el mayor desplazamiento en el que se ha observado algún evento. Un indicador que solo vuelve a dibujar la última barra cerrada es algo muy distinto de uno que reescribe quince barras.
  • Cada evento se registra en un archivo CSV con la hora de detección, la hora de la barra, el desplazamiento en el momento de la detección, el búfer, el tipo de evento, el valor antiguo y el nuevo, el delta, la desviación respecto a la primera lectura y un indicador de recarga posterior, de modo que el informe pueda verificarse en lugar de darse por bueno. Un segundo archivo contiene una fila por cada búfer con todos los contadores, que se actualiza cada 15 segundos mientras se ejecuta el programa.
  • El indicador sometido a prueba se crea con IndicatorCreate a partir de una lista de parámetros analizada, por lo que se puede inspeccionar cualquier indicador personalizado sin necesidad de editar ni recompilar nada. La lista analizada se imprime en el diario al inicio, lo que hace que una lista de parámetros errónea sea visible en lugar de pasar desapercibida.
  • El identificador se puede liberar y volver a crear cada N minutos, conservando deliberadamente el historial registrado, con el fin de detectar aquellos indicadores que permanecen inactivos mientras están activos y publican un historial diferente tras una recarga. La terminal solo vuelve a calcular al recargar cuando ningún otro programa tiene el mismo indicador con los mismos parámetros, así que elimina ese indicador de tus gráficos mientras se ejecuta esta prueba.
  • Una comprobación se descarta y se cuenta como omitida, no como evidencia, siempre que el identificador aún no exista, el indicador aún no se haya calculado, hay menos barras cerradas que la profundidad que se está observando (en la primera comprobación válida, la propia profundidad se reduce al historial disponible, y el registro así lo indica), no se puede copiar un búfer, o la serie se desplaza entre la lectura de los tiempos y la lectura de los valores.

Las mediciones se han realizado con indicadores que vienen integrados en la plataforma, por lo que cualquiera puede repetirlas. Cuatro copias en cuatro gráficos de una misma plataforma, XAUUSD M1, 1 hora y 26 minutos, 300 barras cerradas analizadas, una comprobación por segundo:

  • Ejemplos\ZigZag (12,5,3): 1 315 713 comparaciones por búfer, 0 modificadas, 0 aparecidas, 17 desaparecidas en el búfer representado con MaxShift 15, y 3 y 10 desaparecidas en los dos búferes de cálculo. No se movió nada, porque un extremo de ZigZag es el máximo o el mínimo de su barra y no puede desplazarse; se elimina y se vuelve a publicar en otro lugar.
  • Ejemplos\Media móvil personalizada (13,0,2): 1 305 513 comparaciones, ni un solo evento.
  • Ejemplos\Fractales: 25 eventos, todos ellos «Aparecidos», ninguno «Modificado», ninguno «Desaparecido», todos con un desplazamiento de 3. Eso no es un repintado, sino una confirmación tardía, ya que un fractal necesita dos barras más antes de poder dibujarse, en 1 303 713 comparaciones. La línea de veredicto sigue indicando «REPAINTS», porque la herramienta informa de lo que ha observado y deja el juicio a tu criterio: los eventos que aparecen todos en un mismo desplazamiento fijo indican un indicador útil con un retraso conocido; los eventos que desaparecen en desplazamientos dispersos, no.
  • La cuarta copia ejecutó el mismo ZigZag contando el 0,0 como un valor ordinario en lugar de como ningún valor: 1 308 513 comparaciones, 32 eventos, todos ellos «Changed», el mismo «MaxShift» de 15 y un delta absoluto máximo de 4 184,088, que corresponde al precio del oro, ya que cada eliminación es ahora un pico sustituido por 0,0. El mismo repintado, con un nombre diferente.

Esas tres ejecuciones —ZigZag, media móvil y Fractales— requirieron 4 387, 4 353 y 4 347 comprobaciones, respectivamente. El mismo instrumento en el Strategy Tester comprime un día en segundos: el mismo ZigZag a lo largo de una jornada de negociación del XAUUSD M1, con modelado OHLC de 1 minuto, dio 5.512 comprobaciones, 1 651 923 comparaciones, 342 valores desaparecidos y 3 aparecidos en las barras que estaban cerradas en ese momento, 343 barras distintas tocadas y un MaxShift de 28.

Comprobación independiente de los contadores. Se ejecutó una reimplementación independiente en Python de Examples\ZigZag sobre las velas sin procesar obtenidas del terminal y se comparó con los archivos de eventos. Ejecución en tiempo real: en cada una de las 17 barras en las que el búfer representado perdió un valor, dicho valor no aparece en la reproducción, y en las 17 la última lectura de la herramienta coincide con el valor reproducido. Ejecución de prueba: 343 barras con eventos, 341 de ellas barras que perdieron un valor; las mismas dos comprobaciones, sin discrepancias. Los recuentos de comparaciones también coinciden: se abrieron 87 nuevas barras M1 durante la ejecución en tiempo real, y (comprobaciones menos 1) por 300 menos 87 reproduce exactamente cada recuento de comparaciones notificado.

Entradas: la ruta «iCustom» del indicador que se va a inspeccionar y sus parámetros como una lista separada por comas, el número de búferes a supervisar (de 1 a 32), el símbolo y el marco temporal si se desea inspeccionarlos fuera del gráfico, el número de barras cerradas supervisadas (por defecto 300), el número mínimo de segundos entre comprobaciones (por defecto 1, tiempo simulado en el Strategy Tester), una tolerancia absoluta por debajo de la cual se ignora cualquier cambio, un indicador que trata el 0,0 como ningún valor para los búferes de tipo flecha y ZigZag (activado por defecto), el intervalo de recreación del identificador, una parada opcional tras N minutos, el indicador CSV, el nombre del archivo y el límite de filas, la configuración del panel (mostrar u ocultar, esquina, desplazamientos, tamaño de fuente y cinco colores), y el indicador para la operación de muestra del Strategy Tester descrito anteriormente. Cada entrada está documentada con su propio comentario en la terminal. La ruta está vacía por defecto a propósito: si no se rellena nada, la herramienta lo indica en el diario y en el panel y no mide nada, en lugar de apuntar a un indicador que quizá no esté en tu terminal.

Límites, expresados con claridad. La herramienta no puede demostrar la ausencia de repintado; solo puede no encontrar ninguno durante el periodo medido, razón por la cual el recuento de comparaciones aparece junto a cada veredicto. Realiza muestreos en el intervalo de comprobación, por lo que puede pasarse por alto un valor que aparece y desaparece dentro de un intervalo: eso ocurrió una vez en la hora y media anterior, donde las dos copias de ZigZag, iniciadas con 14 segundos de diferencia, discrepan sobre una barra (03:32, en dos búferes) cuyo valor existió durante menos de un intervalo de comprobación, por lo que una copia lo muestreó y la otra no. Mide lo que un indicador publica a través de sus búferes, por lo que un indicador que dibuja objetos en el gráfico en lugar de llenar búferes le resulta invisible. En el Strategy Tester, el indicador sometido a prueba debe estar presente y compilado antes de que comience la ejecución: el tester trata un IndicatorCreate fallido como un error crítico y descarga el experto, algo que ningún manejo de errores dentro de la herramienta puede cambiar. En un gráfico en tiempo real, este mismo error no es grave; la herramienta permanece conectada y vuelve a intentarlo cada 30 segundos, por lo que la entrada se puede corregir sin necesidad de eliminarla.

La operación de ejemplo en el Probador de Estrategias utiliza el volumen mínimo del símbolo, se envía sin stop loss ni take profit, y el margen se comprueba con respecto al margen libre antes de su envío, por lo que un pequeño depósito de prueba genera una línea en el diario en lugar de una orden rechazada. Lleva su propio número mágico, se cierra de nuevo en un tick posterior y no afecta a ningún contador, veredicto ni fila CSV de la medición. Medido con un depósito de prueba de 1 000 USD: una operación, dos transacciones, 0,06 USD de coste, y con Examples\ZigZag en prueba en el mismo rango, todos los contadores de repintado coincidieron con la compilación que no contiene ningún código de negociación, hasta 3 404 353 comparaciones, 10 valores desaparecidos y MaxShift 17.

Límites prácticos. Las barras multiplicadas por los búferes no pueden superar las 200 000 ranuras, lo que constituye un límite de memoria; por encima de ese valor, se reduce la profundidad y se escribe una línea en el diario. Se trata de un Asesor Experto, por lo que ocupa la única ranura para expertos del gráfico: una copia por gráfico, pero no en un gráfico en el que ya se ejecute tu propio asesor; no obstante, varios gráficos pueden ejecutar copias a la vez. Solicita únicamente los búferes que el indicador tenga realmente, ya que un búfer que no existe falla en todas las comprobaciones y, tras cinco líneas del diario, esos fallos solo se contabilizan como omitidos. El nombre CSV que elijas se sobrescribe en cada inicio; el nombre automático incluye el minuto de inicio. En el Probador de Estrategias, los archivos se guardan en la carpeta MQL5\Files del propio agente de pruebas, no en la de la terminal, y un repaint observado en el probador y uno observado en tiempo real no son automáticamente lo mismo: cuando la respuesta sea importante, ejecútalo en tiempo real. Por último, la herramienta no dice nada sobre si merece la pena operar con un indicador: un indicador que no se repinta puede seguir siendo inútil, y algunos indicadores que se repintan se utilizan de forma deliberada y correcta.

Otros productos de este autor
Un copiador de operaciones local para MetaTrader 5. Copia posiciones entre terminales de MT5 instaladas en el mismo ordenador con Windows o VPS y ajusta el tamaño de cada copia según las especificaciones de los contratos de ambos brókers (tamaño del contrato, valor del tick, divisa de la cuenta), de modo que una copia tiene la misma exposición incluso cuando los dos brókers definen un lote de forma diferente. Nunca abre una segunda copia de la misma posición maestra. Qué hace Se aplica el mismo
Symbol Spec Auditor reúne en un único panel del gráfico la parte de la especificación del contrato de un símbolo que determina el tamaño de la posición y el coste de la operación: valor por punto, coste del spread, margen, swap, reglas de ejecución y sesiones de negociación. Los valores brutos de las especificaciones se convierten en importe por cada lote de 1,00 en la divisa de la cuenta, y los ajustes del bróker que incumplen de forma encubierta las normas sobre el tamaño de los lotes se muest
FREE
El «Perfil del spread por hora» genera la distribución del spread de un símbolo para cada hora del día del servidor a partir del historial de ticks de tu bróker, y lo representa en 24 barras. La parte sólida de una barra corresponde al spread mediano de esa hora, mientras que la parte superior más clara alcanza el percentil 90. Introduce el tamaño del stop que sueles utilizar y cada barra se etiquetará con su spread medio como porcentaje de ese stop, de modo que el coste se exprese en la misma u
FREE
Un libro mayor de MetaTrader 5 que desglosa tus resultados por número mágico, símbolo, día de la semana y hora; muestra las ganancias y pérdidas (P/L) por precio, las comisiones, los swaps y las tasas en columnas separadas; y calcula el spread pagado en cada ejecución y el deslizamiento respecto al precio solicitado. Los totales se comparan con el saldo de la cuenta en cada actualización. Nunca opera en un gráfico. Qué hace Adjúntalo a un gráfico. Lee el historial de operaciones de la cuenta, re
Filtro:
No hay comentarios
Respuesta al comentario