La historia Resultados Bugs Sweet spot Metodología Descargas
Instituto Quant · Caso de estudio

El robot que entra al azar: ¿puede la gestión del riesgo salvarlo?

Construimos un Expert Advisor de MetaTrader 5 que decide compra o venta lanzando una moneda. Después le cambiamos únicamente la gestión de la posición a lo largo de 7 versiones: sin nada, SL/TP fijos, trailing stops, piramidación. Esto es lo que pasó en 50 backtests sobre BTCUSD — 25 comparativos entre versiones y 25 del examen de sweet spot del ganador — con los 14 bugs que nos encontramos en el camino documentados para que no los repitas.

Versiones del robot
7
v1 → v7
Backtests
50
25 comparativos + 25 de sweet spot
Mejor corrida
1.864,55 USD
v7_n8_p05_f10_comun
Peor corrida
-1.002,93 USD
v7_n5_p10_f10_comun (cuenta quebrada)
Bugs documentados
14
batería de conocimiento

La historia, versión a versión

La entrada nunca cambia (aleatoria); solo cambia cómo se gestiona lo que pasa después.

v1 · Aleatorio puro

src/AgenteExperto_Aleatorio_v1.mq5

Abre compra o venta al azar. Sin stop loss, sin take profit, sin nada.

Es la linea base: un robot sin gestion de riesgo es una moneda al aire con comisiones en contra.

v2 · SL/TP fijos

src/AgenteExperto_Aleatorio_v2_SLTP.mq5

Misma entrada aleatoria + Stop Loss del 1% del saldo y Take Profit del 2% del saldo (riesgo:beneficio 1:2).

Con RB 1:2 solo gana ~34% de las veces y el neto oscila alrededor de cero: la gestion fija controla el dano pero no crea ventaja.

v3 · Trailing ATR

src/AgenteExperto_Aleatorio_v3_ATRTrailing.mq5

El SL persigue al precio a distancia ATR(14) x 2. La salida se vuelve dinamica.

En M15 el trailing corto multiplica los trades (~2.400 en 6 meses) y el spread se come la cuenta: morir por mil cortes.

v4 · Una posicion perpetua

src/AgenteExperto_Aleatorio_v4_UnaPosicion.mq5

Siempre hay UNA posicion abierta (SL 1% del precio, sin TP); al saltar el SL reabre con direccion aleatoria.

Version de laboratorio para estudiar observabilidad y despliegue; corrio en demo y se apago para dar paso a v5-v7.

v5 · 4 variantes de trailing

src/AgenteExperto_Aleatorio_v5_TrailingVariantes.mq5

Un input elige el trailing: ATR, % fijo, minimo/maximo de N velas (Donchian) o escalonado (breakeven + tramos).

Tres variantes pierden; solo el trailing ESCALONADO sobrevive (+142/+179 USD): asegurar por tramos deja correr sin regalar todo al ruido.

v6 · Piramidacion

src/AgenteExperto_Aleatorio_v6_Piramidacion.mq5

Posicion base aleatoria y suma otra igual cada vez que el precio avanza 0.5% a favor (hasta 3 niveles).

Pocos trades (12-27), profit factor alto (2.8-7.1): los ciclos perdedores mueren rapido y los ganadores se apilan.

v7 · Piramidacion configurable

src/AgenteExperto_Aleatorio_v7_PiramidacionNiveles.mq5

Niveles, paso, escalado de lote y trailing comun configurables para barrer configuraciones en el tester.

8 niveles + paso 0.5% + trailing comun gano (+1.446 a +1.865 USD en 3 semillas). El MISMO robot con paso 1.0% QUEBRO la cuenta: en piramidacion, el paso es vida o muerte.

Nota metodológica: v2, v3 y v5 calculan el Stop Loss como % del saldo (riesgo monetario fijo por operación); v4, v6 y v7 lo calculan como % del precio de entrada (distancia proporcional al mercado, necesaria para que cada nivel de una pirámide gestione su propia entrada). El cambio de base es deliberado y por eso se explicita: dentro de cada comparación (variantes de trailing en v5, configuraciones en v7) la base de cálculo no cambia.

Resultados comparativos

BTCUSD · depósito 1.000 USD · 2026.01.01 → 2026.07.07 · M15 · modelo OHLC de 1 minuto · varias semillas por versión (la semilla fija la secuencia de decisiones aleatorias).

Beneficio neto por corrida (USD)

