Маржа для продажу непокритих опціонів: формула Reg T
Як розрахувати маржу для продажу непокритого опціону? Формула мінімальної вимоги Reg T, обидві гілки, короткий скрипт Python і реальні опціонні ланцюжки.
Маржа для продажу непокритих опціонів розраховується за опублікованою формулою, тому її можна визначити ще до укладення угоди. Мінімальна вимога для одного непокритого опціону на акції дорівнює більшому з двох значень. До кожного додається отримана премія: 20% ціни базової акції мінус сума, на яку опціон є out of the money, або мінімальний рівень у 10%. Усі відсотки на цій сторінці є регуляторними мінімумами. Брокер може встановити вищу вимогу, і більшість так і робить.
Як розраховується маржа для продажу непокритих опціонів?
Опціон є непокритим, або naked, якщо за ним нічого не зарезервовано: короткий call без акцій на рахунку або короткий put без грошових коштів під strike. Put із грошовим забезпеченням передбачає резервування всієї суми strike. Це інша конструкція з іншою вимогою до маржі.
Regulation T встановлює правила кредитування для маржинального рахунку. Відсотки для непокритих опціонів визначені у Rule 4210 FINRA та біржових посібниках із маржі, які відтворюють ці правила. Розрахунок виконується на одну акцію, а потім застосовується до контракту на 100 акцій:
- Непокритий call, перша складова: отримана премія плюс 20% ціни базового активу мінус сума, на яку опціон є out of the money (strike мінус ціна базового активу, але не менше нуля).
- Непокритий put, перша складова: отримана премія плюс 20% ціни базового активу мінус сума, на яку опціон є out of the money (ціна базового активу мінус strike, але не менше нуля).
- Мінімальна складова для call: отримана премія плюс 10% ціни базового активу.
- Мінімальна складова для put: отримана премія плюс 10% ціни strike.
Вимогою є більше з цих значень. Для опціонів на широкі фондові індекси замість 20% застосовується 15%. Продаж непокритих опціонів також потребує маржинального рахунку з відповідним рівнем дозволу на торгівлю опціонами. Маржинальний рахунок водночас передбачає дію правила pattern day trader.
Премія входить до обох складових. Вона збільшує загальний розмір вимоги, але не змінює складову, яка визначає підсумкове значення. Вирішальною є відстань до strike. Для call дві складові дорівнюють одна одній, коли strike розташований рівно на 10% вище ціни базового активу. Для put точка перетину розташована приблизно на 11,1% нижче. У межах цієї відстані більшою є складова 20%. За межами цієї відстані застосовується мінімальна складова.
Чому складова 20% перетинається з мінімальним рівнем 10%
Панель нижче охоплює всі доступні strike AAPL на останній сесії червня 2026 року — від рівнів трохи нижче ціни акції до приблизно 18% вище неї. Розглядаються контракти з терміном до експірації від 20 до 45 днів. Для кожного strike розраховано обидві складові на одну акцію для непокритого call. Премію виключено, щоб зберегти чисту форму графіка. Її додавання одночасно змістило б обидві лінії вгору.
Точний SQL-код для кожного числа
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 strikeЛінія мінімального рівня є горизонтальною. Десять відсотків ціни акції не залежать від strike, тому значення становить $28.9 на акцію для всіх 12 strike у панелі. Перша складова знижується від $57.8 на найнижчому strike до $6.81 на найвищому, оскільки кожен додатковий долар відстані безпосередньо зменшує її. Стовпець branch_gap — це різниця між першою складовою та мінімальним рівнем. Значення вище нуля означають, що визначальною є складова 20%, а значення нижче нуля — що застосовується мінімальний рівень. Перетин відбувається на strike, що на 10% перевищує ціну акції.
Скільки маржі потрібне для непокритого put?
Перша складова залишається такою самою, але мінімальний рівень змінюється: він становить 10% strike, а не 10% ціни базового активу. Ця заміна змінює картину. Мінімальний рівень більше не є горизонтальною лінією і змінюється разом зі strike. Точка перетину переміщується приблизно на 11% нижче ціни акції.
Точний SQL-код для кожного числа
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 strikeДля наведених у панелі strike мінімальний рівень змінюється від $24 на акцію для найнижчого strike до $29 для найвищого. Перша складова зростає в міру наближення strike до ціни базового активу. Значно нижче ринку, де часто працюють продавці, які використовують стратегію wheel, саме мінімальний рівень є визначальним. Він не дає змоги безстроково утримувати непокритий put із глибоким статусом out of the money без вимоги до забезпечення.
Скільки купівельної спроможності блокує один непокритий контракт?
Формула визначає значення на одну акцію. На рахунку враховується значення на один контракт. Панель охоплює 5 відомих компаній на тій самій сесії червня 2026 року. Для кожної обрано доступний strike call, найближчий до рівня на 5% вище ціни акції, після чого обидві складові помножено на 100 акцій, які охоплює контракт.
Точний SQL-код для кожного числа
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 DESCОдин непокритий SPY call на такій відстані передбачає мінімальну вимогу $11156 для одного контракту проти $1252 для KO. Угода та сама, як і формула. Значення залежить від ціни акції, а не від будь-якої іншої характеристики опціону. За статусу out of the money на 5% перша складова є визначальною для кожної компанії в цій вибірці. Вища смуга в кожній парі показує значення, яке застосовується.
Перевірте будь-яку позицію за допомогою короткого Python-скрипту
Формула поміщається в один файл. Потрібен лише python3 і стандартна бібліотека. Встановлення пакетів через pip та доступ до мережі не потрібні. Збережіть файл під назвою 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()
Два запуски підібрано так, щоб визначальна складова в них була різною. В обох випадках використано округлені гіпотетичні дані.
$ 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
У першому запуску strike розташований на 5% вище базового активу, тобто в межах 10-відсоткової зони перетину. Для call і put визначальною є перша складова. У другому strike розташований на 15% нижче базового активу. Для call він перебуває в money за першою складовою, а для put відстань out of the money достатня, щоб застосовувався мінімальний рівень 10%. Підставте власні дані за допомогою --spot, --strike і --premium. Додайте --index, щоб використати ставку 15% для опціонів на широкі фондові індекси. Результат показує мінімум, який може вимагати брокер, а не максимальну суму.
Що змінює вимогу після продажу опціону
Значення не фіксується в момент укладення угоди. Воно щодня перераховується на основі ціни базового активу, а ціна змінюється. У наведеному нижче відстеженні strike короткого call зафіксовано приблизно на 10% вище ціни відкриття AAPL у квітні 2026 року. Далі показано вимогу як відсоток ціни акції до кінця червня.
Точний SQL-код для кожного числа
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.dtСпочатку позиція перебуває в точці перетину — на рівні 10.19% ціни акції — із запасом 9.81% до strike. Наприкінці періоду цей показник становить 20%. Коли акція зростає до strike короткого call, віднімання суми out of the money зменшується, а вимога наближається до повних 20%. На неї також впливають чотири інші чинники:
- Призначення за опціоном припиняє дію контракту та передає акції або створює коротку позицію в акціях, для якої діє окрема вимога. Дострокове призначення за короткими опціонами частіше відбувається навколо дивідендних дат і для strike, що значно перебувають у money.
- Внутрішні вимоги брокера додаються до мінімуму. Для непокритих позицій брокери регулярно встановлюють власні значення вище вимог Reg T, а для волатильних акцій вони іноді можуть бути кратними регуляторному мінімуму.
- Рух ціни проти позиції підвищує вимогу, одночасно зменшуючи капітал на рахунку. Різниця між цими показниками призводить до maintenance call.
- Portfolio margin є окремим режимом. Для схваленого рахунку вимога визначається стрес-тестом усього портфеля, зазвичай із рухом базової акції приблизно на 15% вгору або вниз. У більшості брокерів мінімальний розмір такого рахунку становить шестизначну суму. Для хеджованого портфеля вимога може бути значно нижчою за Reg T, але вона швидше змінюється зі зростанням волатильності.
Це не рекомендація. Продаж непокритих опціонів передбачає необмежений збиток для call і дуже значний збиток для put. У матеріалі наскільки ризикованою є торгівля опціонами цей розподіл розглянуто на основі даних.
Часті запитання
Скільки маржі потрібно для продажу непокритого put?
Регуляторний мінімум — це більше з двох значень, і до обох додається отримана премія: 20% ціни базового активу мінус сума, на яку опціон є out of the money, або 10% ціни strike. Для акції вартістю $100 put зі strike $90, проданий за $0,60, дає $10,60 на акцію проти мінімального рівня $9,60. Отже, для одного контракту потрібно $1 060. Брокери зазвичай вимагають більше.
Чи однакова маржа для непокритих опціонів у всіх брокерів?
Ні. Reg T і Rule 4210 FINRA встановлюють мінімум, а кожен брокер може додати власну вимогу. Багато брокерів роблять це для окремих акцій і напередодні публікації фінансової звітності. Опублікована формула визначає нижню межу, а не значення, яке відображатиме ваша платформа.
Чи враховується отримана премія у вимозі?
Отримана премія додається до обох складових формули та зараховується на рахунок після розрахунків за угодою. Вона не змінює визначальну складову, оскільки в однаковому розмірі входить до обох частин.
Яка маржа потрібна для непокритого опціону на індекс?
Для опціонів на широкі фондові індекси замість 20% застосовується 15%. Мінімальний рівень 10% і складова премії залишаються без змін. Опціони на ETF, який відстежує широкий індекс, вважаються опціонами на акції, тому для них застосовується ставка 20%. Нижча ставка не переноситься на той самий ризик через іншу структуру інструменту. Обидва значення є регуляторними мінімумами.
Чи може змінитися вимога для непокритого опціону, поки я його утримую?
Так. Вона перераховується на основі ціни базового активу, тому змінюється разом із ціною акції, як показано вище. Зростання ціни до strike короткого call підвищує вимогу. Брокер також може збільшити власну вимогу для відкритої позиції.
Кожна панель містить SQL-код, який використано для її побудови. Розгорніть будь-яку панель, щоб побачити точний розрахунок складової. Щоб виконати такий самий розрахунок для акції, за якою ви стежите, сформулюйте запит звичайною англійською мовою в терміналі Strasmore.