En esta página
Volver a tutoriales

Referencia MQL5 para MT5: iMA, iRSI, CopyBuffer y OrderSend

Tu chuleta MQL5: tipos de datos, operadores, bucles, arrays, indicadores técnicos, OrderSend, gestión de riesgo, lógica multi-timeframe y filtros de mercado. Basada en la documentación oficial.

📖 28 min read

📝 5,500 words

🏷️ MQL5 & Expert Advisors

Compartir este artículo:

¿Quieres crear una estrategia sin código ahora?

Crea tu cuenta gratis en segundos y empieza de inmediato.


Referencia de Programación MQL5 — Tu Guía Rápida para EAs

Respuesta rápida: MQL5 es el lenguaje para crear EAs en MT5. En la mayoría de sistemas usarás repetidamente manejadores (OnInit/OnTick), handles de indicadores + CopyBuffer, y ejecución de órdenes con OrderSend usando MqlTradeRequest/MqlTradeResult.

Si solo necesitas lo esencial ahora:

  • Flujo de indicadores: crear handle -> comprobar BarsCalculated -> CopyBuffer
  • Flujo de órdenes: construir MqlTradeRequest -> OrderSend -> revisar retcode
  • Datos base: _Symbol, _Point, _Digits, ENUM_TIMEFRAMES

Al desarrollar Asesores Expertos necesitas una referencia rápida y precisa — no un tutorial largo. Esta página resume la documentación oficial de MQL5 en una guía práctica: tipos de datos, operadores, indicadores, OrderSend y conceptos esenciales. Guárdala y salta a la sección que necesites.

Todos los ejemplos siguen la sintaxis de MetaQuotes Language 5 y están listos para adaptar a tus EAs.

Guías relacionadas: Configuración del entorno MQL5 · Construye tu primer EA · EA avanzado: Multi-Timeframe y filtros · EA de scalping en MT5


Tipos de Datos — Lo Que Usarás Cada Día

MQL5 usa tipos similares a C++. Según Tipos de datos MQL5:

TipoUsoEjemplo
intNúmeros enteros (cuentas, períodos)int period = 14;
doublePrecios, volúmenes, valores de indicadoresdouble price = 1.0850;
stringNombres de símbolos, comentariosstring sym = _Symbol;
boolValores verdadero/falsobool canTrade = true;
datetimeMarcas de tiempodatetime t = TimeCurrent();
long, ulongTickets, números mágicosulong ticket = 12345;

Ejemplo — Declaraciones típicas en un EA:

input int      InpPeriod = 14;        // Período RSI
input double   InpLotSize = 0.1;      // Tamaño de lote
input int      InpMagic = 12345;      // Número mágico

double askPrice;
double rsiBuffer[];
int maHandle = INVALID_HANDLE;

Operadores y Bucles — Flujo de Control

Según Operadores MQL5: if, for, while, switch, break, continue.

Ejemplo — Iterar posiciones y cerrar por magic:

for(int i = PositionsTotal() - 1; i >= 0; i--)
{
   ulong ticket = PositionGetTicket(i);
   if(ticket <= 0) continue;
   if(PositionGetInteger(POSITION_MAGIC) != InpMagic) continue;
   // ... lógica de cierre
}

Arrays — Dinámicos y Serie Temporal

Los arrays guardan OHLC, buffers de indicadores y datos personalizados. Usa ArraySetAsSeries(array, true) para que el índice 0 = barra actual.

Ejemplo — Copiar valores de MA con CopyBuffer:

double maBuffer[];
ArraySetAsSeries(maBuffer, true);
int copied = CopyBuffer(maHandle, 0, 0, 3, maBuffer);
if(copied > 0)
   double maNow = maBuffer[0];  // Valor MA en barra actual

Indicadores Técnicos — Handle + CopyBuffer

Según Indicadores Técnicos MQL5: Crea un handle en OnInit(), luego usa CopyBuffer() para leer valores.

iMA — Media Móvil

int iMA(string symbol, ENUM_TIMEFRAMES period, int ma_period, int ma_shift, ENUM_MA_METHOD method, ENUM_APPLIED_PRICE applied_price);

Ejemplo — EMA 20 períodos en Cierre:

maHandle = iMA(_Symbol, PERIOD_CURRENT, 20, 0, MODE_EMA, PRICE_CLOSE);
if(maHandle == INVALID_HANDLE) return(INIT_FAILED);
// En OnTick: CopyBuffer(maHandle, 0, 0, 1, maBuffer);

iRSI — Índice de Fuerza Relativa

int iRSI(string symbol, ENUM_TIMEFRAMES period, int ma_period, ENUM_APPLIED_PRICE applied_price);

Ejemplo — RSI 14 períodos:

rsiHandle = iRSI(_Symbol, PERIOD_CURRENT, 14, PRICE_CLOSE);
// CopyBuffer(rsiHandle, 0, 0, 1, rsiBuffer); — RSI en índice 0

CopyBuffer — Obtener Datos del Indicador

Según CopyBuffer:

int CopyBuffer(int indicator_handle, int buffer_num, int start_pos, int count, double buffer[]);

Devuelve el número de elementos copiados o -1 en error. Posición 0 = barra actual con ArraySetAsSeries(buffer, true).


