Skip to content

Single-Leg Strategies

Single-leg strategies involve buying or selling a single call or put option. These are the simplest options strategies and form the building blocks for more complex multi-leg strategies.

Long Calls

Description

A long call gives you the right to buy the underlying at the strike price. This is a bullish strategy with unlimited profit potential and limited risk (the premium paid).

Market Outlook

  • Bullish - Expect significant upward price movement
  • Profits increase as the underlying rises above the strike + premium paid

Profit/Loss

  • Maximum Profit: Unlimited (underlying price - strike - premium)
  • Maximum Loss: Premium paid (if underlying stays below strike)
  • Breakeven: Strike + premium paid

Example

import optopsy as op

data = op.csv_data('SPX_options.csv')

# Backtest long calls with 30-60 DTE range
results = op.long_calls(
    data,
    max_entry_dte=60,
    exit_dte=30,
    leg1_delta={"target": 0.40, "min": 0.30, "max": 0.50},  # Slightly OTM calls
)

print(results)

Use Cases

  • Betting on a strong rally
  • Lower-cost alternative to buying stock
  • Earnings plays expecting a positive surprise
  • Breakout trades

Short Calls

Description

A short call obligates you to sell the underlying at the strike if exercised. This is a bearish or neutral income strategy with limited profit and theoretically unlimited risk.

Market Outlook

  • Bearish to Neutral - Expect price to stay flat or decline
  • Profits if the underlying stays below the strike at expiration

Profit/Loss

  • Maximum Profit: Premium received
  • Maximum Loss: Unlimited (underlying price - strike - premium)
  • Breakeven: Strike + premium received

Example

results = op.short_calls(
    data,
    max_entry_dte=45,
    exit_dte=0,  # Hold to expiration
    leg1_delta={"target": 0.20, "min": 0.10, "max": 0.30},  # Sell OTM calls for income
)

Use Cases

  • Generating income in neutral/bearish markets
  • Covered call strategies (with stock holdings)
  • High-probability income trades

⚠️ Risk Warning

Short naked calls have unlimited risk if the underlying rises significantly. Consider defined-risk alternatives like call spreads.


Long Puts

Description

A long put gives you the right to sell the underlying at the strike price. This is a bearish strategy with substantial profit potential and limited risk (the premium paid).

Market Outlook

  • Bearish - Expect significant downward price movement
  • Profits increase as the underlying falls below the strike - premium paid

Profit/Loss

  • Maximum Profit: Strike - premium - 0 (if underlying goes to zero)
  • Maximum Loss: Premium paid (if underlying stays above strike)
  • Breakeven: Strike - premium paid

Example

results = op.long_puts(
    data,
    max_entry_dte=45,
    exit_dte=21,
    leg1_delta={"target": 0.30, "min": 0.20, "max": 0.40},  # Moderately OTM puts
)

Use Cases

  • Betting on a market decline
  • Portfolio hedging
  • Earnings plays expecting negative news
  • Breakdown trades

Short Puts

Description

A short put obligates you to buy the underlying at the strike if exercised. This is a bullish income strategy where you collect premium, hoping the option expires worthless.

Market Outlook

  • Bullish to Neutral - Expect price to stay flat or rise
  • Profits if the underlying stays above the strike at expiration

Profit/Loss

  • Maximum Profit: Premium received
  • Maximum Loss: Strike - premium (if underlying goes to zero)
  • Breakeven: Strike - premium received

Example

results = op.short_puts(
    data,
    max_entry_dte=45,
    exit_dte=21,
    leg1_delta={"target": 0.20, "min": 0.15, "max": 0.25},  # ~20 delta for safer premium
    min_bid_ask=0.10
)

Use Cases

  • Generating income in bullish markets
  • Getting "paid to wait" to buy stock at a lower price
  • High-probability credit strategies
  • Wheel strategy (sell puts, get assigned, sell calls)

Assignment Considerations

If the option is in-the-money at expiration, you'll be obligated to buy shares at the strike price. Ensure you have capital or can close before expiration.


Greeks Filtering

All single-leg strategies support delta filtering to target specific probability ranges:

# Target 30-delta options (roughly 30% probability ITM)
results = op.long_calls(
    data,
    leg1_delta={"target": 0.30, "min": 0.25, "max": 0.35},
    delta_interval=0.05  # Group results by delta ranges
)

Slippage Models

Configure realistic fill prices:

# Use liquidity-based slippage
results = op.long_calls(
    data,
    slippage='liquidity',
    fill_ratio=0.5,  # 50% through the spread
    reference_volume=1000  # Minimum volume for liquid options
)

Available slippage modes: - 'mid' - Fill at mid-price (bid+ask)/2 (default) - 'spread' - Buy at ask, sell at bid (worst case) - 'liquidity' - Dynamic fill based on volume/open interest

Comparison Table

Strategy Direction Max Profit Max Loss Best When
Long Call Bullish Unlimited Premium Expecting rally
Short Call Bearish/Neutral Premium Unlimited Expecting decline/flat
Long Put Bearish Substantial Premium Expecting drop
Short Put Bullish/Neutral Premium Substantial Expecting rise/flat

Next Steps