En este artículo
Al terminar, sabrás…
- Identificar la última barra cerrada del array plano del ejemplo de CopyBuffer.
- Separar disponibilidad, cantidad copiada, índice y marcador vacío.
- Conciliar solicitudes, transacciones y exposición antes de repetir o reiniciar.
Conceptos sin salir del artículo
Prueba histórica de una estrategia (backtesting) Plan de trading Cuenta de demostración Drawdown Stop-loss Recotización (requote)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ó.
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».
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
- 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.
- 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.
- 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.
Comprueba lo aprendido
Aprox. 2 minutos de práctica.
Ver respuesta y explicación
La memoria empieza por el elemento copiado más antiguo. El último índice contiene shift 1 en esta configuración.
Más preguntas
¿Qué distingue un EA de MQL5 de un robot Python?
Un EA usa datos, eventos y funciones de MT5. Python puede utilizar otra API o integrarse con el propio terminal mediante MetaQuotes, así que no siempre es un programa REST o FIX independiente. Compara dependencias, tiempos, respuestas y pruebas reales; ningún lenguaje garantiza mejor estrategia, aprendizaje automático o ejecución.
¿Necesito programar para ejecutar un EA?
No necesariamente para usar un compilado documentado, pero debes revisar parámetros, permisos, registros, límites y recuperación. Tener fuente permite inspección; aprender MQL5 no revela un algoritmo oculto en EX5. Prueba comportamiento en un entorno controlado sin convertir unas semanas de estudio en una garantía de revisión suficiente.
¿Por qué un backtest puede ser bueno y la cuenta perder?
Pueden diferir datos, selección de parámetros, spread, cargos, retraso y ejecución. Buscar y evaluar el mejor resultado sobre la misma historia puede exagerar evidencia, sin garantizar matemáticamente éxito simulado o fracaso real. Conserva variantes y separa desarrollo y evaluación con los mismos contratos y tiempos; una prueba favorable tampoco demuestra persistencia futura.
¿Necesito un VPS para ejecutar un EA?
Depende de continuidad y recorrido de datos y ejecución. Un VPS no garantiza latencia ni precio. Separa Windows VPS y MetaQuotes Virtual Hosting: el botón local AutoTrading no controla una instancia remota migrada. Incluso una estrategia lenta puede necesitar supervisión de riesgo; comprueba funcionamiento, recuperación y condiciones del servicio concreto.
Fuentes y comprobación
- MQL5: BarsCalculated
Conteo de datos calculados o −1 por error, handle existente no acredita disponibilidad inmediata.
- MQL5: Other Constants
EMPTY_VALUE=DBL_MAX, INVALID_HANDLE y posibilidad de marcador vacío propio con PLOT_EMPTY_VALUE.
- MQL5: OnTradeTransaction
Orden y ejecución son transacciones distintas; prioridad de llegada no garantizada. Modelos D1/D2 propios, no registro de un bróker.
- MQL5: OnTick
Evento del símbolo adjunto, cola NewTick y continuidad de cálculos con AutoTrading deshabilitado.
- MQL5: CTrade Buy
Retorno valida estructuras; revisar ResultRetcode y ResultDeal para ejecución.
- MetaTrader 5: Migration a alojamiento virtual
Cláusulas de permisos, sincronización y registros leídas: negociación permitida en plataforma virtual pese a permisos locales; el entorno remoto y su diario deben comprobarse por separado.
- MQL5: OrderSend
Retorno y notas primarios leídos: true no demuestra ejecución; examinar retcode y transacciones, órdenes, ejecuciones y posición antes de repetir.
- MQL5: CopyBuffer
Posición solicitada 0 como barra actual, conteo hacia pasado y orden físico más antiguo al inicio leídos; distinguir start_pos e indexación del array, y datos disponibles entonces de valores finales futuros.
Los cálculos utilizan supuestos explícitos. No sustituyen los datos actuales de mercado ni las condiciones de tu proveedor.