Pasa el cursor sobre una barra para el detalle.
Beneficio Pérdida
CorridaVer.Neto USD ▼PFDD máx %TradesSharpeParámetros
v7_n8_p05_f10_comunv71.864,553,8521,711711,41LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=8 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=11111
v7_n8_p05_f10_comun_s2v71.805,953,4616,981761,34LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=8 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=22222
v7_n8_p05_f10_comun_s3v71.446,22,6542,511890,95LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=8 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=33333
v7_n5_p05_f07_comunv71.196,355,0721,67641,2LoteBase=0.01 FactorLote=0.7 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=5 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=11111
v7_n5_p05_f10_comunv71.196,355,0721,67641,2LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=5 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=11111
v7_n5_p05_f10_solov7767,454,0225,38320,71LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=5 TrailingComun=false NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=11111
v7_n3_p05_f10_comunv7549,685,7610,79240,82LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=3 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=11111
v6_s11111v6538,27,068,88120,24LoteFijo=0.01 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=3 NumeroMagico=2026070806 EsperaReintento=5 SemillaAleatoria=11111
v6_s33333v6462,853,3819,48240,67LoteFijo=0.01 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=3 NumeroMagico=2026070806 EsperaReintento=5 SemillaAleatoria=33333
v6_s22222v6379,962,7821,38270,57LoteFijo=0.01 SLPorc=1.0 PasoPorc=0.5 MaxNiveles=3 NumeroMagico=2026070806 EsperaReintento=5 SemillaAleatoria=22222
v5_esc_s22222v51791,0722,79360,93ModoTrailing=3 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=22222
v5_esc_s11111v5141,831,0511,21.0500,65ModoTrailing=3 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=11111
v2_s11111v240,341,0217,142540,2LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=2.0 NumeroMagico=2026070802 EsperaReintento=5 SemillaAleatoria=11111
v2_s33333v233,741,0218,822790,16LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=2.0 NumeroMagico=2026070802 EsperaReintento=5 SemillaAleatoria=33333
v2_s22222v2-109,180,9529,32325-0,53LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=2.0 NumeroMagico=2026070802 EsperaReintento=5 SemillaAleatoria=22222
v5_maxmin_s11111v5-127,990,9419,891.112-0,64ModoTrailing=2 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=11111
v3_s33333v3-160,350,9632,572.349-0,72LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=2.0 ATRPeriodo=14 ATRMultiplo=2.0 MejoraMinPuntos=100 NumeroMagico=2026070803 EsperaReintento=5 SemillaAleatoria=33333
v5_pct_s11111v5-217,970,9341,841.183-0,97ModoTrailing=1 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=11111
v5_maxmin_s22222v5-226,040,929,881.100-1,19ModoTrailing=2 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=22222
v5_atr_s22222v5-232,50,9443,062.253-0,94ModoTrailing=0 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=22222
v5_atr_s11111v5-329,940,9239,692.294-1,39ModoTrailing=0 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=11111
v3_s11111v3-390,40,9143,162.462-1,69LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=2.0 ATRPeriodo=14 ATRMultiplo=2.0 MejoraMinPuntos=100 NumeroMagico=2026070803 EsperaReintento=5 SemillaAleatoria=11111
v3_s22222v3-482,670,963,212.566-1,87LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=2.0 ATRPeriodo=14 ATRMultiplo=2.0 MejoraMinPuntos=100 NumeroMagico=2026070803 EsperaReintento=5 SemillaAleatoria=22222
v5_pct_s22222v5-716,960,876,641.410-2,79ModoTrailing=1 LoteFijo=0.01 RiesgoSL_Pct=1.0 RiesgoTP_Pct=0.0 ATRPeriodo=14 ATRMultiplo=2.0 TrailPorc=1.0 MaxMinVelas=20 BreakevenPorc=0.5 EscalonPorc=0.5 MejoraMinPuntos=100 NumeroMagico=2026070805 EsperaReintento=5 SemillaAleatoria=22222
v7_n5_p10_f10_comunv7-1.002,930,55100,27509-5LoteBase=0.01 FactorLote=1.0 SLPorc=1.0 PasoPorc=1.0 MaxNiveles=5 TrailingComun=true NumeroMagico=2026070807 EsperaReintento=5 SemillaAleatoria=11111

La batería de bugs

Cada bug costó tiempo real. Documentarlos convierte el error en conocimiento reutilizable — esta es la mitad "ingeniería" del trading algorítmico que casi nadie enseña.

