Teníamos una estrategia de momentum de BTC de 1 minuto que parecía honesta en Binance. Comisiones taker, funding, un término de impacto de raíz cuadrada que ya habíamos vuelto un poco demasiado pesimista. Un walk-forward que no nos avergonzaba. La cuenta de paper vivía en Bybit, porque ahí estaban las claves. Me dije que BTC es BTC. Para el viernes tenía una estrategia que había estado operando un lead-lag que no podíamos ejecutar, y un Sharpe que pertenecía a un exchange en el que no teníamos cuenta.
Lunes: un backtest limpio en Binance
El agente había soltado algo casi aburrido: retorno de 15 barras frente a una media lenta, largo o corto en la apertura de la siguiente barra, cerrar en un stop o a los 12 minutos. Lo forzamos sobre Binance USD-M BTCUSDT, de 2023 a principios de 2026, y nos negamos a mirar nada bruto de costes.
Tras 4.0 bps de taker, funding horario e impacto, el Sharpe walk-forward se situó en 1.6. El edge neto medio por fill era de 3.4 bps. El recuento de operaciones era lo bastante alto como para que dejara de hurgar en el bootstrap. El colchón de latencia que ya añadimos para nuestro propio stack (de señal a orden, 40 milisegundos en un buen día) apenas lo movió. Recuerdo haberme sentido ligeramente molesto de que no fuera más frágil.
Martes: la cuenta de paper empieza a "resbalar"
El paper se puso en vivo a las 09:12 UTC. El mismo código, los mismos parámetros, la misma regla de "siguiente apertura", apuntando al BTCUSDT linear de Bybit. La primera tarde pareció una racha de mala suerte. Estábamos ejecutando 2–8 bps peor que el replay de Binance de los mismos minutos, siempre en la dirección de la operación. El blotter decía slippage. Me creí el blotter hasta que los fallos se agruparon en los minutos en los que Binance ya había empezado a correr.
Durante la noche el gap no revirtió a la media como revierte a la media un modelo de fills ruidoso. Se quedó ahí. Una compra en Bybit se imprimió a un precio que Binance había mostrado un beat antes, luego llegó Bybit, luego lo pagamos. Y los minutos que la estrategia quería eran los minutos en los que las dos cintas disentían. En los minutos tranquilos, los cierres se superponían y a la estrategia no le importaba. Estaba seleccionando divergencia y llamando a eso alpha.
Miércoles: dos cintas, un reloj
Sacamos ambos feeds de last-trade, los alineamos por timestamps del exchange y hicimos una pregunta incómoda: cuando BTC se movía al menos 2 ticks, ¿qué venue imprimía primero? En horas tranquilas Binance se adelantaba a Bybit en unos dos tercios de esos bursts, con una mediana de lead de unos 40 milisegundos, que cabe en muchas conversaciones de "añadimos latencia" y queda fuera de una barra de 1 minuto. Durante la publicación del CPI del martes el lead se estiró a cientos de milisegundos, y durante unos segundos feos los dos last prices estaban a $80 de diferencia. Me quedé ahí con las dos ladders abiertas, viendo a Bybit perseguir una película que Binance ya había proyectado.
Esa fue la tónica de la semana, y no está en el Sharpe. Puedes saber, intelectualmente, que los last prices de cripto son locales a cada venue. Es distinto ver la misma moneda en dos ventanas y darte cuenta de que una de ellas vive en el pasado.
Luego hicimos el test que debería haber exigido el lunes. Conservar la señal de Binance. Ejecutar en la siguiente apertura de Bybit. Ese es el conjunto de información real de la cuenta de paper si miras la cinta líquida y operas en otro sitio, y también es una forma de lookahead que nunca tendrás en tamaño: estás usando un precio que el venue de ejecución aún no ha impreso. El edge pasó a 0.6 bps. Dándole la vuelta (señal de Bybit, fill de Binance) acuñas una fantasía. Binance en el mismo venue se quedó en 3.4. La "estrategia" era sobre todo estar en el book más rápido.
El gap de cierre de 1 minuto en los minutos que operamos tenía una mediana de 4.1 bps. Incondicional, en todos los minutos, era de unos 1.5. Claro. La señal dispara cuando alguien ya ha empezado a moverse. Habíamos estado midiendo el edge sobre la muestra seleccionada, que es exactamente donde vive el desacuerdo entre venues.
Solía pensar que el peor bug de venue era el mapeo de símbolos, BTCUSDT versus BTC-PERP, un join que duplica una posición en silencio. Eso es contabilidad. Esto era mirar dos books durante el CPI y darme cuenta de que había investigado un mercado que no opero.
Jueves: el funding, los marks y las comisiones tampoco eran el mismo mercado
En cuanto admites que los last prices son distintos, tienes que admitir que el resto del contrato de market data también lo es. Habíamos copiado el schedule de comisiones de Binance en una cuenta de paper de Bybit y luego nos preguntábamos por qué se desviaba la línea de costes.
| Entrada | Backtest de Binance | Paper de Bybit, esa semana |
|---|---|---|
| Last price | Binance USD-M | Bybit linear |
| Comisión taker | 4.0 bps | 5.5 bps |
| Intervalo de funding | horario | 00 / 08 / 16 UTC |
| Mark / índice | Cesta de Binance | Cesta de Bybit |
| Qty mín. / tick | 0.001 / 0.10 | 0.001 / 0.10 |
| Matemática de liquidación | nunca se alcanzó, BTC | mark distinto, sigue sin alcanzarse |
El tick y el lote coincidían en BTC. No lo generalizaría. En el book de SOL que miramos el jueves por la noche, el tick size y el nocional mínimo diferían ambos, y el gap de cierre en los minutos de operación era de 11 bps. El funding era la fuga más lenta. Binance pagaba cada hora. Bybit seguía en el reloj de 8 horas para ese linear. Una posición mantenida a través de las 01:00 UTC recibía un cargo de Binance en el ledger de research y silencio en paper, luego un bulto a las 08:00 que el backtest ya había ido goteando. El carry coincidía a lo largo de una semana y disentía a lo largo de una tarde, que es exactamente el horizonte en el que vivía esta estrategia.
Las comisiones eran casi aburridas, y aun así se comieron 1.5 bps de una historia de 3.4 bps. La gente trata 4.0 frente a 5.5 como una nota a pie de página porque parece pequeño junto a un movimiento diario del 2%. No es pequeño junto a un edge de 3.4 bps. Ya lo sabíamos. Simplemente habíamos aplicado el conocimiento al schedule del venue equivocado.
Viernes: una rerun nativa de Bybit
Reconstruir todo sobre OHLCV de Bybit, stamps de funding de Bybit, 5.5 bps de Bybit. El mismo code path, los mismos cortes walk-forward, la misma función de impacto. Sharpe 0.4. Edge neto medio de 0.9 bps, que está dentro del ruido de una estrategia taker de 1 minuto una vez dejas de regalarle la primera mirada de Binance.
Era un mercado distinto, no uno más ruidoso. El paper no había rechazado el backtest porque el paper sea "más realista" en abstracto. El paper había estado ejecutando en un book que el research nunca vio. El 1.6 era internamente consistente. Era consistente sobre el exchange equivocado.
Dejamos la versión de Binance en el archivo con una nota en el informe: no hagas paper de esta cuenta contra esta cinta. La versión de Bybit es la que sigue corriendo, a un número del que nadie escribiría un hilo. Ese es el resultado correcto. Todavía echo de menos un poco el 1.6, que es como sabes que estaba haciendo un trabajo que no se había ganado.
Lo que nos saltaríamos la próxima vez
El atajo era sociológico. Binance es la cinta que todo vendor, todo notebook de research, todo default de agente quiere entregarte. La cuenta está donde hayas podido abrirla de verdad. Esos dos hechos parecen un detalle de operaciones. Son el backtest.
- Elige primero el venue de ejecución. Construye la cinta de research a partir de los last prices, stamps de funding, marks, ticks y tramo de comisiones de ese venue. Si el default del vendor es Binance, eso no es un default. Es una estrategia distinta.
- Si no puedes obtener historial del venue en el que harás paper, no sustituyas una cinta líder y llames slippage al gap. O espera, o trata la cinta ajena como una señal retardada y retrásala hasta que hubiera podido verse en el book de ejecución.
- Cuando compares paper con backtest, desglosa el drift: gap de last price en los minutos de operación, línea de comisiones, timestamps de funding, mark usado para los stops. El blotter del martes mezcló los cuatro y los etiquetó como slippage.
- Haz el test cruzado a propósito. Señal en A, fill en B. Si ahí es donde vive todo el edge, no tienes una estrategia. Tienes un lead-lag que no te van a ejecutar en tamaño.
¿Seguiría echando un vistazo a Binance cuando opero en Bybit? Para un sanity check discrecional, claro. Para un fill, no. La cuenta de paper ya nos dijo lo que vale ese vistazo. Vale los 4.1 bps que la otra sala imprimió primero, y esos no los conseguimos.
← Todos los artículos


