En este artículo
Al terminar, sabrás…
- Comparar declaraciones de dos pruebas e identificar evidencia pendiente.
- Conciliar diferencias de comisión y conteo de ejecuciones sin atribuir causa de señal.
- Conservar archivos y primer evento divergente antes de modificar el entorno.
Conceptos sin salir del artículo
Prueba histórica de una estrategia (backtesting) Comisión de negociación Expert Advisor (EA)Dos ejecuciones del mismo robot pueden producir resultados distintos con parámetros visibles iguales. Antes de modificar la estrategia, comprueba código, datos, especificación y modelo de ejecución. Un manifiesto conserva esas condiciones declaradas, pero no sustituye informes e historial. Igual texto no demuestra entornos idénticos.
Conserva ambas pruebas antes de repetir
Guarda informes, operaciones, diarios y parámetros por separado, incluido el resultado menos favorable. Una captura de equity no identifica primer precio ejecutado, número de ejecuciones parciales o inicio efectivo. Debe existir una relación entre condiciones, decisiones y resultado final.
Distingue prueba única, búsqueda de optimización y evaluación posterior. El mismo nombre de archivo puede contener otra compilación o dependencia. Conserva build del terminal, programa y bibliotecas relevantes. Un nombre no identifica el contenido.
Compara inicio solicitado y real. MetaQuotes documenta que una historia previa insuficiente puede desplazar el comienzo. Un mes y un periodo recortado son evaluaciones diferentes. El analizador de cobertura CSV comprueba una exportación; este manifiesto abarca más condiciones.
Trece campos canónicos, sin traducir claves
Pega objetos JSON con los nombres exactos: version, platform, build, codeRevision, inputs, dataSnapshot, symbolSpecification, executionModel, costs, requestedStart, actualStart, end e initialState. Son doce campos de contenido más version. No traduzcas ni añadas campos principales.
version es el número 1 y describe formato, no versión del asesor. Los demás valores principales son cadenas; inputs, costs e initialState también admiten objetos planos. Registra plataforma, compilación y código; parámetros y datos; contrato, ejecución y costes; límites temporales y estado inicial. Los ejemplos conservan cuenta y comisiones USD del modelo original.
dataSnapshot puede contener identificador de archivo o hash calculado aparte. Escribir «data-v1» o llamar hash a codeRevision no verifica archivo. Usa etiquetas técnicas sin contraseñas, códigos de acceso o datos personales. Deja desconocido lo que necesitas establecer, sin inventar identificadores para completar la tarjeta.
Usa fechas con zona explícita y representación coherente, preferiblemente UTC. El comparador trata texto, sin conciliar calendarios o formatos. Añadir Z a una hora de servidor no la convierte a UTC; primero determina la zona y convierte el instante. Tu hora local Europe/Madrid es otra referencia que debe quedar identificada.
Qué hace el comparador y qué queda fuera
Edita los registros de ejemplo y pulsa Comparar. El análisis funciona en el navegador, sin enviar datos, importar archivos o guardar entradas persistentemente. Puedes borrar el resultado o descargarlo. No ejecuta MT5, consulta cuenta ni confirma que las descripciones correspondan a las pruebas reales.
Comparar dos registros de backtest
Escribe números de especificación como cadenas con punto decimal para conservar el contrato de datos; la prosa usa coma española. Campos vacíos u omitidos son desconocidos. Se rechazan claves duplicadas y campos principales no documentados. Límite de cada registro: 64 KiB, ocho niveles y dos mil valores; los números anidados admiten hasta quince cifras significativas, sin enteros grandes inseguros.
La tabla distingue igual, diferente y desconocido. Objetos equivalentes se comparan sin depender del orden de sus claves, pero descripciones diferentes del mismo instante pueden necesitar normalización manual. Sin JavaScript siguen disponibles instrucciones y ejemplos; el formulario no debe enviar tus entradas como alternativa.
Una operación, dos supuestos de comisión
Modelo ficticio: contrato lineal, cuenta USD, una operación cerrada y dos ejecuciones. Resultado de precio diez USD, mismos precios, cantidad y periodo; financiación y otros cargos cero. A declara un USD por ejecución y B, dos. No son tarifas del broker.
A produce 10 − 2 × 1 = 8 USD; B, 10 − 2 × 2 = 6 USD. Dos USD de diferencia se explican por comisión. No prueba señal peor, datos defectuosos o deslizamiento. El comparador debe señalar costs.commissionPerFillUSD, mientras tú verificas informe y demás supuestos.
La comisión explica dos USD de diferencia del modelo, sin certificar las declaraciones ni identificar mejor señal.
- Prueba A
- 10 − 2 × 1 = 8 USD – Un USD por ejecución.
- Prueba B
- 10 − 2 × 2 = 6 USD – Dos USD por ejecución.
- Campo que cambia
- costs.commissionPerFillUSD – Clave técnica sin traducir.
- Diferencia neta
- 2 USD – Supuesto de comisión, no tarifa real.
Ampliación independiente en EUR: resultado de precio veinte, comisión dos por ejecución. Con dos ejecuciones deja dieciséis; con tres, catorce. Sigue siendo una operación cerrada, pero cambia el conteo facturado. La diferencia de dos no nace de dirección o precio. Antes de usarlo, comprueba si tu contrato cobra por ejecución, lote u otra base: el modelo no presume una tarifa real.
Si los registros coinciden, sigue la primera divergencia
Busca primera diferencia de hora, símbolo, lado de precio, cantidad, señal o razón de salida. Incluye decisiones sin entrada. El saldo final puede ocultar una diferencia desde la lectura inicial del indicador. Repite de forma controlada cambiando una condición y conserva el informe anterior.
Revisa dependencias e inicialización. El agente de test tiene variables globales y operaciones de archivo separadas del terminal. Si usas aleatoriedad, conserva cómo se inicializa. No atribuyas todo a caché ni borres el único archivo que permite reproducir la observación. Recompilar cambia lo que intentas comparar: archiva antes la versión previa.
La igualdad del manifiesto inicia una investigación más detallada. Puede faltar una biblioteca o describirse mal el conjunto de datos. No selecciones el mejor resultado ni declares fallo de plataforma al peor sin conciliarlos. Vuelve a evaluar la estrategia tras explicar condiciones, con costes y observaciones separadas del ajuste.
Tres pasos después de comparar
- Conserva informes A y B y completa los trece campos con identificadores vinculados a archivos reales de código, datos y configuración. Donde falte documentación, mantén el dato desconocido; la igualdad del formulario no debe simular evidencia de archivos idénticos.
- Selecciona una diferencia y reproduce su efecto en un ejemplo corto, como número de ejecuciones y comisión aplicada. Cambia una condición cada vez y guarda también pruebas que contradigan la explicación inicial, para no escoger solo el resultado más cómodo.
- Si las declaraciones coinciden, localiza el primer evento distinto en los diarios y conserva sus entradas de cálculo. Añade la dependencia o inicialización que faltaba antes de evaluar rentabilidad; el comparador no certifica historia ni predice resultados futuros.
Comprueba lo aprendido
Aprox. 2 minutos de práctica.
Ver respuesta y explicación
Correcto: A deja ocho y B seis. La diferencia es dos.
Más preguntas
¿Manifiestos iguales certifican reproducibilidad?
No. Comparan las descripciones introducidas, sin inspeccionar todo el entorno. El mismo dataSnapshot no acredita archivos idénticos. Conserva código, parámetros, informes y datos y calcula hashes aparte si necesitas comprobar identidad. Una coincidencia acota preguntas, sin excluir dependencia omitida, descripción incorrecta o estado inicial incompleto.
¿Borro caché o recompilo primero?
Primero archiva ambas pruebas. Cambiar ejecutable, parámetros o historia antes de conservarlos dificulta reproducir la causa. Compara declaraciones y primer evento divergente y después realiza un cambio controlado. Si recompilas, registra revisión y build, reteniendo el ejecutable anterior; no borres la única copia de datos necesaria.
¿Por qué difieren actualStart y requestedStart?
El tester necesita historia anterior para preparar cálculos y puede desplazar inicio si resulta insuficiente. Conserva ambos campos y verifica diario e informe de esa prueba, en lugar de copiar la fecha solicitada. La diferencia indica condiciones distintas hasta aclararla; curvas parecidas no sustituyen comprobar límites y preparación.
¿Elijo la prueba que gana más?
No antes de conciliar condiciones. En el ejemplo, el mayor neto procede solo de comisión menor, sin mejor señal. Datos, periodos o ejecución también pueden cambiarlo. Reproduce la causa y fija supuestos adecuados a la pregunta; después evalúa costes, drawdown y observaciones separadas, sin garantizar rentabilidad futura.
Fuentes y comprobación
- MetaTrader 5: Strategy Testing
Prueba simple, optimización, forward, parámetros, costes y desplazamiento de inicio leídos. Conservar configuración exacta sin garantía de ejecución real o rentabilidad.
- MetaTrader 5: How the Tester Downloads Historical Data
Apartados primarios leídos: historia previa de preparación, inicio real que puede desplazarse y mensaje del diario. Comparar actualStart y requestedStart sin copiar uno al otro.
- 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.
