18. Spreads, straddles y combinaciones básicas de opciones

Las opciones pueden combinarse como piezas de construcción: sumando y restando patas se diseñan perfiles de pago a medida, con costos y riesgos que se leen antes de invertir.

18.1 De opciones sueltas a estructuras de pago

Una call comprada, una put vendida o una combinación con el propio activo tienen perfiles de pago distintos. Este tema estudia combinaciones básicas de opciones: estructuras formadas por varias patas —llamadas así cada posición individual— que en conjunto producen un resultado pensado para un objetivo concreto.

Idea central: una combinación no crea valor de la nada. Su payoff es la suma de los payoffs de sus patas, y su costo es la suma de sus primas (con los signos correspondientes). Todas las relaciones de no arbitraje de los temas anteriores siguen aplicándose pata por pata.

Cuando la estructura exige pagar primas al iniciarse se habla de débito neto o costo neto; cuando al iniciarse se cobra, de crédito neto. El resultado al vencimiento es el payoff neto menos el débito (o más el crédito). Usaremos opciones europeas para fijar ideas, aunque estas estructuras suelen construirse con opciones negociadas en mercados organizados.

18.2 La regla de construcción: sumar payoffs

El procedimiento es siempre el mismo: se listan las patas, se calcula el payoff de cada una en cada escenario y se suman. Veamos un ejemplo con dos calls: comprar una call con K = $100 a $7 y vender una call con K = $110 a $3. El costo neto es 7 − 3 = $4.

Payoff de cada pata y resultado de la combinación, por unidad del subyacente.
STCall larga K = 100Call corta K = 110Payoff netoResultado (−$4)
90000−4
100000−4
1055051
110100106
12020−10106

El perfil resultante ya no es el de una opción suelta: la pérdida está limitada a $4, la ganancia está limitada a $6 y existe un punto donde el resultado es cero. Observar la estructura de pagos —antes de discutir primas— es siempre el primer paso del análisis.

1. PATASElegir opciones, strikes y posiciones
2. PAYOFFSCalcular cada pata por escenario
3. SUMASumar payoffs y restar el costo neto
4. PERFILLeer límites, equilibrios y forma

18.3 Spread vertical alcista: bull call spread

Un spread vertical combina opciones del mismo tipo y vencimiento con distinto precio de ejercicio. El bull call spread se construye comprando la call de menor strike y vendiendo la de mayor strike, con la expectativa de una subida moderada del subyacente.

Ejemplo: comprar la call con K1 = $100 por $8 y vender la call con K2 = $120 por $2. El costo neto es $6 y el payoff crece entre ambos strikes:

payoff = max(ST − K1, 0) − max(ST − K2, 0)
resultado = payoff − 6
Bull call spread con K1 = $100, K2 = $120 y costo neto de $6.
STPayoff netoResultado
900−6
1000−6
10660
1202014
1302014

Las lecturas clave del perfil: pérdida máxima igual al costo neto ($6, si ST ≤ K1), beneficio máximo igual a (K2 − K1) − costo = $14 (si ST ≥ K2) y punto de equilibrio en K1 + costo = $106. Comparado con una call comprada sola, el spread cuesta menos y gana menos: vender la call «paga» parte de la prima a cambio de renunciar a la subida más allá de K2.

18.4 Spread vertical bajista: bear put spread

El espejo del caso anterior usa puts: se compra la put de mayor strike y se vende la de menor strike. Apuesta a una caída moderada del subyacente con riesgo acotado.

Ejemplo: comprar la put con K2 = $120 por $10 y vender la put con K1 = $100 por $3. El costo neto es $7.

payoff = max(K2 − ST, 0) − max(K1 − ST, 0)
resultado = payoff − 7
Bear put spread con K1 = $100, K2 = $120 y costo neto de $7.
STPayoff netoResultado
902013
1002013
11370
1200−7
1300−7

Pérdida máxima $7, beneficio máximo (K2 − K1) − costo = $13 y punto de equilibrio en K2 − costo = $113. También existe la versión bajista con calls —el bear call spread: vender la call de K1 y comprar la de K2— que ingresa un crédito neto y estabiliza su resultado al alza. La lógica de armado es la misma; cambia el signo de los flujos.

