{ "functions": [ { "name": "open_trade", "_desc": { "description": "Abre una posición de mercado (compra/venta) a precio actual", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Tipo de operación", "enum": [ "buy", "sell" ] }, "symbol": { "type": "string", "description": "Símbolo de trading" }, "lot_size": { "type": "number", "description": "Volumen de la posición", "exclusiveMinimum": 0 }, "price": { "type": "number", "description": "Precio de entrada (Ask para compras, Bid para ventas)", "exclusiveMinimum": 0 }, "sl": { "type": "number", "description": "Stop Loss. 0 = sin SL", "default": 0 }, "tp": { "type": "number", "description": "Take Profit. 0 = sin TP", "default": 0 }, "magic": { "type": "integer", "description": "Número mágico para identificar la operación", "default": 0, "minimum": 0 }, "comment": { "type": "string", "description": "Comentario de la operación", "default": "" } }, "required": [ "type", "symbol", "lot_size", "price" ] } } }, { "name": "open_limit", "_desc": { "description": "Crea una orden límite pendiente (Buy Limit o Sell Limit)", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Tipo de orden límite", "enum": [ "buy", "sell" ] }, "symbol": { "type": "string", "description": "Símbolo de trading" }, "lot_size": { "type": "number", "description": "Volumen de la orden", "exclusiveMinimum": 0 }, "price": { "type": "number", "description": "Precio de activación de la orden", "exclusiveMinimum": 0 }, "sl": { "type": "number", "description": "Stop Loss. 0 = sin SL", "default": 0 }, "tp": { "type": "number", "description": "Take Profit. 0 = sin TP", "default": 0 }, "magic": { "type": "integer", "description": "Número mágico", "default": 0, "minimum": 0 }, "comment": { "type": "string", "description": "Comentario de la orden", "default": "" }, "time_expiration": { "type": "string", "description": "Fecha/hora de expiración de la orden", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'. Solo aplica si type_time != ORDER_TIME_GTC", "default": "0" }, "type_time": { "type": "string", "description": "Tipo de vida de la orden. string::mt5::ENUM_ORDER_TYPE_TIME", "enum": [ "ORDER_TIME_GTC", "ORDER_TIME_DAY", "ORDER_TIME_SPECIFIED", "ORDER_TIME_SPECIFIED_DAY" ], "default": "ORDER_TIME_GTC" } }, "required": [ "type", "symbol", "lot_size", "price" ] } } }, { "name": "open_stop", "_desc": { "description": "Crea una orden stop pendiente (Buy Stop o Sell Stop) para breakouts", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Tipo de orden stop", "enum": [ "buy", "sell" ] }, "symbol": { "type": "string", "description": "Símbolo de trading" }, "lot_size": { "type": "number", "description": "Volumen de la orden", "exclusiveMinimum": 0 }, "price": { "type": "number", "description": "Precio de activación del stop", "exclusiveMinimum": 0 }, "sl": { "type": "number", "description": "Stop Loss. 0 = sin SL", "default": 0 }, "tp": { "type": "number", "description": "Take Profit. 0 = sin TP", "default": 0 }, "magic": { "type": "integer", "description": "Número mágico", "default": 0, "minimum": 0 }, "comment": { "type": "string", "description": "Comentario de la orden", "default": "" }, "time_expiration": { "type": "string", "description": "Fecha/hora de expiración de la orden", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'. Solo aplica si type_time != ORDER_TIME_GTC", "default": "0" }, "type_time": { "type": "string", "description": "Tipo de vida de la orden. string::mt5::ENUM_ORDER_TYPE_TIME", "enum": [ "ORDER_TIME_GTC", "ORDER_TIME_DAY", "ORDER_TIME_SPECIFIED", "ORDER_TIME_SPECIFIED_DAY" ], "default": "ORDER_TIME_GTC" } }, "required": [ "type", "symbol", "lot_size", "price" ] } } }, { "name": "position_list", "_desc": { "description": "Lista todos los tickets de posiciones abiertas en la cuenta", "inputSchema": { "type": "object", "properties": {} } } }, { "name": "position_get", "_desc": { "description": "Obtiene una propiedad específica de una posición abierta", "inputSchema": { "type": "object", "properties": { "ticket": { "type": "integer", "description": "Ticket de la posición", "minimum": 0 }, "property": { "type": "string", "description": "Propiedad a obtener. string::mt5::ENUM_POSITION_PROPERTY_*" }, "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" } }, "required": [ "ticket", "property", "mode" ] } } }, { "name": "position_close", "_desc": { "description": "Cierra posiciones abiertas por símbolo o por ticket, con opción de cierre parcial", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Método de cierre", "enum": [ "by_symbol", "by_ticket" ] }, "value": { "type": [ "string", "integer" ], "description": "Símbolo si type=by_symbol, ticket si type=by_ticket" }, "volume": { "type": "string", "description": "Volumen a cerrar para cierre parcial. Si se omite cierra todo", "$comment": "Pasar como string numérico, ej: '0.01'" }, "deviation": { "type": "integer", "description": "Desviación de precio en puntos", "default": 0, "minimum": 0 } }, "required": [ "type", "value" ] } } }, { "name": "position_modify", "_desc": { "description": "Modifica el Stop Loss y/o Take Profit de una posición abierta", "inputSchema": { "type": "object", "properties": { "ticket": { "type": "integer", "description": "Ticket de la posición", "minimum": 0 }, "sl": { "type": "number", "description": "Nuevo Stop Loss", "$comment": "Si se omite conserva el SL actual" }, "tp": { "type": "number", "description": "Nuevo Take Profit", "$comment": "Si se omite conserva el TP actual" } }, "required": [ "ticket" ] } } }, { "name": "order_list", "_desc": { "description": "Lista todos los tickets de órdenes pendientes (no activadas)", "inputSchema": { "type": "object", "properties": {} } } }, { "name": "order_close", "_desc": { "description": "Cancela una orden pendiente (límite o stop)", "inputSchema": { "type": "object", "properties": { "ticket": { "type": "integer", "description": "Ticket de la orden a cancelar", "minimum": 0 } }, "required": [ "ticket" ] } } }, { "name": "order_modify", "_desc": { "description": "Modifica precio, Stop Loss y/o Take Profit de una orden pendiente", "inputSchema": { "type": "object", "properties": { "ticket": { "type": "integer", "description": "Ticket de la orden", "minimum": 0 }, "new_price": { "type": "number", "description": "Nuevo precio de activación", "$comment": "Si se omite conserva el precio actual" }, "new_sl": { "type": "number", "description": "Nuevo Stop Loss", "$comment": "Si se omite conserva el SL actual" }, "new_tp": { "type": "number", "description": "Nuevo Take Profit", "$comment": "Si se omite conserva el TP actual" }, "new_type_time": { "type": "string", "description": "Nuevo tipo de expiración. string::mt5::ENUM_ORDER_TYPE_TIME", "enum": [ "ORDER_TIME_GTC", "ORDER_TIME_DAY", "ORDER_TIME_SPECIFIED", "ORDER_TIME_SPECIFIED_DAY" ], "$comment": "Si se omite conserva el tipo actual" }, "new_expiration_time": { "type": "string", "description": "Nueva fecha/hora de expiración", "$comment": "Formato: 'YYYY-MM-DD HH:MM:SS'. Solo aplica si new_type_time = ORDER_TIME_SPECIFIED" } }, "required": [ "ticket" ] } } }, { "name": "order_get", "_desc": { "description": "Obtiene una propiedad específica de una orden pendiente", "inputSchema": { "type": "object", "properties": { "ticket": { "type": "integer", "description": "Ticket de la orden", "minimum": 0 }, "property": { "type": "string", "description": "Propiedad a obtener. string::mt5::ENUM_ORDER_PROPERTY_*" }, "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" } }, "required": [ "ticket", "property", "mode" ] } } }, { "name": "calc_order", "_desc" : { "description": "Calculadora unificada MT5: sizing, riesgo, SL y márgenes. Elige un 'mode' y pasa solo los campos relevantes a ese modo (ver detalle abajo). Modos disponibles:\n\n- MCPFUNC_CALCORDER_CALCULATE_SL_WITH_LOT: requiere symbol, entry_price, risk_per_operation, lot_size. Devuelve SL en puntos.\n- MCPFUNC_CALCORDER_MONEY_TO_POINTS: requiere symbol, order_type, entry_price, risk_per_operation. Convierte riesgo $ a puntos y sugiere lote.\n- MCPFUNC_CALCORDER_GET_LOTE_BY_RISK_MONEY_AND_SL_POINTS: requiere symbol, risk_per_operation, sl, max_lot. Devuelve lote óptimo.\n- MCPFUNC_CALCORDER_GET_MAX_LOTE_TO_TRADE: requiere symbol, order_type, entry_price. Devuelve lote máximo según margen.\n- MCPFUNC_CALCORDER_GET_LOTE_BY_ONLY_RISK_MONEY: requiere symbol, order_type, entry_price, risk_per_operation. Devuelve lote por riesgo $ sin SL.\n\nCampos opcionales comunes: deviation (default 0), stop_limit (default 0).", "inputSchema": { "type": "object", "properties": { "mode": { "type": "string", "enum": [ "MCPFUNC_CALCORDER_CALCULATE_SL_WITH_LOT", "MCPFUNC_CALCORDER_MONEY_TO_POINTS", "MCPFUNC_CALCORDER_GET_LOTE_BY_RISK_MONEY_AND_SL_POINTS", "MCPFUNC_CALCORDER_GET_MAX_LOTE_TO_TRADE", "MCPFUNC_CALCORDER_GET_LOTE_BY_ONLY_RISK_MONEY" ], "description": "Selecciona el submodo de cálculo. Determina qué otros campos son requeridos." }, "symbol": { "type": "string", "description": "Símbolo del instrumento, ej. EURUSD. Requerido en todos los modos." }, "order_type": { "type": "string", "description": "Tipo de orden string::ENUM_ORDER_TYPE Requerido en: MONEY_TO_POINTS, GET_MAX_LOTE_TO_TRADE, GET_LOTE_BY_ONLY_RISK_MONEY.", "enum" : [ "ORDER_TYPE_BUY", "ORDER_TYPE_SELL", "ORDER_TYPE_BUY_LIMIT", "ORDER_TYPE_SELL_LIMIT", "ORDER_TYPE_BUY_STOP", "ORDER_TYPE_SELL_STOP", "ORDER_TYPE_BUY_STOP_LIMIT", "ORDER_TYPE_SELL_STOP_LIMIT" ] }, "entry_price": { "type": "number", "description": "Precio de entrada. Requerido en: CALCULATE_SL_WITH_LOT, MONEY_TO_POINTS, GET_MAX_LOTE_TO_TRADE, GET_LOTE_BY_ONLY_RISK_MONEY." }, "risk_per_operation": { "type": "number", "description": "Riesgo en dinero ($). Requerido en: CALCULATE_SL_WITH_LOT, MONEY_TO_POINTS, GET_LOTE_BY_RISK_MONEY_AND_SL_POINTS, GET_LOTE_BY_ONLY_RISK_MONEY." }, "lot_size": { "type": "number", "description": "Tamaño de lote fijo. Requerido solo en: CALCULATE_SL_WITH_LOT." }, "sl": { "type": "integer", "minimum": 0, "description": "Stop loss en puntos. Requerido solo en: GET_LOTE_BY_RISK_MONEY_AND_SL_POINTS." }, "max_lot": { "type": "number", "description": "Lote máximo permitido. Requerido solo en: GET_LOTE_BY_RISK_MONEY_AND_SL_POINTS." }, "deviation": { "type": "integer", "default": 0, "description": "Desviación en puntos. Opcional, aplica a varios modos." }, "stop_limit": { "type": "integer", "default": 0, "description": "Stop limit. Opcional, aplica a varios modos." } }, "required": ["mode", "symbol"] } } }, { "name": "history_deal_list", "_desc": { "description": "Lista tickets de operaciones completadas dentro de un rango de fechas", "inputSchema": { "type": "object", "properties": { "start_date_select": { "type": "string", "description": "Fecha inicio del rango", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'" }, "end_date_select": { "type": "string", "description": "Fecha fin del rango", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'" } }, "required": [ "start_date_select", "end_date_select" ] } } }, { "name": "history_deal_get", "_desc": { "description": "Obtiene una propiedad específica de una operación completada", "inputSchema": { "type": "object", "properties": { "ticket": { "type": "integer", "description": "Ticket de la operación", "minimum": 0 }, "property": { "type": "string", "description": "Propiedad a obtener. string::mt5::ENUM_DEAL_PROPERTY_*" }, "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" } }, "required": [ "ticket", "property", "mode" ] } } }, { "name": "copy_data", "_desc": { "description": "Obtiene datos OHLC/Time/Volume de velas (índice 0 = vela más reciente)", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "timeframe": { "type": "string", "description": "Timeframe de las velas. string::mt5::ENUM_TIMEFRAMES" }, "start": { "type": "integer", "description": "Índice de inicio (0 = vela más reciente)", "minimum": 0 }, "count": { "type": "integer", "description": "Número de velas a obtener", "minimum": 1 }, "mode": { "type": "string", "description": "Tipo de dato a obtener. string::ENUM_MCPFUNC_COPY_DATA", "enum": [ "MCPFUNC_COPY_DATA_CLOSE", "MCPFUNC_COPY_DATA_OPEN", "MCPFUNC_COPY_DATA_HIGH", "MCPFUNC_COPY_DATA_LOW", "MCPFUNC_COPY_DATA_TICK_VOLUME", "MCPFUNC_COPY_DATA_REAL_VOLUME", "MCPFUNC_COPY_DATA_TIME", "MCPFUNC_COPY_DATA_SPREAD" ] } }, "required": [ "symbol", "timeframe", "start", "count", "mode" ] } } }, { "name": "copy_ticks", "_desc": { "description": "Obtiene ticks recientes (Bid/Ask/Last) de un símbolo", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "from": { "type": "string", "description": "Timestamp de inicio en milisegundos Unix", "$comment": "Opcional. Si se omite obtiene los ticks más recientes" }, "count": { "type": "integer", "description": "Número de ticks a obtener", "minimum": 1 }, "flags": { "type": "integer", "description": "Filtro de ticks. int::mt5::ENUM_COPY_TICKS", "$comment": "3 = ALL, 1 = INFO (bid/ask), 2 = TRADE (last/volume). Opcional" } }, "required": [ "symbol", "count" ] } } }, { "name": "i_bar_shift", "_desc": { "description": "Obtiene el índice (shift) de la vela correspondiente a un datetime específico", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "timeframe": { "type": "string", "description": "Timeframe. string::mt5::ENUM_TIMEFRAMES" }, "time": { "type": "string", "description": "Datetime buscado", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'" }, "exact": { "type": "boolean", "description": "Si true requiere coincidencia exacta de tiempo", "default": false } }, "required": [ "symbol", "timeframe", "time" ] } } }, { "name": "symbol_info", "_desc": { "description": "Obtiene una propiedad específica de un símbolo de trading", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "property": { "type": "string", "description": "Propiedad a obtener. string::mt5::ENUM_SYMBOL_INFO_*" }, "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" } }, "required": [ "symbol", "property", "mode" ] } } }, { "name": "symbol_info_session", "_desc": { "description": "Obtiene el horario de sesión (trading o quote) para un símbolo y día de la semana", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "day_of_week": { "type": "string", "description": "Día de la semana. string::mt5::ENUM_DAY_OF_WEEK", "enum": [ "SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY" ] }, "session_index": { "type": "integer", "description": "Índice de sesión del día (0 = primera sesión)", "minimum": 0 }, "mode": { "type": "integer", "description": "Tipo de sesión", "enum": [ 0, 1 ], "$comment": "0 = trading session, 1 = quote session" } }, "required": [ "symbol", "day_of_week", "session_index", "mode" ] } } }, { "name": "symbol_select", "_desc": { "description": "Agrega o remueve un símbolo del Market Watch", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "select": { "type": "boolean", "description": "true = agregar al Market Watch, false = remover" } }, "required": [ "symbol", "select" ] } } }, { "name": "symbols_total", "_desc": { "description": "Obtiene la cantidad total de símbolos disponibles o en Market Watch", "inputSchema": { "type": "object", "properties": { "only_selected_in_market_watch": { "type": "boolean", "description": "Si true cuenta solo los símbolos visibles en Market Watch", "default": false } } } } }, { "name": "object_create", "_desc": { "description": "Crea un objeto gráfico en el gráfico (líneas, rectángulos, etiquetas, flechas, etc.)", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "object_name": { "type": "string", "description": "Nombre único del objeto" }, "object_type": { "type": "string", "description": "Tipo de objeto. string::mt5::ENUM_OBJECT" }, "sub_window": { "type": "integer", "description": "Subventana del gráfico (0 = principal, 1+ = subventana de indicador)", "default": 0 }, "mode": { "type": "integer", "description": "Número de puntos de coordenadas que requiere el objeto", "enum": [ 0, 1, 2, 3 ], "$comment": "0 = 3 puntos (time+price x3), 1 = 2 puntos, 2 = 1 punto, 3 = sin coordenadas" }, "time1": { "type": "string", "description": "Datetime del punto 1. Formato MT5: 'YYYY.MM.DD HH:MM'", "default": "" }, "price1": { "type": "number", "description": "Precio del punto 1", "default": 0 }, "time2": { "type": "string", "description": "Datetime del punto 2", "default": "" }, "price2": { "type": "number", "description": "Precio del punto 2", "default": 0 }, "time3": { "type": "string", "description": "Datetime del punto 3", "default": "" }, "price3": { "type": "number", "description": "Precio del punto 3", "default": 0 } }, "required": [ "object_name", "object_type", "mode" ] } } }, { "name": "object_delete", "_desc": { "description": "Elimina un objeto gráfico del gráfico", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo", "$comment": "Si falla con integer (pérdida de precisión en IDs largos), reintenta pasando el valor como string", "default": 0 }, "object_name": { "type": "string", "description": "Nombre del objeto a eliminar" } }, "required": [ "object_name" ] } } }, { "name": "object_set_get", "_desc": { "description": "GET u SET de una propiedad (entera|double|string) de un objeto gráfico. GET si se omite value, SET si se incluye", "inputSchema": { "type": "object", "properties": { "mode": { "description": "Modo para GET o SET de propiedades de un objeto, 0=Double|1=Integer|2=String", "type": "integer", "enum": [ 0, 1, 2 ] }, "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "object_name": { "type": "string", "description": "Nombre del objeto" }, "property": { "type": "string", "description": "Propiedad a leer/escribir. string::mt5::ENUM_OBJECT_PROPERTY_*", "$comment": "* Hace referencia a INTEGER|DOUBLE|STRING.. " }, "prop_modifier": { "type": "integer", "description": "Modificador de propiedad (Dependiendo de la propiedad sera puntos de anclaje, niveles, etc..)", "default": 0 }, "value": { "type": "string", "description": "Valor a establecer (solo para SET), solo se peude pasar numeros | strings | reales, si usas booleanos pase numeros", "$comment": "Si se omite la función opera en modo GET, time va en modo UNIX como integer" } }, "required": [ "mode", "object_name", "property" ] } } }, { "name": "object_list", "_desc": { "description": "Lista los nombres de objetos gráficos, con filtro opcional por tipo y subventana", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "sub_window": { "type": "integer", "description": "Subventana a filtrar. -1 = todas", "default": -1 }, "object_type": { "type": "string", "description": "Tipo de objeto a filtrar. string::mt5::ENUM_OBJECT", "$comment": "Opcional. Si se omite retorna objetos de todos los tipos" } }, "required": [] } } }, { "name": "chart_list", "_desc": { "description": "Lista los IDs de todos los gráficos abiertos en el terminal", "inputSchema": { "type": "object", "properties": {} } } }, { "name": "chart_open", "_desc": { "description": "Abre una nueva ventana de gráfico para un símbolo y timeframe", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "timeframe": { "type": "string", "description": "Timeframe del gráfico. string::mt5::ENUM_TIMEFRAMES" } }, "required": [ "symbol", "timeframe" ] } } }, { "name": "chart_close", "_desc": { "description": "Cierra una ventana de gráfico por su ID", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico a cerrar" } }, "required": [ "chart_id" ] } } }, { "name": "chart_get_set", "_desc": { "description": "GET u SET de una propiedad del gráfico. GET si se omite value, SET si se incluye", "inputSchema": { "type": "object", "properties": { "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" }, "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "property": { "type": "string", "description": "Propiedad a leer/escribir. string::mt5::ENUM_CHART_PROPERTY_*", "$comment" : "Solo se puede pasar numeros | strings | reales, si usas booleanos pase numeros 1 o 0" }, "sub_window": { "type": "integer", "description": "Subventana (solo para GET)", "default": 0, "minimum": 0 }, "value": { "type": "string", "description": "Valor a establecer (solo para SET)", "$comment": "Si se omite la función opera en modo GET" } }, "required": [ "chart_id", "property", "mode" ] } } }, { "name": "chart_navigate", "_desc": { "description": "Desplaza el scroll del gráfico a una posición relativa o absoluta", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "loacation": { "type": "string", "description": "Posición de referencia para la navegación. string::mt5::ENUM_CHART_POSITION", "enum": [ "CHART_BEGIN", "CHART_CURRENT_POS", "CHART_END" ] }, "bars_to_navigate": { "type": "integer", "description": "Número de barras a desplazar desde la posición de referencia", "default": 0 } }, "required": [ "chart_id", "loacation" ] } } }, { "name": "chart_indicator", "_desc": { "description": "Gestiona indicadores visibles en un gráfico (total, nombre, agregar, eliminar)", "inputSchema": { "type": "object", "properties": { "mode": { "type": "string", "description": "Acción a realizar. string::ENUM_MCPFUNC_CHARTIND_DEF", "enum": [ "MCPFUNC_CHARTIND_TOTAL", "MCPFUNC_CHARTIND_SHORT_NAME", "MCPFUNC_CHARTIND_ADD", "MCPFUNC_CHARTIND_DELETE" ], "$comment": "TOTAL: cuenta indicadores en subventana. SHORT_NAME: nombre por índice. ADD: agrega handle al gráfico. DELETE: elimina por short name" }, "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "sub_window": { "type": "integer", "description": "Subventana del gráfico (0 = principal)", "default": 0 }, "indicator_handle": { "type": "integer", "description": "Handle del indicador a agregar", "$comment": "Requerido para MCPFUNC_CHARTIND_ADD" }, "indicator_shortname": { "type": "string", "description": "Short name del indicador a eliminar", "$comment": "Requerido para MCPFUNC_CHARTIND_DELETE" }, "index": { "type": "integer", "description": "Índice del indicador en la subventana", "$comment": "Requerido para MCPFUNC_CHARTIND_SHORT_NAME" } }, "required": [ "mode", "sub_window", "chart_id" ] } } }, { "name": "chart_redraw", "_desc": { "description": "Fuerza el redibujo del gráfico actualizando todos los objetos y datos", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" } }, "required": [] } } }, { "name": "chart_get_symbol_or_period", "_desc": { "description": "Obtiene el símbolo o el timeframe actual de un gráfico", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico. 0 = gráfico activo" }, "mode": { "type": "integer", "description": "Dato a obtener", "enum": [ 0, 1 ], "$comment": "0 = timeframe (retorna string ENUM_TIMEFRAMES), 1 = símbolo (retorna string)" } }, "required": [ "chart_id", "mode" ] } } }, { "name": "chart_screenshot", "_desc": { "description": "Captura el gráfico como imagen PNG", "inputSchema": { "type": "object", "properties": { "chart_id": { "type": [ "string" ], "description": "ID del gráfico" }, "file_name": { "type": "string", "description": "Nombre del archivo PNG a guardar" }, "as_image_file": { "type": "boolean", "description": "false = guarda en disco y retorna full_path, true = retorna imagen en base64" }, "width": { "type": "integer", "description": "Ancho en píxeles. Por defecto usa el ancho actual del gráfico", "minimum": 0 }, "height": { "type": "integer", "description": "Alto en píxeles. Por defecto usa el alto actual del gráfico", "minimum": 0 }, "common_flag": { "type": "boolean", "description": "Si true guarda en la carpeta Common del terminal antes de retornar el path", "default": true, "$comment": "Solo aplica cuando as_image_file = false" } }, "required": [ "chart_id", "file_name", "as_image_file" ] } } }, { "name": "indicator_manage", "_desc": { "description": "Gestiona el ciclo de vida de indicadores MT5: crear, registrar, consultar, eliminar", "inputSchema": { "type": "object", "properties": { "mode": { "type": "string", "description": "Acción a realizar. string::ENUM_MCPFUNC_IND_ACTION", "enum": [ "MCPFUNC_IND_ACTION_CREATE", "MCPFUNC_IND_ACTION_TOTAL", "MCPFUNC_IND_ACTION_GET_HANDLES_NAMES", "MCPFUNC_IND_ACTION_REMOVE", "MCPFUNC_IND_ACTION_GET_HANDLE_BY_NAME", "MCPFUNC_IND_ACTION_GET_PARAMETERS", "MCPFUNC_IND_ACTION_ADD", "MCPFUNC_IND_ACTION_COPYBUFFER" ], "$comment": "CREATE: crea y registra. TOTAL: cantidad registrados. GET_HANDLES_NAMES: lista alias+handle. REMOVE: libera y elimina del dict. GET_HANDLE_BY_NAME: retorna handle. GET_PARAMETERS: retorna MqlParam[]. ADD: registra handle externo, COPYBUFFER: Copia el buffer de un indicador en un rango start | count de un indicador almacenado, nota que al usar esta funcion el array que se le da esta en serie por lo que start=0 es el valor mas reciente" }, "indicator_alias_name": { "type": "string", "description": "Alias único para identificar el indicador en el diccionario interno", "$comment": "Requerido en modos CREATE, REMOVE, GET_HANDLE_BY_NAME, GET_PARAMETERS, ADD" }, "ind_type": { "type": "string", "description": "Tipo de indicador MT5. string::mt5::ENUM_INDICATOR", "$comment": "Requerido en CREATE y ADD. Para indicadores custom usar IND_CUSTOM; el primer param debe ser la ruta relativa a la carpeta Indicators\\" }, "symbol": { "type": "string", "description": "Símbolo sobre el que se calcula el indicador", "$comment": "Opcional en CREATE. Por defecto usa el símbolo del gráfico activo" }, "timeframe": { "type": "string", "description": "Timeframe del indicador. string::mt5::ENUM_TIMEFRAMES", "$comment": "Opcional en CREATE. Por defecto usa el period del gráfico activo" }, "params": { "type": "array", "description": "Parámetros del indicador en orden posicional", "$comment": "Requerido en CREATE. Array de objetos {data_type, value}", "items": { "type": "object", "properties": { "data_type": { "type": "string", "description": "Tipo de dato del parámetro. string::mt5::ENUM_DATATYPE", "enum": [ "TYPE_BOOL", "TYPE_CHAR", "TYPE_UCHAR", "TYPE_SHORT", "TYPE_USHORT", "TYPE_COLOR", "TYPE_INT", "TYPE_UINT", "TYPE_DATETIME", "TYPE_LONG", "TYPE_ULONG", "TYPE_FLOAT", "TYPE_DOUBLE", "TYPE_STRING" ] }, "value": { "type": "string", "description": "Valor del parámetro" } }, "required": [ "data_type", "value" ] } }, "indicator_handle": { "type": "integer", "description": "Handle externo a registrar", "$comment": "Requerido en modo ADD" }, "forze_add": { "type": "boolean", "description": "Si true sobreescribe el alias si ya existe en el diccionario", "default": false, "$comment": "Solo aplica en modo ADD" }, "start_pos":{ "type" : "integer", "description" : "Posicion de inicio para empezar a copiar datos del buffer", "$comment" : "Solo aplica en modo COPY_BUFFER" }, "buffer_num":{ "type" : "integer", "description" : "Numero del buffer del indicador", "$comment" : "Solo aplica en modo COPY_BUFFER" }, "count":{ "type" : "integer", "description" : "Numero a elementos a copiar del indicador", "$comment" : "Solo aplica en modo COPY_BUFFER" } }, "required": [ "mode" ] } } }, { "name": "compile_mql5", "_desc": { "description": "Compila un archivo fuente MQL5 (.mq5) a bytecode (.ex5)", "inputSchema": { "type": "object", "properties": { "full_path_code": { "type": "string", "description": "Ruta absoluta al archivo .mq5" }, "instruction": { "type": "string", "description": "Set de instrucciones CPU para compilar", "enum": [ "avx", "avx2", "avx512" ], "$comment": "Opcional. Si se omite usa x64 por defecto" }, "optimize": { "type": "boolean", "description": "Habilitar optimizaciones del compilador", "default": false }, "timeout_ms": { "type": "integer", "description": "Timeout de compilación en milisegundos", "default": 60000, "minimum": 0 } }, "required": [ "full_path_code" ] } } }, { "name": "run_mt5_tester", "_desc": { "description": "Lanza una instruccion al EA Runner.ex5 para que este ejecute el Strategy Tester de MT5 con los parametros pasados.. La funcion es asincrona, solo lanza el comando asi que una vez lanzado puede intentar obtener logs de Experts para ver que imprime el EA Runner, y cuando termine el backtest peude consultar tester reports para obtener resultados del ultimo single backtest", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo de trading" }, "set_file_name": { "type": "string", "description": "Nombre del archivo .set con los parámetros del EA, aquí especificar ruta completa con C: incluido", "default": "", "$comment": "Por defecto no se usa ningún setfilename (se usan los parámetros default del bot). Si se quiere optimizar, este .set debe contener al menos un parámetro marcado con flag 'Y' y rango start||step||stop válido, o el Tester fallará con 'no optimized parameter selected'." }, "expert_path": { "type": "string", "description": "Nombre o ruta relativa del EA compilado, SIN incluir el prefijo de carpeta 'Experts\\\\'. La ruta es relativa al contenido de MQL5\\\\Experts\\\\, pero ese prefijo no debe escribirse.", "$comment": "IMPORTANTE: NO incluir 'Experts\\\\' al inicio. Ejemplo correcto: 'RSI_Test_EA.ex5'. Si el EA está en un subfolder dentro de Experts, incluir solo el subfolder sin el prefijo Experts\\\\, ejemplo: 'Advisors\\\\MyBot.ex5'. Incluir 'Experts\\\\' al inicio causa que el Tester ignore el parámetro y use la última configuración manual del panel en lugar del EA solicitado." }, "start_date": { "type": "string", "description": "Fecha de inicio del backtest", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'" }, "end_date": { "type": "string", "description": "Fecha de fin del backtest", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'" }, "timeframe": { "type": "string", "description": "Timeframe del backtest. string::mt5::ENUM_TIMEFRAMES, ejemplo PERIOD_M1, PERIOD_M2 ....... PERIOD_MN1 soporta todo el ENUM completo" }, "leverage": { "type": "integer", "description": "Apalancamiento", "default": 0, "minimum": 0 }, "visual_mode": { "type": "boolean", "description": "Mostrar animación visual del backtest", "default": false }, "modelado": { "type": "string", "description": "Modo de modelado de ticks", "enum": [ "MTTESTER_MODELADO_EVERY_TICK", "MTTESTER_MODELADO_OCHLM1", "MTTESTER_MODELADO_ONLY_OPEN", "MTTESTER_MODELADO_REAL_TICK" ] }, "file_in_common": { "type": "boolean", "description": "Guardar resultados en la carpeta Common del terminal", "default": false }, "data_file_name": { "type": "string", "default": "tester_instruction.bin", "description": "Nombre base del archivo BIN donde se escribirán los parámetros, para luego enviarlos al bot Runner.ex5 que corre el backtest", "$comment": "En caso se omita se usa el nombre de un archivo genérico" }, "opt_mode": { "type": "string", "default": "MTTESTER_OPTMIZATION_NONE", "description": "Modo de optimización del strategy tester", "enum": [ "MTTESTER_OPTMIZATION_NONE", "MTTESTER_OPTIMIZAITON_SLOW", "MTTESTER_OPTIMIZACION_AG_FAST", "MTTESTER_OPTIMIZAION_ALL_MARKET_WATH" ], "$comment": "Si se usa un valor distinto de MTTESTER_OPTMIZATION_NONE, se requiere set_file_name con al menos un parámetro marcado para optimizar (flag 'Y'), o fallará con 'no optimized parameter selected'." }, "optimization_criterion": { "type": "string", "default": "MTTESTER_OPTCRIT_BALANCE_MAX", "description": "En caso MT5 optimice, con qué criterio lo hace", "enum": [ "MTTESTER_OPTCRIT_BALANCE_MAX", "MTTESTER_OPTCRIT_PROFIT_FACTOR_MAX", "MTTESTER_OPTCRIT_EXPECTED_PAYOFF_MAX", "MTTESTER_OPTCRIT_DRAWDOWN_MIN", "MTTESTER_OPTCRIT_RECOVERY_FACTOR_MAX", "MTTESTER_OPTCRIT_SHARPE_RATIO_MAX", "MTTESTER_OPTCRIT_CUSTOM_MAX", "MTTESTER_OPTCRIT_COMPLEX_CRITERION_MAX" ], "$comment": "Solo aplica cuando opt_mode no es MTTESTER_OPTMIZATION_NONE." }, "forward_mode": { "type": "string", "default": "MTTESTER_FORWARD_NONE", "description": "Modo de forward testing (separa el rango en sección in-sample / out-of-sample)", "enum": [ "MTTESTER_FORWARD_NONE", "MTTESTER_FORWARD_HALF", "MTTESTER_FORWARD_THIRD", "MTTESTER_FORWARD_QUARTER", "MTTESTER_FORWARD_CUSTOM" ], "$comment": "Si se usa MTTESTER_FORWARD_CUSTOM, debe especificarse también 'forward_date' con la fecha exacta de corte." }, "forward_date": { "type": "string", "description": "Fecha exacta donde el test cambia a modo out-of-sample (forward). Solo se usa si forward_mode = MTTESTER_FORWARD_CUSTOM.", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS'. Ignorado si forward_mode no es MTTESTER_FORWARD_CUSTOM." }, "delay_ms": { "type": "integer", "default": -2, "minimum": -2, "description": "Delay en ms del tester. -2 = usar delay del mt5 tester | 0 = sin delay | -1 = delay aleatorio | valor > 0 = delay fijo en ms" } }, "required": [ "symbol", "expert_path", "start_date", "end_date", "timeframe" ] } } }, { "name": "run_ea", "_desc": { "description": "Carga y ejecuta un Expert Advisor en tiempo real sobre un gráfico", "inputSchema": { "type": "object", "properties": { "symbol": { "type": "string", "description": "Símbolo del gráfico donde se ejecuta el EA" }, "timeframe": { "type": "string", "description": "Timeframe del gráfico. string::mt5::ENUM_TIMEFRAMES" }, "ms_espera": { "type": "integer", "description": "Milisegundos de espera para sincronizar la carga del EA", "minimum": 100 }, "expert_path": { "type": "string", "description": "Ruta relativa al EA compilado (.ex5) dentro de la carpeta MQL5, debe de incluir el folder Experts\\\\, ejemplo si tu ea se llama MyBot.ex5 y esta en Experts = Experts\\\\MyBot.ex5" }, "run_flags": { "type": "string", "description": "Flags de ejecución separados por pipe", "$comment": "Opcional. Valores posibles: DLL, AutoTrading. Ej: 'DLL|AutoTrading'" }, "params": { "type": "array", "description": "Parámetros del EA en orden posicional", "$comment": "Opcional. Array de objetos {data_type, value}", "items": { "type": "object", "properties": { "data_type": { "type": "string", "description": "Tipo de dato del parámetro. string::mt5::ENUM_DATATYPE", "enum": [ "TYPE_INT", "TYPE_LONG", "TYPE_DOUBLE", "TYPE_STRING", "TYPE_DATETIME", "TYPE_COLOR" ] }, "value": { "type": "string", "description": "Valor del parámetro" } }, "required": [ "data_type", "value" ] } } }, "required": [ "symbol", "timeframe", "ms_espera", "expert_path" ] } } }, { "name": "get_expert_logs", "_desc": { "description": "Obtiene las líneas de log recientes del Expert Advisor", "inputSchema": { "type": "object", "properties": { "start_date": { "type": "string", "description": "Fecha/hora desde la cual filtrar los logs", "$comment": "Formato datetime MT5: 'YYYY.MM.DD HH:MM:SS' o 'YYYY.MM.DD'" }, "byte_start": { "type": "integer", "description": "Byte de incio del archivo de logs.", "default": 3, "minimum": 3 }, "byte_counts": { "type": "integer", "description": "Número de bytes a tomar.", "default": 100, "minimum": 1 } }, "required": [ "start_date" ] } } }, { "name": "get_time", "_desc": { "description": "Obtiene la hora actual del terminal en distintos contextos", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Contexto temporal a obtener. string::ENUM_MCPFUNC_TYPE_TIME", "enum": [ "MCPFUNC_TIME_GMT", "MCPFUNC_TIME_CURRENT", "MCPFUNC_TIME_LOCAL", "MCPFUNC_TIME_SERVER" ], "$comment": "GMT = hora UTC, CURRENT = TimeCurrent del símbolo, LOCAL = hora local de la máquina, SERVER = hora del servidor del broker" } }, "required": [ "type" ] } } }, { "name": "get_err_description", "_desc": { "description": "Retorna la descripción legible de un código de error MT5", "inputSchema": { "type": "object", "properties": { "error_code": { "type": "integer", "description": "Código de error MT5", "minimum": 0 }, "include_code": { "type": "boolean", "description": "Si true incluye el número de código en la respuesta", "default": true } }, "required": [ "error_code" ] } } }, { "name": "account_info", "_desc": { "description": "Obtiene información de la cuenta MT5 (balance, equity, margen, etc.)", "inputSchema": { "type": "object", "properties": { "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" }, "property": { "type": "string", "description": "Propiedad de la cuenta. string::mt5::ENUM_ACCOUNT_INFO_*" } }, "required": [ "mode", "property" ] } } }, { "name": "terminal_info", "_desc": { "description": "Obtiene información del terminal MT5 (conexión, rutas, permisos, etc.)", "inputSchema": { "type": "object", "properties": { "mode": { "type": "integer", "description": "Tipo de dato de la propiedad", "enum": [ 0, 1, 2 ], "$comment": "0 = double, 1 = integer, 2 = string" }, "property": { "type": "string", "description": "Propiedad del terminal. string::mt5::ENUM_TERMINAL_INFO_*" } }, "required": [ "mode", "property" ] } } }, { "name": "run_command", "_desc": { "description": "Ejecuta un comando de PowerShell en el sistema y devuelve el código de salida y la salida estándar (stdout). El nivel de restricción depende de la configuración del EA (deshabilitado, firma requerida, o restringido).", "inputSchema": { "type": "object", "properties": { "run": { "type": "string", "description": "Comando de PowerShell a ejecutar." }, "timeout_segundos": { "type": "integer", "description": "Tiempo máximo en segundos antes de forzar la terminación del proceso. Por defecto 1 segundo si no se especifica.", "default": 1, "minimum": 1 } }, "required": [ "run" ] } } }, { "name": "tester_reports", "_desc": { "description": "Retorna datos del último backtest ejecutado. Usa 'mode' para elegir qué información obtener: resumen estadístico completo, historial de balance, historial de equity, o historial de deals. El cache se mantiene en memoria entre llamadas; usa forze_reload=true para forzar recarga.", "inputSchema": { "type": "object", "properties": { "mode": { "type": "string", "description": "Tipo de reporte a obtener", "enum": [ "MCPFUNC_TESTER_GET_SUMMARY", "MCPFUNC_TESTER_GET_BALANCE_HISTORY", "MCPFUNC_TESTER_GET_EQUITY_HISTORY", "MCPFUNC_TESTER_GET_DEALS_HISTORY" ] }, "forze_reload": { "type": "boolean", "description": "Fuerza la recarga del cache del tester aunque ya esté cargado", "default": false }, "date_start": { "type": ["integer","string"], "description": "Timestamp Unix|mt5::string de inicio para filtrar por fecha. Solo aplica a BALANCE_HISTORY y EQUITY_HISTORY. 0 = sin filtro", "default": 0 }, "date_end": { "type": ["integer","string"], "description": "Timestamp Unix|mt5::string de fin para filtrar por fecha. Solo aplica a BALANCE_HISTORY y EQUITY_HISTORY. 0 = sin filtro", "default": 0 }, "incluyed_deposit": { "type": "boolean", "description": "Si es fase, descuenta el depósito inicial del balance/equity retornado. Solo aplica a BALANCE_HISTORY y EQUITY_HISTORY", "default": true }, "start": { "type": "integer", "description": "Índice de inicio para paginación. Solo aplica a BALANCE_HISTORY, EQUITY_HISTORY y DEALS_HISTORY", "default": 0, "minimum": 0 }, "count": { "type": "integer", "description": "Número máximo de elementos a retornar. Solo aplica a BALANCE_HISTORY, EQUITY_HISTORY y DEALS_HISTORY", "default": 100, "minimum": 1 } } } } } ] }