EA de scalping en MetaTrader 5: lógica, riesgo y un ejemplo simple
Un EA de scalping en MetaTrader 5 es un Asesor Experto que busca muchos beneficios pequeños en timeframes cortos (normalmente M1 o M5), manteniendo posiciones durante minutos en lugar de horas. Como los objetivos son pequeños, el spread, el deslizamiento y la ejecución a nivel de tick importan mucho — por eso tu EA debe filtrar por spread, usar reglas de riesgo estrictas y ser probado con Cada tick en el Probador de Estrategias. Esta guía explica cómo funcionan los EAs de scalping, cómo configurar entrada/salida y riesgo, y ofrece un ejemplo simple de cruce de medias móviles en M1 en MQL5 con referencias a la documentación oficial.
Respuesta rápida: Una configuración práctica de scalping en MT5 combina timeframe M1/M5, filtro de spread, lógica de una sola posición y pruebas en Cada tick antes de pasar a Demo/Live.
Antes de ejecutar un EA de scalping, verifica:
- Umbral de spread realista para tu símbolo y bróker
- Modo de ticks en Cada tick (o ticks reales)
- Stop loss / tamaño de posición con riesgo estricto
- Backtest en Probador y luego validación en Demo antes de Live
Guías relacionadas: Referencia de programación MQL5 · EA avanzado: Multi-Timeframe y filtros · Backtest de EA en MT5 · Crear EA sin programar
¿Qué es un EA de scalping?
El scalping es un estilo de trading que intenta capturar pequeños movimientos de precio muchas veces al día. Un Asesor Experto de scalping automatiza esto: abre y cierra posiciones con rapidez, a menudo en M1 o M5. En MQL5, el evento principal para reaccionar a nuevos precios es OnTick(): "The function is called in EAs when the NewTick event occurs to handle a new quote." Por tanto, los EAs de scalping suelen poner su lógica en OnTick(), comprobando condiciones en cada tick o en cada nueva vela (por ejemplo con una comprobación de "nueva vela" para evitar múltiples entradas por vela).
Características: timeframes y spread
| Aspecto | Elección típica para scalping | Por qué |
|---|---|---|
| Timeframe | M1, M5 | Más velas y señales; decisiones basadas en la acción de precio a corto plazo. |
| Spread | Bajo, filtrado en código | El spread se come los objetivos pequeños; usa SymbolInfoInteger(Symbol(), SYMBOL_SPREAD) o SymbolInfoTick para obtener bid/ask actual y no operar cuando el spread sea demasiado alto. |
| Símbolos | Forex mayor (ej. EURUSD), a veces índices | Mejor liquidez y spread más bajo en sesiones principales. |
MQL5 recomienda usar SymbolInfoTick() cuando necesitas los últimos precios en una sola llamada. Para scalping, eso significa bid/ask actualizados para entradas y comprobaciones de spread.
Entrada, salida y riesgo
- Entrada: A menudo basada en señales rápidas: cruces, rupturas o momentum a corto plazo. Muchos EAs de scalping permiten solo una posición a la vez y esperan la siguiente vela o una salida clara antes de volver a entrar.
- Salida: Objetivo fijo (take profit) y stop loss en pips/puntos; a veces salida por tiempo (cerrar tras N velas o N segundos).
- Riesgo: Usa tamaños de lote pequeños y stop loss estricto. Aplica los principios de gestión de riesgo en EA: limita el riesgo por operación y la exposición total. Al operar con frecuencia, pequeños márgenes pueden anularse por spread y deslizamiento si no se controlan.
Probador: usar cada tick
Al hacer backtest de un EA de scalping, el modo de generación de ticks es crítico. Según MetaTrader 5: "Every tick" se usa para asegurar la mejor precisión de prueba. Las condiciones simuladas son las más realistas en este modo. Para scalping, Cada tick (o Cada tick basado en ticks reales cuando esté disponible) es la opción adecuada; 1 minuto OHLC o Solo precios de apertura pueden dar precios de ejecución y curvas de equity engañosos. Para una guía completa, consulta Backtest de tu EA en el Probador.
Ejemplo: EA simple cruce MA M1
A continuación un EA mínimo tipo scalping en MQL5: usa M1, cruce de medias rápidas/lentas para señales, filtro de spread y una sola posición a la vez. La lógica se ejecuta en nueva vela para evitar múltiples entradas por vela.
//+------------------------------------------------------------------+
//| EA simple cruce MA M1 tipo scalping (ejemplo educativo) |
//+------------------------------------------------------------------+
#property copyright "Ejemplo"
#property version "1.00"
#property strict
input int FastMA = 8;
input int SlowMA = 21;
input int MaxSpreadPoints = 20; // spread máximo en puntos para permitir entrada
input double LotSize = 0.1;
input int Slippage = 10;
input ulong Magic = 12345;
int g_fastHandle, g_slowHandle;
int OnInit() {
g_fastHandle = iMA(_Symbol, PERIOD_M1, FastMA, 0, MODE_EMA, PRICE_CLOSE);
g_slowHandle = iMA(_Symbol, PERIOD_M1, SlowMA, 0, MODE_EMA, PRICE_CLOSE);
if (g_fastHandle == INVALID_HANDLE || g_slowHandle == INVALID_HANDLE) {
Print("Error al crear handles de MA");
return INIT_FAILED;
}
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason) {
if (g_fastHandle != INVALID_HANDLE) IndicatorRelease(g_fastHandle);
if (g_slowHandle != INVALID_HANDLE) IndicatorRelease(g_slowHandle);
}
bool isNewBar() {
static datetime lastBar = 0;
datetime curBar = iTime(_Symbol, PERIOD_M1, 0);
if (curBar != lastBar) { lastBar = curBar; return true; }
return false;
}
void OnTick() {
if (!isNewBar()) return;
// Filtro de spread (oficial: SymbolInfoInteger con SYMBOL_SPREAD)
long spreadPoints = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);
if (spreadPoints > MaxSpreadPoints) return;
if (PositionsTotal() > 0) return; // una posición a la vez
double fast[2], slow[2];
if (CopyBuffer(g_fastHandle, 0, 1, 2, fast) != 2) return;
if (CopyBuffer(g_slowHandle, 0, 1, 2, slow) != 2) return;
bool crossUp = (fast[0] > slow[0] && fast[1] <= slow[1]);
bool crossDown = (fast[0] < slow[0] && fast[1] >= slow[1]);
MqlTradeRequest req = {};
MqlTradeResult res = {};
req.symbol = _Symbol;
req.volume = LotSize;
req.deviation = Slippage;
req.magic = Magic;
req.action = TRADE_ACTION_DEAL;
if (crossUp) {
req.type = ORDER_TYPE_BUY;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
OrderSend(req, res);
} else if (crossDown) {
req.type = ORDER_TYPE_SELL;
req.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
OrderSend(req, res);
}
}
Notas: Es un ejemplo simplificado. En producción añadirías take profit, stop loss y posiblemente filtros multi-timeframe o de sesión. El spread se lee con SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) según la documentación MQL5.
Consejos prácticos
- Broker y símbolo: Elige un broker con spread bajo y estable en los pares que scalpées. Prueba en el Probador de Estrategias con Cada tick.
- Sesiones: El scalping suele rendir mejor en sesiones de alta liquidez (ej. Londres, Nueva York). Puedes añadir filtros de tiempo o sesión a tu EA.
- VPS: Para ejecución 24/7 sin cortes, considera ejecutar el EA en un VPS cerca del servidor del broker.
- Oro (XAUUSD): Si scalpéas oro, ten en cuenta mayor volatilidad y spread; consulta EA para oro (XAUUSD) para consideraciones por símbolo.
Próximos pasos
- Construye tu primer EA si eres nuevo en la estructura y eventos de MQL5.
- Haz backtest de tu EA con Cada tick y forward testing antes de ir en vivo.
- Despliega y mantén tu EA en demo y luego en real con un seguimiento adecuado.
Referencias: MQL5 OnTick, SymbolInfoInteger, SymbolInfoTick, Probador de Estrategias MetaTrader 5.