18.5 Straddle: el resultado depende del movimiento

Un straddle comprado combina una call y una put con el mismo strike y el mismo vencimiento. No apuesta a una dirección: apuesta a que el precio se mueva lo suficiente en cualquier sentido.

Ejemplo: comprar la call con K = $100 por $7 y la put con K = $100 por $6. El costo neto es $13 y el payoff es la distancia entre el precio final y K:

payoff = max(ST − K, 0) + max(K − ST, 0) = |ST − K|
resultado = |ST − K| − 13
Straddle comprado con K = $100 (call $7 + put $6).
STPayoffResultado
80207
87130
1000−13
113130
1303017

La pérdida máxima es la prima total ($13) y ocurre si el precio vence exactamente en K. Los puntos de equilibrio están a una distancia igual al costo: K − 13 = $87 y K + 13 = $113. Cuanto más cerca de K quede el precio final, peor el resultado; cuanto más lejos se mueva, mejor. La estructura paga por movimiento, no por dirección.

18.6 El straddle corto y sus riesgos

La contraparte del straddle comprado es el straddle vendido: vender simultáneamente la call y la put del mismo strike. Se ingresa el crédito neto y el perfil se invierte exactamente.

resultado = 13 − |ST − K|
Straddle vendido con K = $100 (ingreso neto de $13).
STPayoffResultado
80−20−7
87−130
100013
113−130
130−30−17

El beneficio máximo es el crédito ($13) y se alcanza si el precio vence en K. En cambio, las pérdidas crecen con el movimiento: hacia abajo llegan, en el límite teórico, hasta K (el activo no baja de cero), y hacia arriba no tienen límite. La posición exige garantías y llamadas de margen, porque el vendedor debe responder por un payoff que puede crecer sin techo.

Precaución: vender opciones no es adivinar el precio futuro; es aceptar una obligación con pérdida potencial amplia o ilimitada a cambio de una prima acotada. El tema 26 profundizará la gestión de estos riesgos.

18.7 Strangle: la versión económica del straddle

Un strangle comprado combina una put con strike bajo y una call con strike alto, ambos fuera del dinero. Cuesta menos que un straddle, pero necesita un movimiento mayor para compensar.

Ejemplo: comprar la put con K1 = $90 por $2 y la call con K2 = $110 por $3. Costo neto: $5.

payoff = max(K1 − ST, 0) + max(ST − K2, 0)
resultado = payoff − 5
Strangle comprado con K1 = $90 y K2 = $110 (costo neto $5).
STPayoffResultado
80105
8550
1000−5
11550
1302015

Comparación con el straddle de los apartados anteriores: el straddle cuesta $13 y equilibra en $87/$113; el strangle cuesta $5 y equilibra en $85/$115. Cada estructura tiene su perfil:

Dos formas de apostar al movimiento.
EstructuraCostoEquilibriosCuándo tiene ventaja
Straddle (K = 100)$13$87 y $113Movimientos grandes desde niveles cercanos a K
Strangle (90/110)$5$85 y $115Movimientos extremos; menor desembolso inicial

Ninguna es «mejor» en abstracto: dependen del movimiento esperado, del costo y de la tolerancia al riesgo. Lo importante es poder leer ambas.

18.8 Combinar opciones con el activo

Muchas coberturas clásicas combinan el activo subyacente con una o dos opciones. Supongamos un activo comprado a S0 = $100 y consideremos tres estructuras:

Covered call

Poseer el activo y vender una call (K = $110 por $3). Ingresa prima, pero limita la ganancia al alza. Perfil de expectativa moderada.

Protective put

Poseer el activo y comprar una put (K = $90 por $2). Funciona como seguro: acota la caída pagando una prima.

Collar

Poseer el activo, comprar la put de K = $90 ($2) y vender la call de K = $110 ($3). Neto: crédito de $1. Acota el resultado en ambos lados.

Cómo se comparan

La covered call gana menos si el precio sube mucho; la protective put pierde menos si cae; el collar combina ambos efectos y casi se autofinancia.

