Skip to content
🛠️ToolsShed

Options Profit Calculator

Calculate profit and loss for call and put options at expiration. Shows breakeven, max profit, and max loss.

-$300.00
Max Loss
Unlimited
Max Profit
108.00
Breakeven Price
Out of the Money
Moneyness
Stock PriceP&L
$70.00-$300.00
$76.65-$300.00
$83.30-$300.00
$89.95-$300.00
$96.60-$300.00
$103.25-$300.00
$109.90+$190.00
$116.55+$855.00
$123.20+$1,520.00
$129.85+$2,185.00
$136.50+$2,850.00

For educational purposes only. Not financial advice.

About this tool

The Options Profit Calculator helps traders and investors quickly determine the financial outcome of options positions at expiration. Whether you're analyzing a simple call or put strategy or evaluating a more complex multi-leg position, this tool calculates profit and loss across the full range of underlying asset prices, showing you exactly where your breakeven point lies and what your maximum gain or loss could be.

To use the calculator, enter the option strike price, the premium you paid or received, and the current price of the underlying asset at expiration. The tool instantly displays your profit or loss at that price point, along with critical thresholds like breakeven, maximum profit (for short positions), and maximum loss (for long positions). This makes it easy to understand the risk-reward profile of any options trade before or after execution.

Frequently Asked Questions

Code Implementation

from dataclasses import dataclass

@dataclass
class OptionResult:
    breakeven: float
    max_loss: float
    max_profit: float | None  # None = unlimited (call)

def call_option(stock_price, strike, premium, contracts=1):
    total_cost = premium * contracts * 100
    breakeven = strike + premium
    return OptionResult(
        breakeven=breakeven,
        max_loss=-total_cost,
        max_profit=None,  # unlimited for calls
    )

def put_option(stock_price, strike, premium, contracts=1):
    total_cost = premium * contracts * 100
    breakeven = strike - premium
    max_profit = (strike - premium) * contracts * 100
    return OptionResult(
        breakeven=breakeven,
        max_loss=-total_cost,
        max_profit=max_profit,
    )

def pnl_at_expiration(option_type, strike, premium, price_at_exp, contracts=1):
    """Calculate P&L if held to expiration."""
    if option_type == "call":
        intrinsic = max(0, price_at_exp - strike)
    else:
        intrinsic = max(0, strike - price_at_exp)
    return (intrinsic - premium) * contracts * 100

# Example: Buy 1 call contract
result = call_option(100, 105, 3)
print(f"Breakeven: ${result.breakeven}")   # $108.0
print(f"Max loss: ${result.max_loss}")     # $-300

for price in [95, 100, 105, 108, 115, 120]:
    pnl = pnl_at_expiration("call", 105, 3, price)
    print(f"  At ${price}: P&L = ${pnl:+.2f}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.