En este artículo
Al terminar, sabrás…
- Separar disponibilidad de WebRequest de calidad del archivo histórico.
- Elegir la versión conocida al decidir sin anticipar revisiones.
- Distinguir null, cero y política explícita de último valor conocido.
Conceptos sin salir del artículo
Prueba histórica de una estrategia (backtesting) Expert Advisor (EA) Calendario económicoUn asesor puede descargar datos de una API en demo y no recibir respuestas equivalentes en el tester. Antes de culpar al servidor, comprueba si la función está disponible en ese entorno. Descargar el valor actual y asignarlo a decisiones pasadas crea otra prueba, aunque las cotizaciones no cambien.
WebRequest no es un archivo histórico
La documentación MQL5 indica que WebRequest no puede ejecutarse en Strategy Tester. Añadir el endpoint a las URL permitidas del terminal no elimina esa restricción. Distingue función no disponible, problema de red, autorización fallida y respuesta recibida durante operación ordinaria del EA.
Si falta una observación externa, no sustituyas el fallo por cero: cero puede ser un valor legítimo, mientras ausencia significa que no tienes esa entrada. Tampoco basta cambiar HTTP por lectura de archivo si este contiene revisiones que aún no existían al decidir. Define observación, versión, valor y disponibilidad antes de unir señal y descarga.
Dos adaptadores, un significado común
El adaptador en línea interpreta la respuesta del proveedor. El de pruebas selecciona un registro conservado disponible entonces. Ambos deben entregar a la lógica una categoría clara: valor válido, indisponibilidad explícita o error. Esta organización propuesta separa datos, decisiones y ejecución; no constituye un robot completo ni garantiza compatibilidad con cualquier API.
Conserva respuestas originales aparte de registros preparados para test. Registra fuente, versión de esquema, hora de recuperación y evidencia de disponibilidad. El periodo que describe una observación no es la hora en que se conoció. Si solo tienes fecha de vintage, no inventes una hora precisa: una tabla diaria no acredita disponibilidad dentro de ese día.
FRED distingue información sobre el pasado disponible hoy de información conocida en un periodo histórico. Es un ejemplo de datos versionados, no API universal de forex. Su fecha de vintage tampoco aporta automáticamente hora UTC de publicación. Comprueba la cronología del proveedor antes de construir entradas intradía.
FileOpen trabaja dentro de áreas definidas. Durante pruebas, una ruta relativa puede corresponder al directorio del agente y no al terminal ordinario; FILE_COMMON tiene otro alcance. Verifica apertura, lectura y contenido. Un archivo ausente debe producir indisponibilidad reconocida, no una tabla vacía tratada como historia completa.
La versión disponible entonces
Historia ficticia de GDP-model el 1 de octubre de 2026, sin relación con publicaciones reales de PIB ni un endpoint. Todas las horas son UTC. availableAt declara cuándo el modelo puede acceder al registro; no determina momento de ejecución de una orden.
A las 12:00 aparece revisión initial con texto numérico «1.0»; a las 13:00, revised con «1.4»; a las 14:00, unavailable con null. A las 12:30 se elige 1.0; a las 13:30, 1.4; a las 14:30 el registro más reciente elegible es null y no hay valor disponible. No se recupera automáticamente el 1.4 anterior.
La última versión elegible se conserva incluso si es null. No se sustituye por cero ni por una lectura anterior.
- Disponible a las 12:00
- initial: «1.0» – A las 12:30 se selecciona 1.0.
- Disponible a las 13:00
- revised: «1.4» – A las 13:30 se selecciona 1.4.
- Disponible a las 14:00
- unavailable: null – A las 14:30 no hay valor disponible.
- Límite de selección
- availableAt ≤ decisionAt – Declaraciones a comprobar contra la procedencia real.
Una regla ficticia que exige valor superior a 1,2 sería falsa a las 12:30. Introducir la revisión posterior 1,4 invertiría esa decisión. El ejemplo examina disponibilidad informativa, sin medir rentabilidad. La herramienta selecciona un registro; no calcula una señal de trading ni un rendimiento.
Si tu estrategia conserva el último valor conocido cuando falla otro, diseña esa política aparte, con antigüedad máxima y motivo de ausencia definidos previamente. Nuestro null explícito bloquea evaluar una señal nueva. Añadir recuperación retrospectivamente porque mejora el resultado cambia la prueba.
Qué puedes comprobar en el reproductor local
Pega un objeto JSON con version numérica 1 y array events. Cada evento contiene exactamente availableAt, observation, value y revision. Los nombres forman el contrato y se conservan sin traducir. availableAt exige YYYY-MM-DDTHH: mm: ssZ, sin fracciones de segundo ni otros desfases. observation y revision son cadenas, no contadores cronológicos.
value es una cadena numérica con punto decimal o null, sin convertirla a Number. Por eso el ejemplo técnico conserva «1.0» y «1.4», aunque la explicación española use coma. Límites: de uno a doscientos eventos y 64 KiB por JSON; observation y value admiten hasta 128 caracteres, revision hasta 64. Los límites generales son ocho niveles y dos mil valores.
Reproduce la información disponible al decidir
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.
Introduce decisionAt por separado en el mismo formato UTC. Se selecciona, para cada observación, la versión más reciente cuyo availableAt no supere esa hora. Antes del primer registro no existe valor disponible. Dos registros con igual observation y availableAt son ambiguos y bloquean análisis; ordenarlos de otra manera en el texto no resuelve esa contradicción.
Funciona sobre entradas pegadas en tu navegador: no descarga publicaciones, conecta a cuenta, envía entradas ni las guarda persistentemente. Puedes comprobar, restablecer y descargar resultado TXT. No introduzcas credenciales o datos personales. Sin JavaScript quedan explicación y ejemplos, sin enviar el formulario como alternativa.
Límites temporales, cero y trazabilidad
Diagnóstico añadido: 12:59:59 sigue seleccionando 1.0; un segundo después, a las 13:00:00, selecciona 1.4. El límite incluye la hora declarada. Una selección correcta sobre horas inventadas no acredita el archivo real. Si atribuyes a una revisión posterior la fecha inicial, el algoritmo reproduce ese supuesto erróneo.
Otro caso independiente añade a las 15:00 un registro de GDP-model con value «0» y revision cero-valido. A las 15:00 hay un valor disponible igual a cero: no está bloqueado por ausencia. Una regla superior a 1,2 sería falsa, pero «falsa con datos» y «no evaluable por null» son estados distintos. El formulario selecciona el registro; la comparación de señal se explica aquí por separado.
En pruebas paralelas utiliza una copia fija de datos, sin sobrescribirla con respuesta en vivo. Los agentes tienen entornos y archivos propios. Conserva dataset real o hash vinculado, no solo nombre del endpoint, en el manifiesto de ejecución.
La guía de backtesting Python desarrolla uniones temporales. Reproducir datos no reproduce ejecución: Bid, Ask, cargos, cantidad y respuestas de servidor siguen separados. Comienza trazando unas decisiones sin operar antes de atribuir diferencias a la estrategia. Datos válidos y una selección correcta no demuestran ventaja futura.
Tres comprobaciones antes de juzgar resultados
- Define contrato de datos y separa adaptadores en línea y sin conexión, conservando respuestas originales y evidencia temporal. Marca versiones históricas ausentes como límite; nunca asignes la respuesta actual a una fecha anterior para presentarla como conocimiento archivado.
- Traza una observación antes del primer registro, entre publicación y revisión y después de null, además del límite exacto y un cero válido. Compara selección esperada con resultado y resuelve marcas temporales ambiguas antes de ampliar la prueba.
- Confirma qué archivo lee el agente y cómo representa ausencia, conserva su versión con informe y registra entradas seleccionadas. Después comprueba señales, precios, costes y estado de posiciones por separado; un replay correcto no valida automáticamente la totalidad del backtest.
Comprueba lo aprendido
Aprox. 3 minutos de práctica.
Ver respuesta y explicación
Correcto: el registro de las 12:00 es elegible y la revisión no cambia el pasado.
Más preguntas
¿Permitir la URL activa WebRequest en el tester?
No cambia la restricción documentada por MetaQuotes. Comprueba entorno y error antes de atribuirlo al servidor. Para evaluación histórica prepara otro adaptador que lea versiones conservadas con disponibilidad acreditada. Que demo descargue una respuesta no demuestra equivalencia de entornos ni que el archivo sin conexión represente lo conocido en cada instante.
¿Basta una tabla actual con observaciones históricas?
Puede contener revisiones posteriores del pasado. Periodo observado y disponibilidad de una versión son datos diferentes; usar la tabla actual en decisiones antiguas puede anticipar información. Conserva procedencia, metodología y precisión temporal. Una fecha de vintage no autoriza inventar hora UTC. El reproductor no detecta que has atribuido una revisión a una fecha incorrecta.
¿Null significa cero o reutilizar el último valor?
En este modelo es indisponibilidad explícita. Después del registro de las 14:00 no se recupera automáticamente el 1.4 previo ni se sustituye por cero. Reutilización exige otra política con edad y causa definidas antes. Un registro posterior con texto «0» sería válido; señal falsa con datos no equivale a señal bloqueada por ausencia.
¿La selección correcta valida todo el backtest?
Solo comprueba elección bajo registros y marcas suministrados. Verifica procedencia, lectura, reglas y tratamiento de ausencia aparte. Precios ejecutables, costes, cantidades y posiciones son otros componentes. Guarda dataset, informe y entradas seleccionadas; reproducir una observación no acredita todas las ejecuciones, ventaja de estrategia ni rentabilidad futura en condiciones reales.
Fuentes y comprobación
- MQL5: WebRequest
Leídos valor de retorno, URL permitidas, carácter síncrono y prohibición de ejecutar WebRequest en Strategy Tester. Permitir una URL no cambia esa limitación.
- St. Louis Fed: FRED Real-Time Periods
Leída distinción entre información histórica disponible hoy y conocida en un periodo previo, con límites por fecha. No aporta por sí sola hora UTC de publicación intradía.
- MQL5: FileOpen
Leídos sandbox, directorio MQL5/files del agente durante pruebas, FILE_COMMON e INVALID_HANDLE. Una ruta relativa requiere comprobar entorno y resultado de apertura.
- MetaTrader 5: Testing Features
Variables globales propias del agente, intercambio de datos y archivos aislados leídos. Manifestar dependencias e inicialización; igualdad textual no prueba entorno completo.
Los cálculos utilizan supuestos explícitos. No sustituyen los datos actuales de mercado ni las condiciones de tu proveedor.
