Naked Option Margin: Reg T Math How E Dey Work
How much margin naked option dey take? See Reg T minimum formula, both branches, Python example, and real option chains before you trade.
Margin wey you need to sell naked options dey come from published formula, and you fit calculate am yourself before trade enter. Minimum for one uncovered equity option na whichever of two branches high pass, with premium received added on top of each one: 20% of underlying share price minus the amount wey option dey out of the money, or 10% floor. Every percentage for this page na regulatory minimum. Broker fit hold account to more, and most brokers dey do so.
How dem dey calculate margin for selling naked options?
Option dey uncovered, or naked, when person sell am without anything backing am: short call with no shares for account, or short put with no cash kept against strike. Cash secured put keep the full strike value aside instead. Na different arrangement with different requirement.
Regulation T set the credit rules for margin account. The uncovered option percentages dey inside FINRA Rule 4210 and exchange margin manuals wey follow am. The arithmetic dey work per share first, then dem charge am per contract of 100 shares:
- Uncovered call, first branch: premium received, plus 20% of underlying price, minus out-of-the-money amount (strike minus underlying, with zero as the minimum).
- Uncovered put, first branch: premium received, plus 20% of underlying price, minus out-of-the-money amount (underlying minus strike, with zero as the minimum).
- Floor branch for call: premium received plus 10% of underlying price.
- Floor branch for put: premium received plus 10% of strike price.
Requirement na whichever one come out bigger. Broad based index options use the same structure, but 15% replace 20%. Selling uncovered options also need margin account with correct option approval level, and margin account come with the pattern day trader rule.
Premium dey inside both branches, so e raise the full number without changing which branch go bind. Distance na the thing wey decide am. For call, both branches equal when strike sit exactly 10% above underlying. For put, dem equal when strike sit roughly 11.1% below am. Inside those distances, 20% branch bigger. Past them, floor take over.
Why 20% branch and 10% floor cross
The panel below show every listed AAPL strike for the last trading session of June 2026, from just below share price reach roughly 18% above am. E use contracts wey get 20 to 45 days before expiry. E calculate both branches per share for uncovered call at every strike. Premium no dey inside this part so the shape go clear. If you add premium, both lines go shift upward together.
The exact SQL behind every number
SELECT
round(toFloat64(strike_price), 2) AS strike,
round(0.20 * max(toFloat64(underlying_close))
- greatest(toFloat64(strike_price) - max(toFloat64(underlying_close)), 0.0), 2) AS main_branch,
round(0.10 * max(toFloat64(underlying_close)), 2) AS floor_branch,
round(0.20 * max(toFloat64(underlying_close))
- greatest(toFloat64(strike_price) - max(toFloat64(underlying_close)), 0.0)
- 0.10 * max(toFloat64(underlying_close)), 2) AS branch_gap
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = (
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date BETWEEN '2026-06-01' AND '2026-06-30'
)
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND toFloat64(strike_price) BETWEEN 0.98 * toFloat64(underlying_close)
AND 1.18 * toFloat64(underlying_close)
GROUP BY strike_price
ORDER BY strikeFloor line flat. Ten percent of share price no depend on strike, so e remain at $28.9 per share across all 12 strikes for the panel. First branch slope downward, from $57.8 at lowest strike to $6.81 at highest. Na because every extra dollar of distance come straight off am. The branch_gap column na first branch minus floor: e dey above zero where 20% branch bind, below zero where floor bind, and e cross at strike wey dey 10% above share price.
How much margin naked put need?
First branch remain the same, but floor different: na 10% of strike, no be 10% of underlying. That one change the whole picture. Floor no longer flat; e slope with strike, and crossing point move to roughly 11% below share price.
The exact SQL behind every number
SELECT
round(toFloat64(strike_price), 2) AS strike,
round(0.20 * max(toFloat64(underlying_close))
- greatest(max(toFloat64(underlying_close)) - toFloat64(strike_price), 0.0), 2) AS main_branch,
round(0.10 * toFloat64(strike_price), 2) AS floor_branch,
round(0.20 * max(toFloat64(underlying_close))
- greatest(max(toFloat64(underlying_close)) - toFloat64(strike_price), 0.0)
- 0.10 * toFloat64(strike_price), 2) AS branch_gap
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date = (
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date BETWEEN '2026-06-01' AND '2026-06-30'
)
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
AND toFloat64(strike_price) BETWEEN 0.82 * toFloat64(underlying_close)
AND 1.02 * toFloat64(underlying_close)
GROUP BY strike_price
ORDER BY strikeFor the put strikes here, floor move from $24 per share at lowest strike to $29 at highest. First branch dey climb as strike dey near the money. Far below market, where sellers wey run the wheel strategy often operate, floor na the number wey bind. Na that floor stop deep out-of-the-money naked put from ever being free to carry.
How much buying power one naked contract tie down?
Per-share figures na the formula. Per-contract figures na the amount wey leave the account. The panel take 5 household names from the same June 2026 session. E pick listed call strike wey nearest to 5% above each share price, then multiply both branches by the 100 shares wey one contract cover.
The exact SQL behind every number
SELECT
ticker,
round(100 * (0.20 * share_price - greatest(strike - share_price, 0.0)), 0) AS main_branch,
round(100 * (0.10 * share_price), 0) AS floor_branch
FROM
(
SELECT
underlying_symbol AS ticker,
max(toFloat64(underlying_close)) AS share_price,
argMin(toFloat64(strike_price),
abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1.05)) AS strike
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO')
AND date = (
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date BETWEEN '2026-06-01' AND '2026-06-30'
)
AND days_to_expiry BETWEEN 20 AND 45
AND iv_converged = 1
AND volume > 0
GROUP BY underlying_symbol
)
ORDER BY main_branch DESCOne uncovered SPY call at that distance get $11156 minimum for one contract, against $1252 for KO. Same trade, same formula. The number follow share price, not anything special about the option itself. At 5% out of the money, first branch bind for every name here, and the taller bar in each pair na the one wey count.
Check any position with short Python script
The formula fit enter one file. E need python3 and nothing else: standard library only, no pip install and no network. Save am as naked_margin.py.
#!/usr/bin/env python3
"""Reg T style minimum for one uncovered (naked) equity option.
Prints both branches of the requirement and the one that binds.
Standard library only. Educational, not a broker quote.
"""
import argparse
SHARES_PER_CONTRACT = 100
def branches(kind, spot, strike, premium, rule_pct, floor_pct):
if kind == 'call':
out_of_money = max(strike - spot, 0.0)
floor_base = spot
else:
out_of_money = max(spot - strike, 0.0)
floor_base = strike
rule = rule_pct * spot - out_of_money + premium
floor = floor_pct * floor_base + premium
return rule, floor
def report(kind, spot, strike, premium, rule_pct, floor_pct):
rule, floor = branches(kind, spot, strike, premium, rule_pct, floor_pct)
if rule >= floor:
binds = '{0:.0%} branch'.format(rule_pct)
else:
binds = '{0:.0%} floor'.format(floor_pct)
print('naked {0}: spot {1:.2f}, strike {2:.2f}, premium {3:.2f}'.format(
kind, spot, strike, premium))
print(' {0:.0%} branch: {1:.2f} per share, {2:.2f} per contract'.format(
rule_pct, rule, rule * SHARES_PER_CONTRACT))
print(' {0:.0%} floor: {1:.2f} per share, {2:.2f} per contract'.format(
floor_pct, floor, floor * SHARES_PER_CONTRACT))
print(' binds: {0}, requirement {1:.2f} per contract'.format(
binds, max(rule, floor) * SHARES_PER_CONTRACT))
def main():
ap = argparse.ArgumentParser(description='Reg T style naked option minimum')
ap.add_argument('--spot', type=float, required=True, help='underlying price')
ap.add_argument('--strike', type=float, required=True, help='strike price')
ap.add_argument('--premium', type=float, required=True, help='premium per share')
ap.add_argument('--index', action='store_true', help='broad based index rate')
args = ap.parse_args()
rule_pct = 0.15 if args.index else 0.20
for kind in ('call', 'put'):
report(kind, args.spot, args.strike, args.premium, rule_pct, 0.10)
if __name__ == '__main__':
main()
Two runs, chosen so the branch wey bind go change between dem. Both use round hypothetical inputs.
$ python3 naked_margin.py --spot 100 --strike 105 --premium 1.50
naked call: spot 100.00, strike 105.00, premium 1.50
20% branch: 16.50 per share, 1650.00 per contract
10% floor: 11.50 per share, 1150.00 per contract
binds: 20% branch, requirement 1650.00 per contract
naked put: spot 100.00, strike 105.00, premium 1.50
20% branch: 21.50 per share, 2150.00 per contract
10% floor: 12.00 per share, 1200.00 per contract
binds: 20% branch, requirement 2150.00 per contract
$ python3 naked_margin.py --spot 100 --strike 85 --premium 0.60
naked call: spot 100.00, strike 85.00, premium 0.60
20% branch: 20.60 per share, 2060.00 per contract
10% floor: 10.60 per share, 1060.00 per contract
binds: 20% branch, requirement 2060.00 per contract
naked put: spot 100.00, strike 85.00, premium 0.60
20% branch: 5.60 per share, 560.00 per contract
10% floor: 9.10 per share, 910.00 per contract
binds: 10% floor, requirement 910.00 per contract
For first run, strike dey 5% above underlying, inside the 10% crossover, so first branch bind for both call and put. For second run, strike dey 15% below underlying. That leave call in the money for first branch and push put far enough out that 10% floor take the position. Put your own inputs inside --spot, --strike and --premium, and add --index for the 15% broad based index figure. Wetin e print na floor on the amount broker go ask, never ceiling.
Wetin changes the requirement after you sell?
The number no set once and remain so. Dem calculate am again every day against underlying price, and underlying dey move. The trace below hold short call strike roughly 10% above where AAPL open for April 2026, then follow the requirement as percentage of share price reach end of June.
The exact SQL behind every number
SELECT
toString(d.dt) AS session_date,
round(d.px, 2) AS underlying_close,
round(100 * (s.short_strike - d.px) / d.px, 2) AS cushion_pct,
round(100 * greatest(0.20 * d.px - greatest(s.short_strike - d.px, 0.0),
0.10 * d.px) / d.px, 2) AS requirement_pct
FROM
(
SELECT
date AS dt,
max(toFloat64(underlying_close)) AS px
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date BETWEEN '2026-04-01' AND '2026-06-30'
GROUP BY date
) AS d
CROSS JOIN
(
SELECT round(1.10 * argMin(toFloat64(underlying_close), date), 0) AS short_strike
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date BETWEEN '2026-04-01' AND '2026-06-30'
) AS s
ORDER BY d.dtThe position start on the crossover, at 10.19% of share price with 9.81% headroom to strike, and finish the window at 20%. As stock dey rise toward short call strike, out-of-the-money subtraction dey reduce, and requirement dey move up toward full 20%. Four other things fit move am:
- Assignment end the option and give person stock or short stock position with its own requirement. Early assignment on short options dey happen more around dividends and deep in-the-money strikes.
- House requirements dey sit on top of the minimum. Brokers dey regularly set their own figures above Reg T for uncovered positions, sometimes several times higher for volatile names.
- Move against the position raise requirement while account equity fall at the same time. The gap between both na wetin produce maintenance call.
- Portfolio margin na separate regime. Approved account dey charged based on stress test of the whole book, around a 15% move up or down in an equity underlying, with six-figure account minimum at most brokers. For hedged book, the figure fit land far below Reg T, and e dey move faster when volatility rise.
None of this na recommendation. Uncovered selling carry unbounded loss on call side and very large loss on put side, and how risky options trading is explain that distribution with data.
FAQ
How much margin I need to sell naked put?
Regulatory minimum na whichever of two branches high pass, and both include premium received: 20% of underlying price minus out-of-the-money amount, or 10% of strike price. For $100 stock, $90 strike put sold for $0.60 work out to $10.60 per share against $9.60 floor, so na $1,060 for one contract. Brokers commonly require more.
Naked option margin dey the same for every broker?
No. Reg T and FINRA Rule 4210 set the minimum, and every broker fit add house requirement above am. Many brokers dey do so for single names and around earnings dates. Published formula give you the bottom of the range, not the number wey your platform go show.
Premium wey I collect count toward the requirement?
Premium received dey added to both branches of the formula, and dem credit am to account when trade settle. E never change which branch bind because e appear on both sides with equal amount.
Wetin be margin for naked index option?
Broad based index options use 15% instead of 20%, with same 10% floor and same premium term. Options on ETF wey track broad index dey treated as equity options at 20%, so lower percentage no follow the exposure across wrappers. Both remain regulatory minimums.
Naked option requirement fit change while I hold am?
Yes. Dem recalculate am from underlying price, so e move whenever stock move, as the trace above show. Rise toward short call strike raise the number, and broker fit also raise house requirement on open position.
Every panel here carry the SQL wey produce am, so expand any one to see exactly how dem calculate branch. To run the same chain math on a name wey you dey follow, ask for am in plain English on the Strasmore terminal.