16. Cotas de no arbitraje para precios de opciones

Antes de elegir un modelo de valoración, las relaciones de no arbitraje permiten descartar precios de opciones que contradicen carteras con flujos dominantes.

16.1 Qué puede y qué no puede hacer una cota

Las cotas de no arbitraje no determinan una prima exacta. Determinan un conjunto de precios admisibles: si una cotización queda fuera, se puede construir una operación que recibe más en cada escenario o cuesta menos por los mismos pagos.

Idea central: si una cartera A paga siempre al menos tanto como B, A no puede valer menos que B. Las cotas aplican esta comparación a opciones y activos simples.

16.2 Supuestos del caso inicial

Trabajaremos con opciones europeas, un activo negociable sin dividendos, vencimiento T, precio spot S0, precio de ejercicio K y factor de descuento D(0,T). Las opciones europeas sólo se ejercen en T; por eso K debe descontarse al compararlo con un precio de hoy.

Call europea

Da derecho a comprar a K en T. Denotaremos su precio actual por C.

Put europea

Da derecho a vender a K en T. Denotaremos su precio actual por P.

16.3 Cota inferior de una call

La cartera “activo menos bono que paga K en T” tiene valor actual S0 − K D(0,T). En T produce ST − K. La call produce max(ST − K, 0), que siempre es mayor o igual.

C ≥ max(S0 − K D(0,T), 0)

Si C fuera menor, se compra la call y se vende la cartera dominante. Al vencimiento, la diferencia de payoffs nunca es negativa y es positiva en algunos escenarios; la diferencia inicial crea la oportunidad.

16.4 Cota superior de una call

Una call no puede valer más que una unidad del activo. Quien posee el activo puede venderlo si la call se ejerce y conservarlo si no; la call sólo ofrece una parte de esas posibilidades.

0 ≤ C ≤ S0

Si C superara S0, vender la call y comprar el activo deja un excedente hoy. En T el activo permite cumplir la entrega si el titular ejerce. Esta demostración explica por qué una opción de compra no puede costar más que el subyacente en el modelo básico.

16.5 Cotas de una put

Una put europea paga como máximo K en T y nunca paga un importe negativo. Por ello su límite superior es el valor presente de K. Para la cota inferior se compara con una cartera que presta K descontado y vende el activo.

P ≥ max(K D(0,T) − S0, 0)
0 ≤ P ≤ K D(0,T)

La relación de signos es el espejo de la call: el valor de una put aumenta cuando cae el spot, mientras que el límite relevante de K está en una fecha futura y debe descontarse.

16.6 Ejemplo numérico completo

Sea S0 = $100, K = $105 y D(0,T) = 0,95. El valor presente de K es $99,75. Las cotas son:

Opción Cota inferior Cota superior Interpretación
Call max(100 − 99,75, 0) = $0,25 $100 No puede cotizar a $0 ni a $101
Put max(99,75 − 100, 0) = $0 $99,75 No puede cotizar a −$1 ni a $100

Una call de $20 y una put de $20 respetan estas cotas, pero no necesariamente son precios razonables simultáneamente. Las cotas son necesarias, no suficientes; la paridad put-call agregará una relación más fuerte en el tema siguiente.

16.7 Diferencia entre intrínseco y cota europea

El valor intrínseco de una call usa max(S0 − K, 0). La cota inferior europea usa max(S0 − K D, 0). No son contradictorios: el primero supone ejercicio inmediato y el segundo reconoce que K sólo se paga en T.

Para una opción americana, que puede ejercerse hoy, el valor intrínseco se convierte también en una cota inferior. La posibilidad de ejercicio anticipado cambia el conjunto de pagos disponibles.

16.8 Activos con dividendos y costos

Si el activo paga ingresos conocidos con valor presente I antes de T, comprarlo hoy otorga un flujo que una call no recibe. La cartera dominante cambia y la cota inferior de la call pasa a ser:

C ≥ max(S0 − I − K D(0,T), 0)

Costos conocidos de mantener el activo tienen el efecto opuesto. El procedimiento correcto nunca es memorizar una fórmula aislada: se identifican los flujos de cada cartera hasta T y se comparan sus payoffs.

16.9 Fricciones y bandas

Una cotización que viola una cota por unos centavos no garantiza una operación realizable. Deben incluirse comisiones, bid-ask, costos de préstamo de valores, límites de venta corta, diferencias entre tasas y riesgo de ejecución.

  • La compra se ejecuta al precio de oferta y la venta al precio de demanda.
  • La financiación puede tener una tasa mayor que la inversión.
  • Un activo puede ser difícil de vender en corto.
  • El contrato debe coincidir en multiplicador, vencimiento y activo entregable.

Conclusión práctica: las fricciones convierten una igualdad teórica en una banda. Aun así, las cotas son un excelente control de calidad para datos y modelos.

16.10 Implementación y laboratorio

La función siguiente devuelve las cotas básicas y permite verificar rápidamente una prima observada.

function cotasEuropeas(spot, K, factorDescuento) {
  return {
    callMin: Math.max(spot - K * factorDescuento, 0),
    callMax: spot,
    putMin: Math.max(K * factorDescuento - spot, 0),
    putMax: K * factorDescuento
  };
}

console.log(cotasEuropeas(100, 105, 0.95));

Verificador de cotas

