Um direito, não uma obrigação
Uma opção dá ao titular o direito, mas não a obrigação, de negociar um ativo a um preço fixo (o preço de exercício, ou strike) numa data ou antes dela (o vencimento). Uma call é o direito de comprar, uma put o direito de vender. No vencimento o titular só usa o direito quando compensa. Uma call com strike 100 e a ação a 110 permite comprar por 100 o que vale 110: um pagamento de 10. Com a ação a 90 simplesmente nada se faz e o pagamento é 0, nunca negativo. Essa unilateralidade é o que dá valor às opções.
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]O lucro é o pagamento menos o prêmio
A opção tem um preço hoje, o prêmio, então o que você ganha é o pagamento menos o que pagou. Uma call comprada por 6 perde 6 sempre que a ação termina abaixo do strike e empata em strike + prêmio = 106. Combinando opções constroem-se outros formatos. Um straddle comprado (call mais put no mesmo strike) lucra com um grande movimento para qualquer lado e perde os dois prêmios se a ação ficar parada. Uma trava de alta com calls (comprada em call a 100, vendida em call a 110) custa menos mas limita o ganho à diferença dos strikes: você abre mão da alta acima de 110 para reduzir o custo.
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- Pagamento da call
max(S - K, 0), da putmax(K - S, 0):np.maximum(..., 0)faz isso num array inteiro. - Lucro = pagamento - prêmio; um straddle (call + put) aposta em um grande movimento, uma trava de alta limita custo e ganho.
- Os pagamentos são valores no vencimento; o preço de hoje é maior pelo valor no tempo, que os próximos tópicos precificam.
A seguir: a paridade put-call, a ligação exata entre o preço de uma call e o de uma put.
Lab: o que é avaliado
- Pagar o direito de comprar com
call_payoff25 pts - Pagar o direito de vender com
put_payoff25 pts - Apostar em um grande movimento para qualquer lado com
long_straddle_pnl25 pts - Limitar o custo e o ganho com
bull_call_spread_pnl25 pts