Resultado por unidad respecto de S0 = $100, según el precio final del activo.
EstructuraFlujo inicialST = 80ST = 100ST = 120
Covered call+3−17+3+13
Protective put−2−12−2+18
Collar+1−9+1+11

La covered call sacrifica la suba por encima de K2 a cambio de la prima; la protective put resigna prima a cambio de un piso; el collar acota el resultado entre aproximadamente −$9 y +$11. En el tema 26 volveremos sobre estas estructuras desde la gestión de riesgos.

18.9 Mariposa: un payoff acotado con máximo en K2

La mariposa (butterfly) combina tres strikes: se compra la call de menor strike, se venden dos calls del strike central y se compra la call de mayor strike, con distancias iguales entre ellos. El payoff nunca es negativo y alcanza su máximo si el precio vence en el strike central.

Ejemplo: comprar la call de K1 = $90 por $14, vender dos calls de K2 = $100 a $7 cada una y comprar la call de K3 = $110 por $3. Costo neto: 14 − 14 + 3 = $3.

payoff = max(ST − K1, 0) − 2 × max(ST − K2, 0) + max(ST − K3, 0)
resultado = payoff − 3
Mariposa comprada con strikes 90 / 100 / 110 y costo neto de $3.
STPayoffResultado
800−3
900−3
9330
100107
10730
1200−3

Es la estructura opuesta al straddle: gana si el precio se queda cerca de K2 —por eso se la usa con expectativa de baja volatilidad— y pierde sólo el costo si se aleja en cualquier dirección. También existen mariposas construidas con puts; el principio de armado y lectura es idéntico.

18.10 Controles de no arbitraje para combinaciones

Cada combinación hereda las relaciones del módulo. Los spreads verticales tienen cotas sencillas y útiles como control de cotizaciones:

0 ≤ costo(bull call spread) ≤ (K2 − K1) × D(0,T)
0 ≤ costo(bear put spread) ≤ (K2 − K1) × D(0,T)

El payoff de ambos spreads nunca es negativo y nunca supera K2 − K1, un pago conocido en T que puede compararse con un bono. La dominancia fija el techo y el signo del payoff fija el piso. Además, la paridad put-call liga ambos spreads entre sí: aplicándola a K1 y a K2 y restando las dos igualdades se obtiene

costo(bull call spread) + costo(bear put spread) = (K2 − K1) × D(0,T)
Ejemplo: S0 = 100, D(0,T) = 0,95, K1 = 100, K2 = 120
… con C1 = 8 y C2 = 2, la paridad implica P1 = 3 y P2 = 16:
6 (spread alcista) + 13 (spread bajista) = 19 = 20 × 0,95

La suma de ambos costos reparte exactamente el valor presente de la distancia entre strikes: si un spread está caro, el otro está barato; no pueden estarlo los dos a la vez. En la mariposa, el payoff nunca negativo implica que su costo no puede ser negativo —si lo fuera, tendríamos dinero gratis—, y su descomposición como dos spreads consecutivos permite reconstruir su precio a partir de los de cada tramo.

Las estructuras con el activo también tienen lecturas sintéticas directas de la paridad:

activo + put = call + bono (S0 + P = C + K × D)
activo − call = bono − put (S0 − C = K × D − P)

Es decir: una protective put es sintéticamente una call más un bono, y una covered call es un bono menos una put. Estas equivalencias no son curiosidades algebraicas: permiten construir la misma exposición con los instrumentos más disponibles o líquidos, y verificar que una estructura no esté cotizando por fuera de sus componentes.

18.11 Implementar combinaciones en JavaScript

Primero, funciones de payoff específicas para cada estructura. Los payoffs se expresan por unidad del subyacente y antes del costo neto.

function payoffBullCallSpread(precioFinal, K1, K2) {
  return Math.max(precioFinal - K1, 0) - Math.max(precioFinal - K2, 0);
}

function payoffStraddleLargo(precioFinal, K) {
  return Math.abs(precioFinal - K);
}

function payoffStrangleLargo(precioFinal, Kput, Kcall) {
  return Math.max(Kput - precioFinal, 0) + Math.max(precioFinal - Kcall, 0);
}