BUG-01 EA dormido sin ticks

Toda la logica colgada de OnTick; sin ticks el robot no respira. Solucion: EventSetTimer(5) y correr la logica tambien en OnTimer.

BUG-02 EA invisible (logs buffeados)

MT5 buffea el log de expertos 8+ minutos: el silencio no es diagnostico. Solucion: el EA escribe un archivo de estado en MQL5\Files cada ciclo.

BUG-03 Rafaga de reintentos al rechazo

Sin throttle, cada tick reintenta la orden rechazada. Solucion: guardar la hora del ultimo intento y esperar N segundos.

BUG-04 Magic number compartido

Dos versiones con el mismo magic se roban las posiciones en una cuenta hedging. Solucion: magic unico por version (fecha AAAAMMDD + numero).

BUG-05 Exito falso al abrir posicion

trade.Buy() devuelve true si la orden se ENVIO, no si se ejecuto. Solucion: verificar ademas ResultRetcode()==TRADE_RETCODE_DONE.

BUG-06 Acentos dentro del codigo MQL5

Los caracteres acentuados se corrompen entre encodings del editor. Regla: comentarios en espanol sin acentos.

BUG-07 Backtests no reproducibles

MathSrand(GetTickCount()) hace cada corrida distinta. Solucion: input SemillaAleatoria (0=reloj en vivo; fija en el tester) y comparar VARIAS semillas.

BUG-08 Bombardeo de PositionModify

El trailing movia el SL por mejoras de centavos en cada tick. Solucion: paso minimo de mejora (input MejoraMinPuntos).

BUG-09 Trailing de venta sin SL previo

La condicion nuevoSL < slActual con slActual=0 nunca es cierta: el trailing jamas arrancaba. Solucion: tratar slActual==0 explicitamente y simetrico.

BUG-10 El despliegue por INI no sobrevive reinicios

El grafico que crea [StartUp] Expert= es temporal: no queda en el perfil del terminal. Un reinicio 'apaga' el robot en silencio.

BUG-11 retcode 10027 al operar via API

El boton global AlgoTrading apagado bloquea ordenes externas. Verificar terminal_info().trade_allowed antes de diagnosticar otra cosa.

BUG-12 Kill switch confiable

Para garantizar que un EA no cargue: mover su .ex5 a una carpeta _apagados. Ni el perfil ni un INI pueden revivirlo.

BUG-13 FactorLote<1 colapsa al lote minimo

Con lote base 0.01 (el minimo), el escalado decreciente pide 0.007 y la normalizacion lo devuelve a 0.01: la piramide decreciente resulta identica a la plana.

BUG-14 El terminal a veces no cierra tras el tester

Con ShutdownTerminal=1 la simulacion termina pero el terminal queda vivo sin escribir el reporte (flaky, 1 de 25). Mitigacion: timeout + reintento.

El examen de sweet spot

Al modelo ganador se le busca su hábitat: ¿con qué tamaño de cuenta y en qué temporalidad rinde mejor?

Sweet spot del modelo ganador (v7: 8 niveles, paso 0.5%, trailing comun)

BTCUSD, 2026.01.01-2026.07.07, semilla 11111, lote fijo 0.01 · valor = beneficio neto como % del depósito
Depósito \ TFM5M15M30H1H4
100 USD1.864,55%
PF 3,85 · DD 91,26%
1.864,55%
PF 3,85 · DD 91,26%
1.864,55%
PF 3,85 · DD 91,26%
1.864,55%
PF 3,85 · DD 91,26%
1.864,55%
PF 3,85 · DD 91,26%
500 USD372,91%
PF 3,85 · DD 37,65%
372,91%
PF 3,85 · DD 37,65%
372,91%
PF 3,85 · DD 37,65%
372,91%
PF 3,85 · DD 37,65%
372,91%
PF 3,85 · DD 37,65%
1.000 USD186,45%
PF 3,85 · DD 21,71%
186,45%
PF 3,85 · DD 21,71%
186,45%
PF 3,85 · DD 21,71%
186,45%
PF 3,85 · DD 21,71%
186,45%
PF 3,85 · DD 21,71%
5.000 USD37,29%
PF 3,85 · DD 4,95%
37,29%
PF 3,85 · DD 4,95%
37,29%
PF 3,85 · DD 4,95%
37,29%
PF 3,85 · DD 4,95%
37,29%
PF 3,85 · DD 4,95%
10.000 USD18,65%
PF 3,85 · DD 2,52%
18,65%
PF 3,85 · DD 2,52%
18,65%
PF 3,85 · DD 2,52%
18,65%
PF 3,85 · DD 2,52%
18,65%
PF 3,85 · DD 2,52%
% beneficio (más intenso = mayor) % pérdida

