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¶
- Learn about Straddles & Strangles
- Explore Vertical Spreads for defined-risk alternatives
- See more Examples