console.log(payoffBullCallSpread(130, 100, 120)); // 20
console.log(payoffStraddleLargo(80, 100));        // 20
console.log(payoffStrangleLargo(80, 90, 110));    // 10

Para no escribir una función por estructura, conviene describir la combinación como una lista de patas y calcularla de forma genérica. Cada pata declara su tipo, su posición y su prima, con signo positivo para las largas y negativo para las cortas.

function payoffPierna(pierna, precioFinal) {
  const bruto = pierna.tipo === 'call'
    ? Math.max(precioFinal - pierna.K, 0)
    : Math.max(pierna.K - precioFinal, 0);
  return pierna.posicion === 'larga' ? bruto : -bruto;
}

function resultadoCombinacion(piernas, precioFinal) {
  const costoNeto = piernas.reduce(
    (total, pierna) => total + (pierna.posicion === 'larga' ? pierna.prima : -pierna.prima),
    0
  );
  const payoff = piernas.reduce((total, pierna) => total + payoffPierna(pierna, precioFinal), 0);
  return payoff - costoNeto;
}

const spreadAlcista = [
  { tipo: 'call', posicion: 'larga', K: 100, prima: 8 },
  { tipo: 'call', posicion: 'corta', K: 120, prima: 2 }
];

console.log(resultadoCombinacion(spreadAlcista, 90));  // -6
console.log(resultadoCombinacion(spreadAlcista, 106)); // 0
console.log(resultadoCombinacion(spreadAlcista, 130)); // 14

El mismo constructor puede ampliarse para calcular puntos de equilibrio, beneficios máximos y tablas de escenarios: es la base de las funciones de estrategias que se retomarán en el tema 24.

18.12 Laboratorio: explorador de estrategias básicas

Elegí la estrategia, sus primas y un precio final. El laboratorio muestra el costo neto, el payoff y el resultado por unidad, junto con una tabla de escenarios. En el straddle, la prima 1 es la call y la prima 2 la put; en los spreads y el strangle, prima 1 corresponde a K1 y prima 2 a K2. Los resultados ignoran comisiones, márgenes y spreads.

Explorador de estrategias

Opciones europeas, un subyacente, un vencimiento.

Costo neto$6,00
Payoff$20,00
Resultado$14,00
Escenarios alrededor del precio final ingresado.
Precio finalPayoffResultado

18.13 Usos, riesgos y controles

Las combinaciones permiten expresar objetivos concretos: limitar el costo de una apuesta direccional (spreads), financiar primas vendiendo otra opción (covered call, collar), apostar al movimiento o a la calma (straddle, strangle, mariposa) y acotar el resultado de una cartera. Su implementación exige responder algunas preguntas:

  1. ¿Qué objetivo tiene cada pata y qué pata financia o limita a cuál?
  2. ¿Todas las patas comparten subyacente y vencimiento? ¿Los strikes guardan el orden que la estructura espera?
  3. ¿El resultado del laboratorio coincide con el débito o crédito neto calculado a mano?
  4. ¿Se leyeron el beneficio máximo, la pérdida máxima y los puntos de equilibrio de la estructura completa, no de cada pata por separado?
  5. ¿Se incorporaron comisiones por pata, spreads bid-ask y costos de préstamo?
  6. ¿La posición exige margen o garantías? ¿Se entiende el riesgo de una pata corta con pérdida ilimitada?
  7. ¿Se verificaron los controles de no arbitraje del apartado 18.10 antes de confiar en las cotizaciones?

Alcance educativo: el curso explica estructuras y sus perfiles de pago. Ninguna combinación constituye una recomendación: antes de operar deben evaluarse costos reales, liquidez, márgenes y la situación particular de cada inversor.

18.14 Próximo paso: de las estructuras a los modelos

Con los spreads y straddles cerramos el módulo de opciones desde la óptica de los payoffs: sabemos qué paga cada estructura en cada escenario y qué relaciones deben cumplir sus precios. Pero todavía no respondimos la pregunta central: ¿por qué una opción vale lo que vale hoy?

El próximo módulo responde con modelos. Empezaremos por replicar una opción en un solo período —el tema 19—, y de allí surgirán las probabilidades neutrales al riesgo, el árbol binomial y, finalmente, los supuestos de Black-Scholes. Las combinaciones de este tema reaparecerán como casos de validación: cualquier modelo correcto debe respetar los perfiles, las cotas y la paridad que ya conocemos.

