En este artículo
Al terminar, sabrás…
- Distinguir ceros documentados por plataforma de null en el modelo didáctico.
- Comprobar valor, igualdad y ausencia como estados separados.
- Registrar entorno y primera divergencia sin enviar órdenes.
Conceptos sin salir del artículo
Expert Advisor (EA) Prueba histórica de una estrategia (backtesting)Un EA que funciona solo en prueba visual necesita comprobar de dónde obtiene su decisión: un valor calculado o algo dibujado en el gráfico. Antes de cambiar estrategia, compara versiones, datos y primera diferencia de los registros. El modelo de esta página no ejecuta MT5 ni coloca operaciones; separa número disponible de lectura ausente.
Qué diferencia documenta MetaQuotes
La documentación del tester MQL5 indica que los objetos gráficos no se dibujan fuera de prueba visual y que consultar propiedades de un objeto creado devuelve valores cero durante pruebas u optimización. La limitación descrita no se aplica al modo visual. Es comportamiento documentado, no un experimento realizado aquí sobre tu asesor ni explicación universal de cualquier discrepancia.
Si el programa lee precio de una línea o estado de un botón, registra esa etapa aparte de un indicador o precio. Primero comprueba si existe un valor utilizable en ese modo. Un estado explícito de indisponibilidad permite detener el cálculo, sin aceptar un cero técnico como precio. Ver un gráfico tampoco demuestra que todas las entradas estén listas.
Número y objeto son caminos diferentes
Simulación propia sin trading: declaramos señal numérica 1,1050 y umbral 1,1040. La regla es «señal mayor que umbral». Los valores son hipotéticos, sin cotizaciones o registros de ejecución reales. La señal explícita supera el umbral y la condición es verdadera.
En el camino de objeto ausente, nuestro modelo usa null y no evalúa la comparación. Esto no afirma que las funciones de objetos de MT5 devuelvan null: la plataforma documenta ceros; null es la representación elegida aquí para razonar sobre indisponibilidad. Comprueba función, éxito y datos esperados en el programa real.
Conserva ausencia como desconocido. Sustituirla por cero oculta el estado y no diagnostica la causa real del EA.
- Número explícito
- 1,1050 > 1,1040 – Verdadero en el modelo.
- Objeto ausente
- null – Sin comparación; desconocido.
- Sustitución defectuosa
- 0 > 1,1040 – Falso aparente: transforma ausencia en número.
- Petición de operación
- Ninguna – La página no ejecuta MT5 ni conecta con cuenta.
Un tercer camino defectuoso sustituye ausencia por cero: 0 > 1,1040 devuelve falso como si existiera una observación normal. Es otro estado. Para la condición opuesta «menor que», ese cero incluso parecería cumplir el criterio aunque la señal explícita 1,1050 no lo haga. Esta comparación inversa se explica aparte; el formulario mantiene únicamente «mayor que».
Prueba el modelo sin conectar una cuenta
Puedes cambiar dos valores positivos y escoger modo supuesto. En modo visual del modelo, el objeto contiene la señal; en no visual queda ausente. La página no lee gráficos, prueba asesores ni genera recomendaciones. Solo compara números declarados y distingue falso de no evaluable.
Separa datos y objeto gráfico
El ejemplo didáctico funciona localmente en tu navegador: no conecta con cuentas o API, no envía tus entradas ni las guarda de forma persistente. No introduzcas contraseñas ni datos personales.
El contrato del control exige punto decimal, números entre 10⁻⁸ y 10⁸, hasta quince cifras y sin notación exponencial. Usa, por ejemplo, 1.1050 y 1.1040; la prosa conserva coma española. Se ejecuta localmente sin enviar entradas, conectarse a API o cuenta ni guardarlas persistentemente. Permite comprobar, restablecer y descargar TXT; no introduzcas datos personales.
Diagnóstico añadido con umbral fijo 1,1040: señal 1,1050 da verdadero; igual a 1,1040, falso; 1,1030, falso. En los tres casos no visuales el objeto protegido sigue desconocido. En modo visual supuesto, su resultado coincide con el del número. Igualdad no cumple una desigualdad estricta y no resuelve ausencia.
Registra entorno sin enviar órdenes
MQL_TESTER, MQL_VISUAL_MODE y MQL_OPTIMIZATION describen el entorno del programa. TERMINAL_BUILD identifica build del terminal. Registra lecturas reales, sin deducir modo por apariencia de una ventana. Esos datos no acreditan historia o parámetros idénticos entre ejecuciones.
Este EA diagnóstico independiente registra configuración en OnInit y deja OnTick vacío. No envía ni modifica órdenes, calcula señal o gestiona posiciones. Guarda un archivo MQ5 separado, compílalo en MetaEditor y conserva resultado y diario propios. Los nombres de campos del registro son identificadores técnicos que se mantienen para comparar.
#property strict
int OnInit()
{
PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
(int)MQLInfoInteger(MQL_TESTER),
(int)MQLInfoInteger(MQL_VISUAL_MODE),
(int)MQLInfoInteger(MQL_OPTIMIZATION),
(int)TerminalInfoInteger(TERMINAL_BUILD),
_Symbol, (int)_Period);
return INIT_SUCCEEDED;
}
void OnTick() {}
No añadas otro OnInit a un asesor existente ni sustituyas su inicialización con este fragmento. Incorporar un registro requiere preservar su flujo original. La documentación del tester contempla excepción para PrintFormat dentro de OnInit durante optimización; ausencia de mensajes desde otras etapas no prueba que nunca se ejecutaran.
Busca la primera diferencia, no solo el beneficio
Conserva una ficha pareada: modo, versiones de terminal y código, parámetros, símbolo, temporalidad, modelo de ticks, inicio solicitado y real, datos, costes y estado inicial. Guarda archivos de configuración e identificadores. Si cambian, no atribuyas todo a activar o desactivar la ventana. El comparador de manifiestos ayuda a organizar declaraciones, sin verificarlas automáticamente.
Busca primera diferencia de lectura, marca temporal, preparación de indicador, señal, condición o decisión. Anotar «beneficio 120 en vez de 80» no identifica etapa ni causa. Conserva registros originales y añade una tabla pequeña de observaciones comparables; no inventes valores que antes no registraste.
Usa identificador de observación, entrada solicitada, hora o secuencia y estado aceptado. Registrar absolutamente todo sin una clave estable puede ocultar la primera divergencia. Dos precios parecidos no prueban que correspondan al mismo evento. Es una decisión práctica de trazabilidad, sin prometer que el diario descubra automáticamente toda dependencia.
Devuelve valor y disponibilidad por separado
El cálculo debe entregar un valor explícito junto a su estado disponible; la capa gráfica puede dibujarlo. Así, apagar el dibujo no necesita cambiar deliberadamente la fuente de la señal. Comprueba módulo con entradas controladas, incluyendo ausencia e igualdad al umbral.
Quitar esa dependencia aborda una causa posible, pero no garantiza igualdad de la prueba entera: versiones, datos, costes y otras dependencias permanecen. Si careces de código, entrega al autor ficha pareada y primera divergencia documentada. No sustituyas diagnóstico por órdenes reales de prueba. La guía MT4 y MT5 cubre preparación general.
Tres acciones para documentar el fallo
- Completa una ficha de ambas ejecuciones con modo, versiones, parámetros, datos y periodo efectivo, conservando archivos originales. Marca condiciones sin confirmar; compartir nombre de asesor no demuestra que todas las entradas y circunstancias de ambas pruebas sean iguales.
- Prueba el modelo con señal superior, igual e inferior al umbral y compara resultado numérico con disponibilidad del objeto. Conserva null como ausencia del modelo, sin atribuirlo a una función MT5 ni sustituirlo por un precio cero arbitrario.
- Recoge entradas diagnósticas sin órdenes y alinea observaciones por identificador y secuencia. Localiza si primero cambió dato, disponibilidad o condición; entrega esa evidencia al desarrollador antes de modificar varias partes o juzgar una corrección por beneficio final más alto.
Comprueba lo aprendido
Aprox. 3 minutos de práctica.
Ver respuesta y explicación
Correcto: es la semántica del modelo, sin afirmar que una función MT5 devuelve null.
Más preguntas
¿Null significa que las funciones de objetos de MT5 devuelven null?
No. MetaQuotes describe valores cero al consultar propiedades fuera de prueba visual. Null representa ausencia explícita en nuestro modelo local y evita hacer una comparación sin entrada. Para diagnosticar tu programa comprueba función, éxito, modo y datos esperados. El ejemplo distingue una dependencia, sin reproducir todas las funciones de MQL5.
¿Un resultado verdadero significa que el EA abrirá una operación?
No. La página compara dos números declarados y no conecta con terminal o cuenta. Una condición verdadera no demuestra entradas listas, demás criterios de estrategia, permisos ni ejecución. Son etapas distintas también en un asesor real. El ejemplo diferencia falso de imposible de evaluar, sin generar señales ni probar eficacia de un programa.
¿Quitar objetos gráficos garantiza igualdad de resultados?
Solo elimina una dependencia posible. Versiones, parámetros, historia, ticks, costes y estado inicial siguen importando. Conserva ambas pruebas y busca primera diferencia de entrada o cálculo. Cambiar varios componentes a la vez y elegir el mayor beneficio no identifica causa. Entrega secuencia concreta y campos sin confirmar antes de atribuir responsabilidad.
¿El pequeño logger es una estrategia lista para operar?
Es un ejemplo diagnóstico independiente con salida en OnInit y OnTick vacío. No calcula señales, envía órdenes ni gestiona posiciones. Compila tu archivo separado y conserva resultado y diario propios; aquí no se afirma haberlo compilado en MT5. No añadas otro OnInit ni reemplaces inicialización existente sin comprender el flujo.
Fuentes y comprobación
- MQL5: Testing Trading Strategies
Leídos objetos gráficos: propiedades con valores cero fuera de modo visual, excepción visual; Print/PrintFormat durante optimización con excepción OnInit. No se adopta publicidad ni se afirma ensayo propio MT5.
- MQL5: OnInit
Leída firma int OnInit, inicialización y códigos de retorno. El ejemplo es un EA diagnóstico separado, no una segunda inicialización para pegar en un programa.
- MQL5: PrintFormat
Leídos registro formateado y correspondencia de tipos, argumentos y especificadores. La excepción OnInit de optimización se consulta en documentación de tester.
- MQL5: Running Program Properties
Leídos MQL_TESTER, MQL_VISUAL_MODE y MQL_OPTIMIZATION como banderas del entorno. Registrarlas no acredita igualdad de historia o parámetros.
Los cálculos utilizan supuestos explícitos. No sustituyen los datos actuales de mercado ni las condiciones de tu proveedor.
