MQL5
MQL5 en el mundo real
El cuaderno de taller de un desarrollador de Expert Advisors que ha desplegado en prop-firm: las trampas que la documentación de MetaQuotes silencia (tick_value vs point en el oro y los índices, retcodes 10014/10016, freeze level) y la gestión del riesgo que sobrevive a una cuenta funded: doble clamp de riesgo+margen, drawdown realizado+flotante, expectancy en R. Código que pasa el OrderSend a la primera, con cualquier bróker.
20 snippets destacados
- Lot sizing por porcentaje de riesgoCalcula el volumen exacto para que un stop-loss alcanzado cueste un importe preciso, mediante SYMBOL_TRADE_TICK_VALUE y SYMBOL_TRADE_TICK_SIZE — funciona en Forex, índices y metales.
- Lot máximo permitido por el margen (OrderCalcMargin)Calcula el volumen máximo financiable con un presupuesto de margen dado. OrderCalcMargin integra el apalancamiento real, el tipo de cálculo del símbolo (Forex, CFD, futuros) y la divisa de margen.
- Valor monetario de un punto para 1 lotConvierte la variación de precio más pequeña a divisa de la cuenta. El rodeo por tick_value/tick_size es obligatorio: en el oro y los índices, el tick no siempre vale 1 punto.
- Lot final: doble clamp de riesgo + margenCombina el sizing por riesgo y el tope de margen en una sola función: el volumen retenido es el más restrictivo de los dos, nunca al revés.
- Trailing stop con paso mínimo (anti-spam)Solo desplaza el SL si la mejora supera un paso mínimo — evita saturar el servidor con modificaciones de un punto en cada tick, causa clásica de baneo de peticiones.
- Respetar SYMBOL_TRADE_STOPS_LEVELAjusta un SL/TP demasiado cercano al precio actual a la distancia mínima impuesta por el broker — sin este control, OrderSend falla con «Invalid stops» (retcode 10016).
- Stop-loss virtual (invisible para el broker)Guarda el nivel de salida en memoria y cierra a mercado cuando se cruza — el SL nunca aparece en el servidor. Reservado para los casos en que el EA corre 24/7 en un VPS.
- Detectar el filling mode soportado (FOK/IOC)Lee la máscara SYMBOL_FILLING_MODE para elegir un tipo de relleno aceptado por el servidor — enviar un modo no soportado es una de las causas más frecuentes de «Unsupported filling mode».
- Detección de cruce de medias (sin repaint)Compara los dos últimos valores CERRADOS de las MA rápida y lenta: un cruce validado al cierre ya no se «descruza», a diferencia de un test sobre la vela en curso.
- Detección de nueva velaCompara el timestamp de apertura de la vela actual con el memorizado: la lógica se ejecuta una sola vez por vela, sea cual sea el flujo de ticks. Versión compatible con multi-símbolo.
- Divisas implicadas en un símbolo (base, profit, margen)Extrae las divisas de un símbolo para un filtrado de noticias pertinente: en los índices y metales, la divisa de profit (a menudo USD) es la única clave aprovechable, ya que la base currency no es una divisa.
- Correlación de Pearson entre dos símbolosCalcula la correlación de los rendimientos (no de los precios brutos, que siempre sobrestiman la correlación) sobre N velas alineadas mediante CopyClose.
- Exposición neta por divisaDescompone cada posición Forex en exposición larga/corta por divisa (base comprada, cotizada vendida) para revelar una concentración oculta — tres trades «distintos» pueden ser una sola apuesta USD.
- Cerrojo atómico entre EAs (SetOnCondition)GlobalVariableSetOnCondition es una operación test-and-set atómica: solo uno de los EAs concurrentes obtiene el cerrojo, los demás fallan limpiamente — el mutex de los pobres en MQL5.
- Regularidad de la curva de equity (R² como criterio)Mide la linealidad de la curva de equity mediante el coeficiente de determinación R² calculado sobre los profits acumulados de los deals — una equity en línea recta vale más que el mismo profit en dientes de sierra.
- Pips vs points: conversión según los digitsEn un broker de 5 digits, 1 pip = 10 points; en 3 digits (JPY), 1 pip = 10 points también, pero en 2/4 digits 1 pip = 1 point. Esta función hace que los inputs «en pips» sean portables en todas partes.
- Redondear un precio al tick size (no NormalizeDouble)En el oro, los índices o los futuros, el paso de cotización (SYMBOL_TRADE_TICK_SIZE) puede valer 0.25 o 0.05: NormalizeDouble no basta, hay que cuantizar el precio al múltiplo del tick.
- Garde-fou de daily drawdown (realizado + flotante)Compara la equity actual (que incluye el flotante) con la equity de inicio del día y corta todo al cruzar el umbral — la métrica exacta que vigilan las prop firms.
- Esperanza matemática del sistema (expectancy en R)Calcula sobre el histórico el win rate, la ganancia media y la pérdida media, y luego la esperanza por trade en divisa Y en múltiplos de R — la cifra única que dice si el sistema merece estar operando.
- Analisis de rachas de ganancias y perdidas (streaks)Recorre el historial para medir la racha ganadora mas larga, la racha perdedora mas larga y la racha en curso, y de ahi deduce una recomendacion de sizing: la base estadistica de un money management que sobrevive.