Un derecho, no una obligación
Una opción da a su titular el derecho, pero no la obligación, de negociar un activo a un precio fijo (el strike o precio de ejercicio) en una fecha o antes (el vencimiento). Un call es el derecho a comprar, un put el derecho a vender. Al vencimiento el titular solo usa el derecho cuando le conviene. Un call con strike 100 y la acción a 110 permite comprar a 100 lo que vale 110: un pago de 10. Con la acción a 90 simplemente no se hace nada y el pago es 0, nunca negativo. Esa unilateralidad es lo que da valor a las opciones.
import numpy as np
spot = np.array([80, 90, 100, 110, 120.0]) # possible prices of the stock at expiry
strike = 100
call = np.maximum(spot - strike, 0) # np.maximum works element by element: no loop, no if
put = np.maximum(strike - spot, 0)
print(call.tolist()) # [0.0, 0.0, 0.0, 10.0, 20.0]
print(put.tolist()) # [20.0, 10.0, 0.0, 0.0, 0.0]El beneficio es el pago menos la prima
La opción tiene un precio hoy, la prima, así que lo que ganas es el pago menos lo que pagaste. Un call comprado por 6 pierde 6 siempre que la acción acabe por debajo del strike y llega al equilibrio en strike + prima = 106. Combinando opciones se construyen otras formas. Un straddle largo (call más put con el mismo strike) gana con un gran movimiento en cualquier sentido y pierde ambas primas si la acción no se mueve. Un bull call spread (largo un call a 100, corto un call a 110) cuesta menos pero limita la ganancia a la diferencia de strikes: renuncias al alza por encima de 110 para reducir el coste.
call_pnl = call - 6 # bought for a premium of 6
print(call_pnl.tolist()) # [-6.0, -6.0, -6.0, 4.0, 14.0] break-even at 106
straddle = call + put - (4.0 + 3.5) # a call (4.0) and a put (3.5) at the same strike
print(straddle.tolist()) # [12.5, 2.5, -7.5, 2.5, 12.5] wins on a move up or down
spread = np.maximum(spot - 100, 0) - np.maximum(spot - 110, 0) - (6.0 - 2.0) # long the 100 call, short the 110 call
print(spread.tolist()) # [-4.0, -4.0, -4.0, 6.0, 6.0] loss and gain are both cappedshort_call = 6 - call # the seller of the call keeps the premium and pays the payoff
print(short_call.tolist()) # [6.0, 6.0, 6.0, -4.0, -14.0] the exact mirror of the buyer's loss and gainprint(float(np.maximum(112 - 100, 0))) # 12.0 a single price works as well as an array- Pago del call
max(S - K, 0), pago del putmax(K - S, 0):np.maximum(..., 0)lo hace sobre un array entero. - Beneficio = pago - prima; un straddle (call + put) apuesta a un gran movimiento, un bull call spread limita coste y ganancia.
- Los pagos son valores al vencimiento; el precio de hoy es mayor por el valor temporal, que valoran los siguientes temas.
A continuación: la paridad put-call, el vínculo exacto entre el precio de un call y el de un put.
Lab: qué se califica
- Pagar el derecho a comprar con
call_payoff25 pts - Pagar el derecho a vender con
put_payoff25 pts - Apostar a un gran movimiento en cualquier sentido con
long_straddle_pnl25 pts - Limitar el coste y la ganancia con
bull_call_spread_pnl25 pts