OrderSend — Ejecutar Operaciones

OrderSend() envía solicitudes de trading. Rellena MqlTradeRequest y recibe el resultado en MqlTradeResult.

Campos clave de MqlTradeRequest:

CampoPropósito
actionTRADE_ACTION_DEAL, TRADE_ACTION_PENDING, etc.
symbolSímbolo de trading
volumeTamaño del lote
pricePrecio de ejecución (Ask para Compra, Bid para Venta)
sl, tpStop Loss, Take Profit
typeORDER_TYPE_BUY, ORDER_TYPE_SELL
deviationDeslizamiento máximo en puntos
magicIdentificador del EA

Ejemplo — Abrir orden de compra a mercado:

MqlTradeRequest request = {};
MqlTradeResult result  = {};

request.action   = TRADE_ACTION_DEAL;
request.symbol   = _Symbol;
request.volume   = 0.1;
request.type     = ORDER_TYPE_BUY;
request.price    = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
request.deviation = 10;
request.magic    = 12345;

if(OrderSend(request, result))
   Print("Orden enviada. Operación: ", result.deal);
else
   Print("OrderSend falló: ", GetLastError());

Orden vs Operación vs Posición

Según Funciones de Trading MQL5:

  • Orden — Instrucción al bróker (mercado o pendiente)
  • Operación (Deal) — Compra/venta ejecutada
  • Posición — Obligación abierta (contratos en cartera)

Usa PositionsTotal(), PositionGetTicket(i), PositionGetDouble(POSITION_VOLUME) para posiciones abiertas. OrdersTotal() y OrderGetTicket(i) para órdenes pendientes.


Timeframes — ENUM_TIMEFRAMES

Según Timeframes del Gráfico:

ConstanteDescripción
PERIOD_M11 minuto
PERIOD_M55 minutos
PERIOD_H11 hora
PERIOD_H44 horas
PERIOD_D11 día
PERIOD_W11 semana
PERIOD_MN11 mes
PERIOD_CURRENTTimeframe del gráfico

Usa PERIOD_CURRENT o 0 en funciones de indicadores para el gráfico actual.


Variables Predefinidas

VariableSignificado
_SymbolSímbolo actual del gráfico
_PointTamaño del punto
_DigitsNúmero de decimales
_PeriodTimeframe actual

Referencia Rápida — Funciones Frecuentes

FunciónPropósito
SymbolInfoDouble(sym, SYMBOL_ASK)Ask actual
SymbolInfoDouble(sym, SYMBOL_BID)Bid actual
NormalizeDouble(price, digits)Redondear precio para orden
OrderCheck(request)Validar antes de OrderSend
BarsCalculated(handle)Comprobar si indicador está listo
IndicatorRelease(handle)Liberar indicador en OnDeinit

Próximos Pasos — Construye tu Primer EA

Usa esta referencia mientras programas. En el siguiente tutorial, Construye tu primer EA, combinarás estos elementos en un EA de cruce de medias móviles con reglas reales de entrada y salida.

Consejo extra: ¿Prefieres un atajo visual? Prueba AlfaTactix Strategy Builder gratis — la misma herramienta sin código que usan traders profesionales para diseñar estrategias de forma visual y exportar MQL5 listo para producción. Añade indicadores (iMA, iRSI, lógica CopyBuffer), reglas de entrada y gestión de riesgo con una interfaz visual — luego genera código limpio que puedes refinar en MetaEditor. Prototipa en minutos, no en horas.

Crea tu estrategia de trading sin código ahora — gratis

Crea tu cuenta y empieza ahora mismo a construir una estrategia sin código. Añade indicadores, filtros y reglas de riesgo, y exporta MQL5 en minutos.

Preguntas Frecuentes

MQL5 (MetaQuotes Language 5) es un lenguaje de programación de alto nivel orientado a objetos para escribir Asesores Expertos, indicadores personalizados y scripts en MetaTrader 5. Se basa en la sintaxis de C++. La referencia oficial está en mql5.com/en/docs.

Una orden es una instrucción al bróker (mercado o pendiente). Una operación (deal) es la ejecución de una compra/venta. Una posición es la obligación resultante — el número de contratos. Una orden puede generar varias operaciones; una posición se crea cuando una operación la abre.

Crea un handle del indicador con iMA(), iRSI(), etc. en OnInit(). Usa CopyBuffer(handle, buffer_num, start_pos, count, array[]) para copiar valores a tu array. Comprueba BarsCalculated(handle) antes de copiar.

MqlTradeRequest contiene los parámetros de la operación (action, symbol, volume, price, sl, tp, etc.). MqlTradeResult recibe la respuesta del servidor (retcode, deal, order). Pasa ambos a OrderSend(request, result).

PERIOD_M1, M5, M15, M30, H1, H4, D1, W1, MN1. Usa PERIOD_CURRENT para el timeframe del gráfico. Pasa 0 o PERIOD_CURRENT a las funciones de indicadores para el símbolo/timeframe actual.

La referencia oficial de MQL5 está en mql5.com/en/docs. En MetaEditor, usa Ayuda — Referencia MQL5 para acceso offline. Cubre todas las funciones, constantes y tipos de datos.

Crea tu estrategia sin código ahora — gratis

Crear cuenta gratis