El mes pasado, alguien del equipo de investigación me preguntó por qué nuestros agentes de opciones seguían rechazando una idea de gamma larga que parecía perfectamente razonable. La señal estaba bien. El pronóstico de volatilidad también. El problema eran dos campos del feed de datos de mercado y una cifra que ni siquiera aparece en el feed.
Este es el objeto concreto sobre el que discutíamos: la respuesta del ticker de Deribit para BTC-25SEP26-110000-C, obtenida a las 11:20 UTC de un lunes, cuando quedaban 18 días para el vencimiento. He quitado los campos obsoletos y conservado todo lo relevante.
{
"instrument_name": "BTC-25SEP26-110000-C",
"index_price": 96412.18,
"underlying_price": 96980.44,
"underlying_index": "SYN.BTC-25SEP26",
"estimated_delivery_price": 96412.18,
"mark_price": 0.0041,
"mark_iv": 42.14,
"best_bid_price": 0.0038, "best_bid_amount": 4.9,
"best_ask_price": 0.0045, "best_ask_amount": 12.1,
"bid_iv": 40.42, "ask_iv": 43.94,
"last_price": 0.0043,
"interest_rate": 0.0,
"open_interest": 812.7,
"greeks": {
"delta": 0.0962, "gamma": 0.0000189,
"vega": 36.77, "theta": -42.91, "rho": 4.61
},
"stats": { "volume": 61.2, "high": 0.0051, "low": 0.0036 }
}
instrument_name: cuatro datos, una cadena
BTC-25SEP26-110000-C. Subyacente BTC, vencimiento el 25 de septiembre de 2026, strike 110,000, call. Lo que la cadena no indica —y lo que todos los backtests nuevos de opciones interpretan mal al menos una vez— es el resto de las especificaciones del contrato: cada contrato representa 1 BTC de subyacente, la prima se cotiza y se paga en BTC, y el vencimiento es a las 08:00 UTC, no a las 16:00 de ninguna hora local.
Que esté cotizada en BTC es el filo cortante. Un mark de 0.0041 son 0.0041 BTC, aproximadamente $395 al precio del índice. Si guardas esa columna como un precio y luego la unes al P&L de una estrategia denominada en USD, habrás creado silenciosamente una posición cuyo valor en dólares se mueve con el precio spot aunque la opción no lo haga. He visto un backtest en el que la posición de calls largas ganaba dinero un día en que BTC bajaba, simplemente porque la columna de prima se interpretó como dólares y el investigador, en realidad, estaba corto de la prima denominada en monedas dentro de un marco contable en dólares. Tardamos 2 días en encontrarlo.
index_price vs underlying_price: una diferencia de 568 dólares, y solo uno es el correcto
Difieren en $568.26, y no es un error. index_price es el índice BTC de Deribit: la referencia spot, una combinación de varias plataformas importantes y el valor contra el que finalmente se liquida el contrato. underlying_price es el precio del forward sintético para ese vencimiento concreto, SYN.BTC-25SEP26, derivado del mercado de futuros para la misma fecha. Un coste de carry de 18 días, a cerca del 12% anualizado, explica esos $568.
Todas las griegas del payload y la IV del mark se calculan a partir del forward. Si vuelves a calcular la volatilidad implícita por tu cuenta usando el spot porque es la serie que tenías cargada, obtendrás un valor distinto para cada strike, y el error tendrá una dirección sistemática: las calls parecerán más baratas en términos de volatilidad de lo que son, y las puts, más caras. En un contrato a 18 días con una base del 0.6%, calcularías mal la IV del mark por aproximadamente 1 punto y medio en este strike. Es más que la mayoría de las ventajas de volatilidad en torno a las que se diseñan estrategias.
interest_rate: 0.0 indica que Deribit descuenta a través del forward y no mediante un tipo de interés. No busques una curva libre de riesgo para introducirla: contarías el efecto dos veces.
mark_price y mark_iv: un precio sin contraparte
0.0041 BTC. Nadie pagó ese precio. Deribit calcula el mark a partir de una superficie de volatilidad ajustada, anclada al libro de órdenes, pero suavizada entre strikes y vencimientos para que el margen y las liquidaciones no den saltos cuando cambia una cotización aislada con un spread amplio. El mark se usa para el margen, para el P&L no realizado y aparece en todos los endpoints de posiciones.
Por eso es el precio de ejecución más tentador —y más equivocado— de la investigación sobre opciones cripto. Un backtest que compra al mark y vende al mark está operando contra una spline de suavizado. Producirá un Sharpe. Ese Sharpe describe el ajuste de la superficie y no aporta información sobre si habrías podido ejecutar la operación.
La regla que acabamos incorporando: el mark sirve para el margen, el riesgo y la atribución de punto medio a punto medio. Nunca es un precio de ejecución. Si el backtest necesita un precio de ejecución y no hay una captura del libro para esa marca de tiempo, la ejecución se señala como sin precio en vez de usar el mark. Preferimos perder la fila.
best_bid 0.0038 / best_ask 0.0045: el spread en 3 unidades
Una amplitud de 7 ticks en BTC. Son $67.50 sobre una opción de $395, o el 17% de la prima. En términos de volatilidad son 3.5 puntos: 40.4 en la compra frente a 43.9 en la venta; esa es la cifra que te dará un operador de opciones si le preguntas cuánto mide el spread.
Los tamaños importan tanto como los precios: 4.9 contratos en compra y 12.1 en venta. El tamaño de las opciones de Deribit se expresa en contratos, así que son 4.9 BTC de subyacente, unos $472k de nominal, pero solo 0.47 BTC de delta en este strike. Si tu estrategia necesita una gamma significativa, requiere decenas de contratos, y el libro visible en el mejor precio solo ofrece una fracción. El segundo nivel suele estar otros 2 o 3 ticks más lejos. Todo backtest de opciones con un modelo de tamaño tiene que recorrer el libro o suponer precios de RFQ/bloque, y esas 2 suposiciones dan respuestas muy distintas.
last_price: 0.0043 es una operación que tuvo lugar en algún momento de las últimas 24 horas, posiblemente hace 19 horas y con el spot a un nivel muy distinto. Por construcción, está desactualizada en un instrumento que negocia 61 contratos al día. No construyas una serie de rendimientos con ella.
greeks: cinco cifras, cuatro convenciones de unidades
Este bloque causa más daños silenciosos que el resto del payload junto, porque cada valor tiene las dimensiones correctas y ninguno usa las unidades que supondrías.
| Campo | Valor | Unidades | Interpretación errónea habitual |
|---|---|---|---|
| delta | 0.0962 | BTC de subyacente por contrato | Se interpreta como delta en dólares |
| gamma | 0.0000189 | Δdelta por cada $1 de movimiento del subyacente | Se supone que es por cada movimiento del 1% |
| vega | 36.77 | USD por cada punto de volatilidad | Se supone que es por cada 100% de volatilidad o que está en BTC |
| theta | -42.91 | USD por día natural | Se supone que es por día de negociación |
| rho | 4.61 | USD por cada 1% de tipo de interés | Se ignora, correctamente |
Delta está en monedas, vega y theta en dólares, y gamma es por cada dólar de movimiento del spot. Mezclar un delta denominado en monedas con un agregado de riesgo denominado en dólares es la manera de que una cartera que parece neutral termine con una posición larga de 40 BTC. Y que theta sea por día natural es lo que afecta a las estrategias de fin de semana: una posición desde el cierre del viernes hasta la apertura del lunes acumula 3 días de depreciación temporal, unos $129 por contrato en este caso, sin sesiones de negociación. Si tu backtest avanza por barras y aplica theta en cada paso, los fines de semana desaparecen y todas las estrategias de prima corta salen silenciosamente peor paradas de lo que deberían.
open_interest 812.7, volume 61.2: dónde está realmente la cadena
Un interés abierto de 800 contratos en un strike que ayer negoció 61. Es un strike real y activo: 110,000 es un número redondo a 3 semanas del vencimiento, justo donde se concentra el flujo. Avanza 2 strikes hasta 120,000 y el interés abierto cae en un orden de magnitud; ve a un strike no redondo con un vencimiento que no sea mensual y encontrarás instrumentos con una compra, una venta separadas por el 40% y ninguna operación en una semana.
Un backtest de toda la cadena que recorre cada instrumento cotizado te ejecutará felizmente en todos. Al final aplicamos un filtro con 3 condiciones conjuntas: spread cotizado inferior al 20% del mark, al menos 1 contrato en ambos lados y volumen distinto de cero en las 24 horas anteriores. En un día típico, sobrevive aproximadamente un tercio de la cadena BTC cotizada. En los otros dos tercios es donde vive el alfa ficticio.
El campo que no aparece en el payload
Este objeto no te dice cuánto cuesta una operación. Deribit cobra 0.0003 BTC por contrato de opción, tanto maker como taker: el 0.03% del subyacente, no de la prima, con un límite del 12.5% del precio de la opción. En este contrato son $28.92 por lado, sin aplicar el límite, porque el 12.5% de 0.0041 es 0.000513 y la comisión fija es menor.
La comisión se calcula sobre el nominal y la prima sobre la volatilidad, así que el coste como fracción de lo que pagaste se dispara cuanto más fuera del dinero vas.
Compra al precio de venta de 0.0045 ($434), vende al precio de compra de 0.0038 ($366) y paga la comisión dos veces: $125.80 por una operación completa en un contrato cuyo mark es $395. Tu tesis tiene que valer el 31% de la prima para quedar en tablas. Esa es toda la razón por la que se rechazó la idea de gamma larga, y no tuvo nada que ver con la señal.
Se pone más interesante si preguntas cuánto cuesta una unidad de delta, porque las comisiones escalan con el número de contratos y los contratos varían en proporción inversa al delta. Para los cálculos, mantenemos la IV del mark constante en el 42.1% en todos los strikes (una cadena real tiene skew y, en cripto, el ala de calls suele negociarse por encima de la ATM, lo que hace que esta tabla sea optimista):
| Instrumento | Mark (BTC) | Delta | Contratos por cada 1 BTC de delta | Comisión por lado | Coste por BTC de delta |
|---|---|---|---|---|---|
| 97000-C (ATM) | 0.0373 | 0.518 | 1.93 | $28.92 | $55.80 |
| 110000-C | 0.0041 | 0.096 | 10.4 | $28.92 | $301 |
| 120000-C | 0.0004 | 0.013 | 79.4 | $4.82 (con límite) | $383 |
| perp de BTC | — | 1.0 | 1.0 | $48.21 | $48.21 |
El límite del 12.5% tiene un efecto real en esa última fila: sin él, el ala muy alejada costaría $2,300 por BTC de delta y las estrategias de billete de lotería serían imposibles aritméticamente en vez de simplemente malas. Incluso con el límite, comprar exposición mediante el strike 120,000 cuesta unas 8 veces lo que cobra el perpetuo. Las opciones no son una forma barata de expresar una dirección, y cualquier backtest que diga lo contrario ha omitido esta tabla.
08:00 UTC, 25 de septiembre
Lo último que el ticker no te cuenta es cómo termina la posición. Deribit liquida las opciones según el promedio del índice durante los 30 minutos previos a las 08:00 UTC del día del vencimiento y cobra una comisión de entrega de 0.00015 BTC en los contratos dentro del dinero, también limitada al 12.5% del valor de liquidación.
Esto tiene 2 consecuencias para un backtest. Primero, esa ventana de promedio es real y puedes calcularla mal: una opción que está $300 dentro del dinero a las 07:59 puede liquidarse sin valor si la última media hora fue desfavorable, y un backtest que liquida según el valor puntual de las 08:00 diferirá de tu cuenta simulada en unos pocos puntos básicos en la mayoría de los vencimientos y mucho más en algunos. Segundo, la comisión de entrega se aplica la quieras o no, así que una estrategia que mantiene la posición hasta el vencimiento paga 3 comisiones por ciclo, mientras que una que cierra a las 07:30 paga 2 más el spread. Cuál sale más barato depende del strike, y el punto de inflexión está aproximadamente en una prima de 0.0012 BTC. Lo calculamos para cada posición en lugar de imponer una regla fija.
La versión de este post que quería escribir trataba sobre el pronóstico de volatilidad. En vez de eso, pasé una semana con las unidades y los límites de las comisiones, que es más o menos la proporción correcta entre glamour y realidad en la investigación de opciones.
Veinte campos. Dos precios que difieren por diseño, un precio al que nunca se negoció, griegas en 4 sistemas de unidades y un modelo de costes que vive enteramente fuera del payload, en una página de documentación. Si estás poniendo en marcha un backtest de opciones, dedica el primer día a escribir una función que convierta uno de estos objetos en una posición con todos los costes incluidos y las denominaciones correctas: spread, comisión, límite, entrega, monedas frente a dólares. Todas las estrategias que escribas después heredarán lo que esa función dé por cierto.
← Todos los artículos


