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:

RSI(14) ≤ 15 en vela 30m + cruce al alza → compra spot → TP +3% → SL -1.5%

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étricaSin LOCKCon LOCK
Win Rate36.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 salidaTrades%P&L total
LOCK2,55744%+$2,223
SL2,42042%-$2,904
TP83914%+$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%?

SLRet 1yWRTradesMax DDSharpe
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_BUYRet 1yWRTradesMax DDSharpe
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.

Nota importante: los backtests de optimización se hicieron sobre BTCUSDT. El comportamiento sobre alts puede diferir significativamente.

5. Resultados en vivo (18 abril — 19 junio 2026)

La foto general

MétricaValor
Días operando~62 días
Trades totales141
Win Rate60.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ónTradesWRP&L totalAvg/trade
SL7726%-$63.52-$0.82
LOCK49100%+$35.92+$0.73
TP0$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

MesTradesWRP&L tradesFees est.
Abril (18-30)1436%-$4.58~$1.76
Mayo8767%+$2.12~$10.96
Junio (1-19)4154%-$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

FechaHoraSímbolo%P&LRazón
23-may20:39BTC+3.00%+$3.57LOCK
19-abr05:43LDO+2.30%+$2.89SL
18-jun20:35TWT+2.98%+$2.53LOCK
15-jun17:22TST+2.93%+$2.48LOCK
14-may16:51SOL+1.79%+$2.24SL

Top 5 peores trades

FechaHoraSímbolo%P&LRazón
14-jun08:07TST-2.57%-$2.91SL
09-may12:14OPEN-2.28%-$2.84SL
09-jun05:52SAHARA-2.22%-$2.54SL
05-jun12:34BANK-2.15%-$2.49SL
05-jun12:34BANK-2.15%-$2.49SL

6. Comparación con Bitcoin

En el mismo período (18 abril — 19 junio), BTC pasó de ~$75,142 a ~$62,800:

ActivoRendimiento
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.
💰 La fórmula del problema:

EV = P(win) × avg_win − P(loss) × avg_loss
EV = 0.603 × 0.82 − 0.397 × 1.50
EV = 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

  1. ¿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.
  2. ¿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.
  3. ¿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.
  4. ¿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.
  5. ¿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 el live_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:

BenchmarkRendimientovs Estrategia
Bitcoin-16.42%+8.23% mejor
HODL pasivo-16.42%la estrategia pierde la mitad
Estrategia sin LOCK (backtest)-$51 max DD2.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.

"En trading no gana el que más acierta, sino el que gana más cuando acierta que cuando falla."

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

Líneas de código del bot956
Símbolos en universo~200
Tamaño medio de trade~$63
Máximo trade ganador+$3.57 (BTC)
Máximo trade perdedor-$2.91 (TST)
Cooldown post-SL12h (o -3% adicional)
Posiciones máximas simultáneas6
Capital por posición25% del cash disponible
Símbolos operados en 2 meses90 distintos
Primer trade18-abr-2026
Último trade19-jun-2026

Santiago Fernández — Estrategias Algorítmicas de Trading