Un backtest y un programa que funciona responden a preguntas diferentes. Un EA de MQL5 puede evaluar reglas y enviar solicitudes con permisos habilitados, pero evento, permiso, respuesta y ejecución son estados distintos. Diseña un primer proyecto para observarlos y conciliarlos antes de atribuirle un resultado de negociación.

Qué es un Expert Advisor

MetaEditor compila el código fuente MQ5 en ejecutable EX5. Puedes recibir el compilado sin su fuente: aprender MQL5 no revela un algoritmo no divulgado dentro de un producto comprado. Los indicadores calculan o notifican bajo eventos y restricciones distintas; reducirlos a «solo dibujan» también es impreciso.

MQL5 utiliza el entorno de MetaTrader 5. El nombre Expert Advisor también aparece en MT4, con lenguaje e interfaz propios, y otros sistemas automatizados utilizan interfaces diferentes. No des por hecho que conocer una sintaxis valida datos, permisos y recuperación de cualquier robot.

Considera CopyBuffer con start_pos=1 y count=3, que devuelve exactamente tres elementos a un array plano sin AS_SERIES. El orden físico empieza por el elemento copiado más antiguo: índice 0 contiene shift 3=103; índice 1, shift 2=101; índice 2, shift 1=102. Shift 0, la barra actual, no se pidió.

Array plano: primero el valor más antiguo copiadoCopyBuffer exitoso con start_pos=1, count=3 y sin AS_SERIES. Valores ficticios; sin errores o copia parcial.EJEMPLO DE CÁLCULOÍndice 0Shift 3 →103Índice 1Shift 2 →101Índice 2Shift 1 →102Shift 0No pedido
Array plano: primero el valor más antiguo copiado. CopyBuffer exitoso con start_pos=1, count=3 y sin AS_SERIES. Valores ficticios; sin errores o copia parcial.

El umbral>102,5 pasa para 103 antiguo y falla para 102 reciente. Revisar conteo no sustituye revisar orden.

Índice 0
Shift 3 →103 – Más antiguo del conjunto copiado.
Índice 1
Shift 2 →101 – Valor intermedio.
Índice 2
Shift 1 →102 – Última barra cerrada en este caso.
Shift 0
No pedido – No se ha copiado la barra actual.

En esta configuración, la última barra cerrada es 102 en índice 2. Comparar con umbral mayor que 102,5 da verdadero para el antiguo 103 y falso para el reciente 102. Verificar cantidad copiada no verifica selección. Registra inicio pedido, conteo devuelto e indexación; no conviertas índice 2 en una regla universal para arrays con otros ajustes.

Eventos y ciclo de vida

OnInit inicializa recursos. Inicialización no significa que solo vaya a ejecutarse una vez durante toda la vida del proyecto: cambios pueden desinicializar y reinicializar. Comprueba recursos y devuelve estado de fallo si falta configuración requerida. OnDeinit recibe la desinicialización y su motivo; gestiona liberación y estado persistido explícitamente.

OnTick procesa NewTick del símbolo del gráfico adjunto. Si ese evento ya está en cola o procesándose, otro NewTick no se añade a la cola del programa. Un EA puede utilizar otros eventos y no necesita implementar OnTick. Desactivar AutoTrading impide nuevas solicitudes del EA, pero no detiene sus cálculos ni interrumpe el manejador en curso.

OnTimer y OnTradeTransaction pueden ser esenciales: no limites el diseño a tres funciones. En un EA multiactivo, un tick del gráfico no demuestra que todos los demás símbolos tengan datos actuales. Conserva horas originales y zonas antes de presentar registros en Europe/Madrid; la hora local del lector no transforma la hora del servidor.

Solicitar no equivale a ejecutar

OrderSend envía una solicitud. Un retorno true no confirma por sí solo que se ejecutó una operación de mercado: revisa código de respuesta y concilia órdenes, ejecuciones y posiciones. OrderCheck es una comprobación previa, sin garantizar aceptación o ejecución posterior.

En una prueba hipotética pides compra de 0,10 lotes y pierdes certeza sobre la respuesta. Repetir sin conciliar puede producir 0,20 si ambas solicitudes se ejecutan. Ausencia de confirmación local no demuestra ausencia de actuación del servidor. Define qué evidencia permite reintentar y cómo restableces exposición después de reiniciar.

OnTradeTransaction distingue quitar una orden activa de añadir una ejecución a historia y no garantiza prioridad de llegada de notificaciones. Supón ninguna posición inicial y dos compras confirmadas D1=0,04 y D2=0,06 lotes. Un contador defectuoso que vuelve a cero en ORDER_DELETE termina en cero si recibe D1, D2, ORDER_DELETE; termina en 0,10 si recibe ORDER_DELETE, D1, D2. La suma de compras confirmadas es 0,10 en ambos órdenes.

Estado de orden y exposición no son el mismo campo. Un registro real también debe manejar ventas, reversiones, correcciones de historia y modo contable. Como diagnóstico adicional, una copia repetida del registro D1 con el mismo identificador no es otra ejecución: sumar D1, D1, D2 daría 0,14 en vez de 0,10. Conserva identidad y versión y concilia con la fuente; no deduzcas exposición solo del número de mensajes recibidos.

CTrade facilita métodos Buy, Sell y PositionClose. El éxito del método Buy tampoco garantiza éxito de negociación: revisa ResultRetcode y ResultDeal. Distingue el deslizamiento del precio ejecutado de una señal que eligió la barra equivocada o de una solicitud nunca ejecutada.

