Junio 2026 — 2 meses de operativa en vivo, 141 trades, y todo lo que aprendimos
1. La idea original
Todo empezó con una observación simple: en mercados bajistas, comprar en sobreextensión oversold y esperar un rebote es una de las estrategias más clásicas del trading. Pero ejecutarla manualmente requiere estar pegado a la pantalla 24/7, y el factor emocional juega en contra — justo cuando más barato está un activo, más miedo da comprarlo.
La premisa:
Long-only. Sin futuros, sin apalancamiento, sin short. Solo Binance spot con USDC, operando los pares más líquidos del exchange. El capital total inicial fue $500 dólares.
2. Arquitectura del bot
El corazón del sistema es live.py, un bot asíncrono en Python que corre 24/7 y se estructura en tres loops que trabajan en paralelo:
🔍 Check Job (cada 30 min)
Descarga velas OHLCV de todos los símbolos (top ~200 pares USDC por volumen), calcula RSI con EMA de Wilder sobre 110 velas, y cachea los cierres para el cálculo en tiempo real. También ejecuta catch-up: si el bot estuvo caído, revisa velas perdidas para ver si algún SL o TP debería haberse ejecutado mientras no estaba corriendo.
📡 Live Job (cada 60s)
Escanea señales de entrada. Para cada símbolo sin posición abierta:
- Calcula RSI en vivo con el precio actual + velas cacheadas
- Busca un cruce: RSI previo < 15 (estaba oversold) y RSI actual ≥ 15 (acaba de cruzar de vuelta)
- Si cruza, y no tiene cooldown activo, abre LONG con el 25% del cash disponible
- Máximo 6 posiciones concurrentes
👁️ Position Watch Job (cada 5s)
Monitorea las posiciones abiertas en alta frecuencia:
- Consulta el estado de las OCO en Binance
- Detecta si una OCO se ejecutó (ALL_DONE) y registra el trade automáticamente
- Actualiza el LOCK: si el precio sube +1%, mueve el SL a +0.8%; si sube +2%, mueve el SL a +1.8%
- Sincroniza el cash con el saldo real de Binance en cada ciclo
3. El mecanismo LOCK — La innovación clave
El LOCK es lo que diferencia esta estrategia de un simple RSI mean-reversion. Sin LOCK, el perfil es clásico: WR ~37%, TP completo +3%, SL completo -1.5%, R:R 1:2. Con LOCK, la dinámica cambia por completo:
| Métrica | Sin LOCK | Con LOCK |
|---|---|---|
| Win Rate | 36.6% | 58.4% |
| P&L (5yr, 30 símbolos) | +$662 | +$1,333 |
| Max Drawdown | -$52 | -$21 |
| EV/trade | +$0.12 | +$0.23 |
El LOCK convierte perdedoras potenciales en ganadoras pequeñas. Cuando el precio sube +1%, el SL sube a +0.8% — ahora, aunque el precio se dé la vuelta, sales con ganancia. Esto pasa el 100% de las veces que se alcanza el LOCK1.
En el backtest de 5 años sobre 30 símbolos (2021-2026):
| Razón de salida | Trades | % | P&L total |
|---|---|---|---|
| LOCK | 2,557 | 44% | +$2,223 |
| SL | 2,420 | 42% | -$2,904 |
| TP | 839 | 14% | +$2,013 |
El LOCK duplica la rentabilidad y reduce el drawdown a la mitad. Sin él, cada acierto es más grande (+$2.40 vs +$1.25) pero se acierta mucho menos (36.6% vs 58.4%), resultando en menor rentabilidad global y mayor drawdown.
4. Optimización de parámetros
Probamos sistemáticamente las variables clave con un backtest sobre BTCUSDT 30m en ventanas de 3 años.
SL: ¿1.0%, 1.5% o 4.0%?
| SL | Ret 1y | WR | Trades | Max DD | Sharpe |
|---|---|---|---|---|---|
| 1.0% | -2.49% | 47% | 17 | -6.0% | -0.40 |
| 1.5% ← óptimo | -1.15% | 60% | 15 | -7.0% | -0.15 |
| 4.0% | -2.90% | 77% | 13 | -12.2% | -0.59 |
Veredicto: SL=1.5% es óptimo. 1% no mejora nada; 4% duplica el drawdown.
RSI_BUY: ¿15 o 18?
| RSI_BUY | Ret 1y | WR | Trades | Max DD | Sharpe |
|---|---|---|---|---|---|
| 15 ← óptimo | -1.15% | 60% | 15 | -7.0% | -0.15 |
| 18 | -5.92% | 59% | 34 | -11.6% | -0.65 |
Veredicto: RSI=15 es óptimo. RSI=18 duplica los trades pero cada uno es peor — entras antes en oversold y el precio sigue cayendo. RSI=15 es más selectivo: menos oportunidades, pero de mayor calidad.
Conclusión de parámetros
Los valores actuales — RSI_BUY=15, SL=1.5%, TP=3%, LOCK1=+1%/SL=+0.8%, LOCK2=+2%/SL=+1.8% — están en el punto óptimo para este setup en BTCUSDT. Cualquier desviación empeora el perfil riesgo-retorno.
5. Resultados en vivo (18 abril — 19 junio 2026)
La foto general
| Métrica | Valor |
|---|---|
| Días operando | ~62 días |
| Trades totales | 141 |
| Win Rate | 60.3% (85/141) |
| Capital inicial | $500.00 |
| Portfolio total actual | $459.03 |
| P&L neto total | -$40.97 (-8.19%) |
| P&L trades (solo precio) | -$15.86 |
| Fees + spread reales | -$25.11 |
El -8.19% es el P&L real de todo el capital. La cuenta incluye USDC (para el trading) y TRX (que está en staking, pero es efectivo en dólares igual). La foto parcial de solo USDC ($342.31) es engañosa porque el dinero en TRX también cuenta — es parte del capital total invertido.
Por razón de salida
| Razón | Trades | WR | P&L total | Avg/trade |
|---|---|---|---|---|
| SL | 77 | 26% | -$63.52 | -$0.82 |
| LOCK | 49 | 100% | +$35.92 | +$0.73 |
| TP | 0 | — | $0.00 | — |
Dato relevante: cero salidas por TP completo (+3%). En estos dos meses, ningún trade llegó al take profit completo. O se fueron al SL (-1.5%) o el LOCK las cerró antes (+0.8%/+1.8%).
Evolución mensual
| Mes | Trades | WR | P&L trades | Fees est. |
|---|---|---|---|---|
| Abril (18-30) | 14 | 36% | -$4.58 | ~$1.76 |
| Mayo | 87 | 67% | +$2.12 | ~$10.96 |
| Junio (1-19) | 41 | 54% | -$13.41 | ~$5.17 |
Mayo fue el mejor mes: 67% WR y P&L positivo en trades. Junio ha sido más duro, con varias perdedoras grandes y la mayoría de trades en SL.
Top 5 mejores trades
| Fecha | Hora | Símbolo | % | P&L | Razón |
|---|---|---|---|---|---|
| 23-may | 20:39 | BTC | +3.00% | +$3.57 | LOCK |
| 19-abr | 05:43 | LDO | +2.30% | +$2.89 | SL |
| 18-jun | 20:35 | TWT | +2.98% | +$2.53 | LOCK |
| 15-jun | 17:22 | TST | +2.93% | +$2.48 | LOCK |
| 14-may | 16:51 | SOL | +1.79% | +$2.24 | SL |
Top 5 peores trades
| Fecha | Hora | Símbolo | % | P&L | Razón |
|---|---|---|---|---|---|
| 14-jun | 08:07 | TST | -2.57% | -$2.91 | SL |
| 09-may | 12:14 | OPEN | -2.28% | -$2.84 | SL |
| 09-jun | 05:52 | SAHARA | -2.22% | -$2.54 | SL |
| 05-jun | 12:34 | BANK | -2.15% | -$2.49 | SL |
| 05-jun | 12:34 | BANK | -2.15% | -$2.49 | SL |
6. Comparación con Bitcoin
En el mismo período (18 abril — 19 junio), BTC pasó de ~$75,142 a ~$62,800:
| Activo | Rendimiento |
|---|---|
| ₿ Bitcoin (BTCUSDT) | -16.42% |
| 📈 RSI Strategy (Total Binance) | -8.19% |
| 🏆 Alpha generado | +8.23% |
La estrategia ha superado a Bitcoin por +8 puntos porcentuales en un mercado bajista. Esto no es casualidad: el backtest de 5 años ya mostraba que la estrategia es inherentemente bearish — gana por alpha vs índice, no por retorno absoluto.
En los 12 meses del backtest sobre BTC, con BTC cayendo -37.37%, la estrategia perdió solo -1.15% (RSI_BUY=15, SL=1.5%). Eso son +36 puntos de alpha. Los dos meses en vivo confirman el patrón: cuando el mercado cae, la estrategia cae menos.
7. Análisis y lecciones aprendidas
Lo que funciona ✅
- ✅ El LOCK es un acierto rotundo. 49 trades en vivo con 100% WR y +$35.92. Es la diferencia entre una estrategia perdedora y una que genera alpha. En el backtest de 5 años, el LOCK convierte ~1,100 perdedoras potenciales en ganancias.
- ✅ La selectividad RSI=15 es correcta. En 62 días, solo 141 trades en un universo de ~200 símbolos. Entradas espaciadas y de calidad, no ruido constante. El 67% WR de mayo lo confirma.
- ✅ La sincronización con Binance es sólida. El bot sincroniza cash cada 5s con el saldo real, y el script de status también lo hace bajo demanda. No hay desfases.
- ✅ Alpha real contra el mercado. -8.19% vs -16.42% de BTC. En 62 días de mercado adverso, la estrategia ha batido al benchmark por +8.23%. Exactamente lo que prometía el backtest.
Lo que necesita mejorar ❌
- ❌ El R:R real es 1:0.55. Las ganancias promedio son de $0.82 y las pérdidas de -$1.50. Con WR=60%, el punto de equilibrio estaría en R:R ≥ 1:0.67. Estamos por debajo.
EV = P(win) × avg_win − P(loss) × avg_lossEV = 0.603 × 0.82 − 0.397 × 1.50EV = 0.49 − 0.60 = −$0.11/trade
- ❌ Cero salidas por TP. En ningún caso el precio llegó a +3%. Esto sugiere que el mercado actual no favorece rebotes completos — sube lo justo para activar el LOCK y se da la vuelta. Es un entorno ideal para el LOCK pero frustrante para el TP.
- ❌ Las comisiones importan. A $63/trade de media, cada pata cuesta ~$0.06 (0.1%). Dos patas = $0.12, que es el ~15% de la ganancia media del LOCK ($0.73). En 141 trades, las comisiones reales fueron ~$25 — más que el P&L de trades.
- ❌ Sin filtro de tendencia global. La estrategia compra cualquier oversold en cualquier símbolo sin preguntarse si el mercado general está en tendencia bajista fuerte.
8. Preguntas abiertas para la V2
- ¿Ajustar el LOCK para capturar más ganancia? Actualmente LOCK1 deja salir en +0.8%. Si eliminamos LOCK1 y solo usamos LOCK2 (+1.8%), las ganadoras serían más del doble... pero habría más SLs porque menos trades llegan a +2%. Es un trade-off que merece backtesting.
- ¿Reducir el universo de símbolos? Operamos sobre ~200 pares USDC. Muchos son tokens pequeños con alta volatilidad. Un filtro por volatilidad mínima o por correlación con BTC podría reducir el ruido.
- ¿Añadir filtro de EMA de largo plazo? Solo comprar si el precio está por debajo de EMA200 en 1d. Evitaría comprar alts en toro fuerte donde no hay mean-reversion de verdad. Pero también perdería oportunidades en mercados laterales.
- ¿Tamaño de posición dinámico? El 25% fijo del cash es simple pero agresivo. Un sizing basado en la volatilidad del símbolo (menos tamaño en tokens volátiles) podría mejorar el perfil de riesgo.
- ¿Short también? La estrategia es LONG-only. Añadir SHORT con RSI≥85 + cruce a la baja podría duplicar las oportunidades, pero añade complejidad (préstamo, funding rate).
9. Bugs y problemas encontrados en el camino
Ningún sistema real sale perfecto. Estos son los bugs que documentamos y corregimos:
- Race condition en cooldowns (junio 2026): el
position_watch_job(cada 5s) y ellive_job(cada 60s) pisaban los cooldowns del otro. Síntoma: ZECUSDC entró 5 veces seguidas el mismo día. Fix: recargar state desde disco antes de cada ciclo de live_job y fusionar cooldowns antes de guardar. - Cash desincronizado: el bot no actualizaba su cash interno después de comisiones. Inicialmente solo sincronizaba con Binance cuando no había posiciones abiertas. Fix: sincronizar en cada ciclo de watch, incluso con posiciones abiertas.
- OCO false positive: Binance reportaba OCO como ALL_DONE cuando en realidad el activo seguía en cartera (probablemente por renovación de la order list). Fix: verificar balance real del activo en Binance antes de asumir que se ejecutó.
- Format string bug: El script de status mostraba "+-" cuando un porcentaje era negativo (
+{val:.2f}%produce+-9.17%). Fix: usar formateador nativo{val:+.2f}%que pone + o - automáticamente.
10. Conclusiones finales
La estrategia RSI con LOCK funciona. Dos meses en vivo con 141 trades y 60% WR demuestran que la mecánica es sólida. El LOCK es genuinamente la innovación clave — convierte un sistema de 37% WR en uno de 60% WR y duplica la rentabilidad en backtest.
Los números reales respaldan la tesis:
| Benchmark | Rendimiento | vs Estrategia |
|---|---|---|
| Bitcoin | -16.42% | +8.23% mejor |
| HODL pasivo | -16.42% | la estrategia pierde la mitad |
| Estrategia sin LOCK (backtest) | -$51 max DD | 2.5x mejor con LOCK |
El talón de Aquiles: R:R. Con 60% WR pero R:R de 1:0.55, la estrategia gana por frecuencia, no por magnitud. Esto la hace vulnerable a rachas de perdedoras y a la erosión por comisiones. Es sostenible, pero frágil.
Alpha real en mercado bajista. La estrategia está diseñada para mercados que caen o se mantienen laterales. En un toro fuerte, infrapatrocina al índice. Pero no es para eso que fue creada.
Con 60% WR pero R:R de 1:0.55, estamos acertando mucho pero ganando poco. La versión 2 debería enfocarse en mejorar ese R:R — ya sea moviendo los locks, ajustando el SL, o filtrando el universo. El esqueleto de la estrategia es correcto; ahora toca refinar los músculos.
Anexo: El proyecto en números
Santiago Fernández — Estrategias Algorítmicas de Trading