18.15 Ejercicio propuesto

Un inversor arma un bull call spread comprando una call con K1 = $90 a $13 y vendiendo una call con K2 = $110 a $4. Ambas vencen en la misma fecha.

  1. Indicá la posición (larga o corta) en cada pata y calculá el costo neto.
  2. Calculá el payoff y el resultado por unidad si ST = $95, $105 y $120.
  3. Determiná la pérdida máxima, el beneficio máximo y el punto de equilibrio.
  4. Explicá qué ocurre con el resultado si el precio sube mucho más allá de $110.
  5. Escribí una función JavaScript que devuelva el resultado del spread.
Ver orientación de resolución

La estructura compra la call de $90 (larga) y vende la de $110 (corta); costo neto 13 − 4 = $9. Payoff y resultado: con ST = 95 el payoff es 5 y el resultado −$4; con 105 el payoff es 15 y el resultado +$6; con 120 el payoff es 20 y el resultado +$11. Pérdida máxima $9 (si ST ≤ 90), beneficio máximo (110 − 90) − 9 = $11 (si ST ≥ 110) y equilibrio en 90 + 9 = $99. Si el precio supera $110, el resultado queda estabilizado en $11: la call vendida compensa exactamente a la comprada.

function resultadoBullCallSpread(precioFinal, K1, K2, prima1, prima2) {
  const payoff = Math.max(precioFinal - K1, 0) - Math.max(precioFinal - K2, 0);
  return payoff - (prima1 - prima2);
}

console.log(resultadoBullCallSpread(95, 90, 110, 13, 4));   // -4
console.log(resultadoBullCallSpread(105, 90, 110, 13, 4));  // 6
console.log(resultadoBullCallSpread(120, 90, 110, 13, 4));  // 11

18.16 Ejercicio adicional: elegir entre estructuras

Comparemos dos estructuras sobre el mismo subyacente, con S0 = $100 y un período hasta el vencimiento. Un straddle compra la call con K = $100 a $8 y la put con K = $100 a $7. Un strangle compra la put con K1 = $90 a $3 y la call con K2 = $110 a $5.

  1. Calculá el costo neto de cada estructura.
  2. Calculá los puntos de equilibrio de cada una.
  3. Calculá el resultado por unidad de cada estructura con ST = $80, $95 y $120.
  4. Indicá en qué escenario conviene cada estructura y por qué.
  5. Escribí las funciones JavaScript de ambos resultados.
Ver orientación de resolución

Costos: straddle 8 + 7 = $15; strangle 3 + 5 = $8. Equilibrios: straddle en 100 ± 15, es decir $85 y $115; strangle en 90 − 8 = $82 y 110 + 8 = $118. Resultados: con ST = 80, el straddle da 20 − 15 = +$5 y el strangle 10 − 8 = +$2 (mejor el straddle); con ST = 95, el straddle da 5 − 15 = −$10 y el strangle 0 − 8 = −$8 (pierde menos el strangle); con ST = 120, el straddle da +$5 y el strangle +$2 (mejor el straddle). Conclusión: el strangle es más barato y sobrevive mejor a los movimientos moderados; el straddle rinde más cuando el movimiento es extremo. Ambas apuestas son al movimiento, no a la dirección.

function resultadoStraddle(precioFinal, K, primaCall, primaPut) {
  return Math.abs(precioFinal - K) - (primaCall + primaPut);
}

function resultadoStrangle(precioFinal, Kput, Kcall, primaPut, primaCall) {
  return Math.max(Kput - precioFinal, 0) + Math.max(precioFinal - Kcall, 0)
    - (primaPut + primaCall);
}

console.log(resultadoStraddle(80, 100, 8, 7));      // 5
console.log(resultadoStraddle(95, 100, 8, 7));      // -10
console.log(resultadoStrangle(80, 90, 110, 3, 5));  // 2
console.log(resultadoStrangle(95, 90, 110, 3, 5));  // -8
console.log(resultadoStrangle(120, 90, 110, 3, 5)); // 2