Probador histórico y evaluación reservada

Strategy Tester permite estudios con ticks generados o registrados por el bróker según modo y disponibilidad. Guarda procedencia, horarios, contrato, costes y periodo real. «Ticks reales» no significa una fuente mundial única de MetaQuotes ni cobertura observada íntegra para cualquier periodo.

Elegir parámetros y evaluar después su mejor resultado sobre la misma historia puede exagerar evidencia. No garantiza matemáticamente una curva atractiva ni una pérdida real, pero exige conservar todas las variantes y reservar evaluación no inspeccionada. Una prueba satisfactoria no establece persistencia futura; repite comparación con contratos, costes y tiempos coherentes.

Cuándo ayuda y cómo delimitar el proyecto

Un EA puede repetir comprobaciones y vigilar símbolos. Doscientas operaciones mensuales, trabajo nocturno o decisiones rápidas son requisitos posibles de diseño, no una ventaja demostrada. Define información, condiciones de entrada, salida, tamaño y prohibición de operar, además del tratamiento de sucesos inusuales.

Un gráfico de una tienda o una encuesta no identificada no estima rendimiento futuro. Construir en vez de comprar o estudiar de tres a seis meses tampoco garantiza una revisión adecuada. Empieza por una tarea acotada y criterios de aceptación para datos ausentes, reinicio, paso de volumen inválido, respuesta incierta y cambios manuales.

Permisos locales, servidor y entorno remoto

El botón AutoTrading local no cierra posiciones. Un Stop Loss ordinario aceptado por servidor puede seguir activo al cerrar el terminal; una salida exclusivamente programada en el EA necesita que el programa funcione y alcance al servidor. Comprueba qué función realiza cada control y no confundas detener solicitudes con neutralizar exposición.

MetaQuotes Virtual Hosting es otro entorno al que se migra la configuración, con negociación automatizada permitida; el botón local no detiene esa instancia remota. Un VPS Windows es un servicio distinto. Elige infraestructura según continuidad y recorrido de ejecución, sin garantía de precio o latencia por su nombre.

Restaura posición actual antes de actuar desde una señal local antigua. En una cuenta netting, estrategias del mismo símbolo comparten una posición neta: un Magic Number no crea capital ni margen separados. Documenta instancias y permisos para no creer que apagaste un programa que continúa funcionando en otro entorno.

Tener handle no significa tener un dato utilizable

BarsCalculated devuelve cantidad calculada o −1 por error; un handle existente no prueba que la barra requerida esté lista. Comprueba luego cantidad real de CopyBuffer, búfer, desplazamiento y validez del dato. No transformes lectura fallida en cero: RSI cero expresa un valor extremo, no «datos pendientes».

Cuatro comprobaciones antes de usar un valorUn handle, datos calculados, cantidad copiada y valor válido son requisitos separados. El modelo necesita un solo dato.EJEMPLO DE CÁLCULOCaso AHandle inválidoCaso BHandle válido; 0copiadosCaso C1 copiado; EMPTY_VALUECaso D1 copiado; valor 45válido
Cuatro comprobaciones antes de usar un valor. Un handle, datos calculados, cantidad copiada y valor válido son requisitos separados. El modelo necesita un solo dato.

Un elemento copiado puede ser vacío. No conviertas indisponibilidad en cero ni evalúes la estrategia hasta comprobar el marcador.

Caso A
Handle inválido – No hay lectura utilizable.
Caso B
Handle válido; 0 copiados – Datos todavía no disponibles.
Caso C
1 copiado; EMPTY_VALUE – Sin señal utilizable aunque DBL_MAX sea finito.
Caso D
1 copiado; valor 45 válido – Puede evaluarse la regla; no es señal de inversión.

El modelo requiere un valor: A, handle inválido, sin lectura; B, handle válido pero cero valores copiados, esperar; C, un valor copiado igual a EMPTY_VALUE, sin señal utilizable; D, un valor válido 45, se puede evaluar la regla. 45 es supuesto de prueba, no recomendación.

EMPTY_VALUE usa por defecto DBL_MAX, que es finito: comprobar únicamente finitud no basta. Indicadores propios pueden definir otro marcador vacío. Revisa su contrato sin rechazar todo cero por sistema. Si un valor es vacío, registra falta de disponibilidad, comprueba búfer y barra y reintenta en el evento pertinente; no inventes una observación cero. La reproducción de API y el modo visual plantean controles distintos.

Tres acciones para un primer EA comprobable

  1. Abre una cuenta demo adecuada y ejecuta un ejemplo documentado en EUR/USD H1, guardando modo, datos, parámetros y diario. El resultado debe permitir localizar equity, drawdown y costes y separar lo que demuestra una simulación de las condiciones de ejecución real.
  2. Escribe entradas, salidas, tamaño y condiciones de no operación y revisa documentación de eventos, CopyBuffer y CTrade. Prueba dato ausente, marcador vacío e índice de barra; el resultado debe acreditar lectura válida y selección correcta antes de evaluar cualquier umbral de estrategia.
  3. Prueba respuesta incierta, reinicio y cambios manuales, conciliando órdenes, ejecuciones y posición antes de repetir solicitudes. Registra instancias local y remota y su control; el resultado debe mostrar exposición real y recuperación, sin considerar un mes demo o un VPS como autorización automática para arriesgar capital.