Opciones europeas sin dividendos ni costos.

Call mínima $0,00
Call máxima $100,00
Put: mínimo / máximo $0,00 / $100,00

16.11 Ejercicio propuesto

Con S0 = $70, K = $80 y D(0,T) = 0,90, calculá las cuatro cotas. Luego analizá si una call de $75 y una put de $75 son compatibles con ellas.

  1. Calculá K D(0,T).
  2. Calculá las cotas inferior y superior de la call.
  3. Calculá las cotas inferior y superior de la put.
  4. Describí una cartera que explica por qué la call no puede valer más que $70.
  5. Mencioná dos costos que podrían formar una banda práctica.
Ver orientación

K D = $72. La call debe estar entre $0 y $70, por lo que $75 viola su límite superior. La put debe estar entre $2 y $72, por lo que $75 también lo viola. Para la call, se vende la opción cara y se compra el activo. Las comisiones y el spread bid-ask son dos fricciones relevantes.

16.12 Demostración detallada: call por debajo de su cota inferior

Supongamos que una call cuesta menos que S0 − K D(0,T), cuando esta expresión es positiva. Se compra la call barata, se compra un bono que pagará K en T y se vende una unidad del activo en corto. El flujo inicial es positivo porque la cartera vendida cuesta más que la comprada.

En T hay dos escenarios. Si ST > K, se ejerce la call, se paga K con el bono y se recibe el activo para devolver el activo vendido en corto. Si ST ≤ K, la call vence, pero el bono paga K; la cartera puede cerrarse sin una pérdida que supere el excedente inicial bajo la relación de dominancia. La demostración formal es una comparación de payoffs: la call nunca entrega menos que activo menos bono.

cartera A = call larga
cartera B = activo largo − bono que paga K
payoff(A) = max(ST − K, 0) ≥ ST − K = payoff(B)

Expresar primero la desigualdad de payoffs y luego los precios evita confundir una estrategia concreta con la relación económica que la justifica.

16.13 Demostración detallada: put y pago máximo

La put europea da derecho a vender el activo por K en T. Incluso en el escenario más favorable para el titular, su pago bruto no puede superar K: si el activo vale cero, la put vale K; no puede entregar más que ese importe por unidad. Un bono que pague K en T domina por lo tanto el payoff de la put.

Si la put costara más que K D(0,T), se vende la put y se compra el bono. Al vencimiento, el bono paga K, suficiente para afrontar cualquier obligación de la put vendida. La diferencia inicial es positiva. La cota superior no depende de una predicción sobre una caída del activo: depende de que el derecho contractual tiene un pago máximo conocido.

Put demasiado cara

Vender put + comprar bono. El bono cubre el máximo pago posible de la opción.

Call demasiado cara

Vender call + comprar activo. El activo cubre la entrega si se ejerce.

16.14 Cotas, convexidad y forma del payoff

Las cotas básicas también revelan la forma de una opción. El payoff de una call es convexo: permanece en cero hasta K y luego crece linealmente. El de una put cae linealmente hasta cero. Esta forma explica por qué una opción larga no puede tener payoff negativo, mientras que su vendedor asume la forma opuesta.

La convexidad por sí sola no fija una prima, pero ayuda a comprender por qué la incertidumbre puede añadir valor temporal: el derecho conserva el lado favorable del movimiento y abandona el desfavorable. Más adelante, los árboles binomiales y Black-Scholes cuantificarán esa idea; las cotas seguirán funcionando como controles mínimos de cualquier resultado numérico.

16.15 Lista de control para aplicar cotas

Antes de validar una cotización, respondé estas preguntas:

  1. ¿La opción es europea o americana?
  2. ¿S, K y la prima están expresados por la misma unidad y moneda?
  3. ¿Qué fecha tiene el pago K y qué factor de descuento corresponde?
  4. ¿El activo paga dividendos, cupones u otros ingresos antes de T?
  5. ¿Existen costos de almacenamiento, préstamo de valores o restricciones de venta corta?
  6. ¿La diferencia supera spreads, comisiones y costos de financiación?

Esta lista separa una fórmula de una implementación responsable. Las cotas no sustituyen el detalle del contrato ni autorizan automáticamente una operación.

16.16 Ejercicio adicional de validación

Una call europea sin dividendos tiene S0 = $120, K = $100 y un factor de descuento de 0,92. Se observan tres primas candidatas: $15, $29 y $125.

  1. Calculá la cota inferior y superior.
  2. Decidí cuáles primas respetan ambas cotas.
  3. Para cada prima inválida, describí la cartera de arbitraje que sugiere la violación.
  4. Explicá por qué la prima de $29 puede respetar las cotas sin ser necesariamente el precio justo.
Ver orientación de resolución

La cota inferior es 120 − 100 × 0,92 = 28 y la superior es $120. La prima $15 viola la cota inferior; $29 es admisible por estas cotas; $125 viola la superior. Para $15 se compara la call con la cartera activo menos bono. Para $125 se vende la call y se compra el activo. Las cotas delimitan un rango, no seleccionan un único valor dentro de él.

function cotasCall(spot, K, descuento) {
  return { minimo: Math.max(spot - K * descuento, 0), maximo: spot };
}

console.log(cotasCall(120, 100, 0.92)); // { minimo: 28, maximo: 120 }