Conclusión: La temporalidad NO afecta al modelo (no usa indicadores de vela: identica secuencia de trades de M5 a H4). El tamano de cuenta solo escala el riesgo porque el lote es fijo: +1.865 USD absolutos en todos los depositos. Con 100 USD es ruleta (DD 91%); con 500 USD el DD es 38%; con 1.000 USD rinde +186% con DD 22%; con 5.000+ el retorno se diluye (37% o menos) pero el DD baja de 5%. Sweet spot practico en Exness (1:200): cuenta de 1.000 a 2.000 USD, cualquier temporalidad (M15 por comodidad), escalando el lote 0.01 por cada 1.000 USD de deposito si se quiere sostener el retorno porcentual.

Metodología

  1. Un solo cambio por versión. La entrada aleatoria se mantiene constante como grupo de control; solo se toca la gestión.
  2. Backtests headless reproducibles. El Strategy Tester de MT5 se lanza por línea de comandos con un archivo INI por corrida (símbolo, periodo, fechas, depósito, reporte) y la semilla del generador aleatorio se fija con un input (SemillaAleatoria).
  3. Varias semillas por configuración. Con entrada aleatoria, una corrida es una anécdota; comparamos la distribución de 2-3 semillas.
  4. Métricas extraídas automáticamente de los reportes (beneficio neto, profit factor, drawdown máximo, trades, Sharpe) a datos/resultados.json, que alimenta esta página.
  5. Bugs registrados en el momento en la batería (docs/BUGS.md) con síntoma, causa y solución.
  6. Sweet spot al final: el ganador se somete a la matriz depósito × temporalidad para ubicar dónde operarlo.
Advertencia honesta (léela dos veces): estos resultados corresponden a UN periodo (ene-jul 2026) en UN instrumento (BTCUSD) que estuvo en tendencia. Una estrategia de entrada aleatoria con piramidación y trailing común es, en la práctica, un seguidor de tendencia: en mercados laterales largos su resultado puede invertirse. El objetivo del caso es didáctico —aislar el efecto de la GESTIÓN—, no venderte un sistema rentable. Todo se corrió en cuenta demo. Nada de esto es asesoría financiera.

Llévate la base de conocimiento a tu proyecto

📦 Base de conocimiento completa (ZIP, ~5 MB)

Una carpeta lista para soltar dentro de TU proyecto: batería de bugs, plantilla MQL5 validada, aprendizajes del entorno, metodología de backtests, los 7 EAs, los datos en JSON y los 50 reportes completos del Strategy Tester con sus curvas (los adjuntos). Incluye un CLAUDE.md para que tu asistente de IA (Claude Code, Cursor...) la use como contexto automáticamente, y un INSTRUCTIVO.md paso a paso.

Descargar base_conocimiento_agente_experto.zip

Cómo usarla (resumen del instructivo):

  1. Descarga y descomprime el ZIP.
  2. Copia la carpeta base_conocimiento/ dentro de la carpeta de tu proyecto.
  3. Con IA: si no tienes CLAUDE.md, copia el del paquete a la raíz de tu proyecto; si ya tienes, añádele la línea "Antes de escribir o depurar un EA, lee base_conocimiento/CLAUDE.md y docs/BUGS.md".
  4. Sin IA: sigue el orden de lectura del INSTRUCTIVO.md (aprendizajes → bugs → plantilla → src).

🗂️ Explorar y descargar archivo por archivo

Todo el material también está navegable en GitHub: entra a una carpeta, abre cualquier archivo para leerlo en el navegador y descárgalo individualmente con el botón Download raw file (⬇) de la esquina superior derecha del archivo.

Explorar el repositorio en GitHub

Accesos directos:

Para reproducirlo necesitas MetaTrader 5 (cualquier broker con BTCUSD), compilar los .mq5 con MetaEditor y usar el Strategy Tester (los parámetros exactos de cada corrida están en la tabla de resultados).

Este caso se construyó en vivo en la Sesión 9 de Instituto Quant.

Si quieres construir tus propios sistemas con esta metodología: www.InstitutoQuant.com