- Solve real problems with our hands-on interface
- Progress from basic puts and calls to advanced strategies

Posted January 2, 2025 at 12:22 pm
The post “Long Options Payoff Profiles” first appeared on Robot Wealth blog.
In this article, we explore the payoff to holding long options positions.
Read the previous parts of this 101 series on options:
So far, we’ve plotted the value of an option at expiration.
This is useful (as we’ll see later), but it doesn’t represent our profit and loss from being long that option.
For that, we need to subtract the amount we paid from the option from the payoff for all values of the underlying asset price.
What is Pam’s net P&L?
We follow this process:
If the product is trading at $130 at expiry, and Pam holds calls with a $100 strike then Pam’s calls are “in the money”. Pam can exercise her call option at $100 and then sell the product in the market at $130. So:
Value of call option at expiration = $130 - $100 = $30
Now we subtract the amount Pam paid for the call option to get her net p&l in the trade.
Net Profit = $30 - $2 = $28
Nice trade, Pam.
Let’s take a similar example…
What is Pam’s net P&L now?
We follow this process:
The product is trading below the value of Pam’s call strike. So there’s no point exercising these options. Pam is a smart lady and she wouldn’t pay more than she had to for product X.
So Pam’s options expire “out of the money”. They expire worthlessly.
Value of call option at expiration = $0
Now, we subtract the amount Pam paid for the call option to get her net P&L in the trade.
Net Profit = $0 - $2 = -$2
It was a loss – but because she bought call options, Pam’s loss was limited to the amount she paid for the calls.
We can plot the P&L of a long options position held to expiration as a function of the price of the underlying asset.
To do this we:
min_price <- 50
max_price <- 150
strike <- 100
premium <- 2
call_payoffs <- tibble(price = c(min_price, strike, max_price)) %>%
mutate(callvalue = case_when(price < strike ~ 0, TRUE ~ price - strike)) %>%
mutate(payoff = callvalue - premium)
call_payoffs %>%
ggplot(aes(x = price, y = payoff)) +
geom_line() +
ggtitle(paste0('Payoff profile for long $100 call - Premium $2))
We see that:
premium + strike = $102Now let’s do the same for a Put Option.
This is exactly the same deal as before.
We calculate the put’s value at expiration at various prices of the underlying asset and then subtract the price we paid for the option.
We just need to remember that a put option is an option on being able to sell the underlying asset at the strike price. So this time around, all the action happens when the underlying asset price is below our strike.
At the risk of being a bit tedious, we’ll run through some examples.
What is Fabios’s net P&L?
We follow this process:
If the product is trading at $90 at expiry, and Fabio holds puts with a $95 strike, then Fabio’s calls are “in the money”. Fabio can exercise his put option and sell product X at $95, then immediately buy back the product in the market at $90. So:
Value of put option at expiration = $95 - $90 = $5
Now we subtract the amount Fabio paid for the put option to get his net p&l in the trade.
Net Profit = $5 - $1 = $4
Nice trade, Fabio.
Let’s take a similar example…
What is Fabio’s net P&L now?
We follow this process:
The product is trading above the value of Fabio’s call strike. So there’s no point exercising these options. Fabio is a smart man and he wouldn’t sell product Z for less than he could get in the market.
So Fabio’s options expire “out of the money”. They expire worthlessly.
Value of put option at expiration = $0
Now we subtract the amount Fabio paid for the call option to get her net p&l in the trade.
Net Profit = $0 - $1 = -$1
It was a loss – but because he bought options, Fabio’s loss was limited to the amount he paid for the puts.
We can plot the P&L of a long options position held to expiration as a function of the price of the underlying asset.
To do this we:
min_price <- 50
max_price <- 150
strike <- 95
premium <- 1
put_payoffs <- tibble(price = c(min_price, strike, max_price)) %>%
mutate(putvalue = case_when(price > strike ~ 0, TRUE ~ strike - price)) %>%
mutate(payoff = putvalue - premium)
put_payoffs %>%
ggplot(aes(x = price, y = payoff)) +
geom_line() +
ggtitle(paste0('Payoff profile for long $95 put - Premium $1'))
We see that:
strike - premium = $95 - $1 = $94Now we understand the basics, we will next look at a simple applied use of put options: portfolio hedging.
Information posted on IBKR Campus that is provided by third-parties does NOT constitute a recommendation that you should contract for the services of that third party. Third-party participants who contribute to IBKR Campus are independent of Interactive Brokers and Interactive Brokers does not make any representations or warranties concerning the services offered, their past or future performance, or the accuracy of the information provided by the third party. Past performance is no guarantee of future results.
This material is from Robot Wealth and is being posted with its permission. The views expressed in this material are solely those of the author and/or Robot Wealth and Interactive Brokers is not endorsing or recommending any investment or trading discussed in the material. This material is not and should not be construed as an offer to buy or sell any security. It should not be construed as research or investment advice or a recommendation to buy, sell or hold any security or commodity. This material does not and is not intended to take into account the particular financial conditions, investment objectives or requirements of individual customers. Before acting on this material, you should consider whether it is suitable for your particular circumstances and, as necessary, seek professional advice.
Options involve risk and are not suitable for all investors. For information on the uses and risks of options, you can obtain a copy of the Options Clearing Corporation risk disclosure document titled Characteristics and Risks of Standardized Options by going to the following link ibkr.com/occ. Multiple leg strategies, including spreads, will incur multiple transaction costs.
Join The Conversation
For specific platform feedback and suggestions, please submit it directly to our team using these instructions.
If you have an account-specific question or concern, please reach out to Client Services.
We encourage you to look through our FAQs before posting. Your question may already be covered!