Греки опционов по Блэку — Шоулзу: Гамма и Дельта
Содержание:
Введение
Традиционные торговые стратегии в основном сосредоточены на направлении движения цены — прогнозировании вероятности роста или падения стоимости актива, — но они часто упускают из виду, как эволюционирует скорость изменения экспозиции по мере колебаний цены. Это создает серьезную проблему: трейдер может правильно позиционировать себя на рынке, но при этом понести неожиданные убытки, поскольку чувствительность его портфеля к изменениям цен (Дельта) увеличивается быстрее, чем ожидалось. Без понимания такого динамического поведения трейдеры становятся уязвимыми перед резкими скачками волатильности и нелинейными движениями цен.
Решение заключается в включении «греков» Блэка-Шоулза, в частности Гамма и Дельта, в управление рисками и разработку стратегии. Благодаря количественной оценке изменения Дельты опциона в зависимости от цены базового актива, значение Гаммы позволяет трейдерам прогнозировать и корректировать свои позиции заблаговременно, а не реагировать постфактум. Используя стратегии Гамма-хеджирования и Дельта-нейтральные стратегии, трейдеры могут стабилизировать свою рыночную экспозицию, извлекать выгоду из волатильности и сохранять контроль даже на турбулентных рынках. По сути, освоение Гаммы и Дельты превращает неопределенность в системную возможность.
Что такое Гамма и Дельта
В трейдинге Гамма (Γ) — один из «греков» (греческих символов) в опционной торговле. С ее помощью измеряют темп изменения Дельты относительно движения цены базового актива. Дельта (Δ) показывает, насколько изменится цена опциона при изменении цены базового актива на одну единицу. Гамма (Γ) показывает, насколько сама Дельта изменится при перемещении базового актива на 1 единицу. Таким образом, Гамма — это, по сути, ускорение Дельты.
Положительная Гамма (+Γ):
- У длинных позиций по опционам (колл или пут) Гамма положительная.
- При росте цены Дельта увеличивается (ваш опцион становится более чувствительным и выгодным).
- Когда цена падает, дельта уменьшается (ваш опцион снижает риск).
- Это означает, что риск естественным образом изменяется в вашу пользу; прибыль может ускориться, если вы окажетесь правы.
- Например, если вы покупаете колл-опцион, и цена акций начинает расти, ваша Дельта увеличивается, что делает вашу позицию еще более бычьей.
Отрицательная Гамма (-Γ):
- У коротких позиций по опционам (продажа колл- или пут-опционов) гамма отрицательная.
- Когда цена растет, уменьшается ли Дельта в вашу пользу? Нет, на самом деле она работает против вас.
- Когда цена падает, дельта также смещается против вас.
- Это означает, что вы боретесь с ускорением и, возможно, вам постоянно придется использовать хеджирование.
- Например, если вы продаете колл-опцион, а цена акции растет, ваша Дельта увеличивается (вы становитесь более подвержены риску по короткой позиции), что может быстро привести к убыткам.
Наглядный пример Гаммы и Дельты:

Обратите внимание, как Дельта переходит от ~0 к ~1 по мере превышения базовой ценой цены исполнения (100). Максимальное значение Гаммы наблюдается вблизи цены исполнения, а это значит, что Дельта изменяется там быстрее всего. По мере удаления цены от цены исполнения Гамма снижается почти до нуля. Это объясняет, почему длинные позиции (+Γ) приносят наибольшую выгоду, когда базовый актив находится вблизи цены исполнения: Дельта «ускоряется» с движением цены. Короткие позиции по опционам (-Γ) наиболее рискованны вблизи цены исполнения, поскольку Дельта может быстро сместиться в убыток.
Влияние +Гамма на P&L по сравнению с –Гамма:

Влияние +Гаммы и -Гаммы на профиль выплат: прибыль растет при значительных колебаниях рынка (как вверх, так и вниз). Именно поэтому трейдеры, торгующие длинными позициями на основе Гаммы, стремятся к волатильности. Убытки растут быстрее при значительных колебаниях рынка. Трейдеры, торгующие короткими позициями на основе Гаммы, получают прибыль только в том случае, если рынок остается спокойным (имеет низкую волатильность).
Начало работы
//+------------------------------------------------------------------+ //| G&D222.mq5 | //| GIT under Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com/en/users/johnhlomohang/ | //+------------------------------------------------------------------+ #property copyright "GIT under Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com/en/users/johnhlomohang/" #property version "1.00" #property script_show_inputs #include <Math\Stat\Normal.mqh> #include <Trade\SymbolInfo.mqh>
Для начала настраиваем базовый MQL5-скрипт со специфическими свойствами, включая необходимые библиотеки. Параметр #property script_show_inputs указывает терминалу MetaTrader 5 отображать входные параметры в диалоговом окне ввода скрипта при его запуске. Далее следует параметр #include<Math\Stat\Normal.mqh> , который импортирует статистические функции, такие как нормальное распределение, используемые для расчетов вероятности и ценообразования опционов. Наконец, параметр #include <Trade\SymbolInfo.mqh> предоставляет доступ к подробной информации о торговом символе (например, размер тика, значение в пунктах или размер контракта), необходимой для точного управления рынком и инструментами.
// -------------------- Utility functions --------------------------- // Standard normal PDF double NormalPDF(double x) { return MathExp(-0.5*x*x)/MathSqrt(2.0*M_PI); } // Standard normal CDF (Abramowitz-Stegun) double NormalCDF(double x) { double a1= 0.254829592, a2=-0.284496736, a3=1.421413741, a4=-1.453152027, a5=1.061405429, p=0.3275911; int sign = 1; if(x < 0) { sign = -1; x = -x; } double t = 1.0/(1.0 + p*x); double y = 1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*MathExp(-x*x); return 0.5*(1.0 + sign*y); }
В этом разделе кода определяем две вспомогательные функции для поддержки математической основы модели Блэка-Шоулза. Функция NormalPDF() вычисляет функцию плотности вероятности (PDF) стандартного нормального распределения, которая измеряет вероятность появления некоего значения в непрерывном распределении вероятностей. Это ключевой элемент при расчете таких показателей чувствительности опционов, как дельта и гамма, поскольку они основаны на статистических свойствах нормально распределенной доходности.
Функция NormalCDF() оценивает кумулятивную функцию распределения (CDF) стандартного нормального распределения, используя приближение Абрамовица-Стегуна — хорошо известный численный метод для эффективного вычисления площади под кривой нормального распределения. Эта функция позволяет модели определять вероятность того, что значение переменной окажется ниже определенного уровня — критически важный шаг при оценке вероятностей изменения цены опциона и уровня риска в финансовых моделях.
// Black-Scholes d1,d2 void BS_d1d2(double S, double K, double sigma, double T, double r, double q, double &d1, double &d2) { if(T <= 0 || sigma <= 0) { d1 = d2 = 0.0; return; } double sqt = sigma * MathSqrt(T); d1 = (MathLog(S/K) + (r - q + 0.5*sigma*sigma)*T) / sqt; d2 = d1 - sqt; } // Black-Scholes Delta for call double BS_DeltaCall(double S, double K, double sigma, double T, double r, double q) { if(T <= 0) return (S > K) ? 1.0 : 0.0; double d1,d2; BS_d1d2(S,K,sigma,T,r,q,d1,d2); return MathExp(-q*T) * NormalCDF(d1); } // Black-Scholes Gamma (same for calls and puts) double BS_Gamma(double S, double K, double sigma, double T, double r, double q) { if(T <= 0 || sigma <= 0) return 0.0; double d1,d2; BS_d1d2(S,K,sigma,T,r,q,d1,d2); double pdf = NormalPDF(d1); return (pdf * MathExp(-q*T)) / (S * sigma * MathSqrt(T)); }
Первая функция (BS_d1d2()) вычисляет промежуточные переменные d₁ и d₂, которые являются важными компонентами модели ценообразования опционов Блэка-Шоулза. Эти термины количественно определяют стандартизированное расстояние между текущей ценой и ценой исполнения опциона, скорректированное с учетом волатильности и времени до истечения срока действия. По сути, они помогают определить вероятность того, что опцион окажется в деньгах, образуя математическую основу для расчета чувствительности опционов и их цен.
Вторая функция (BS_DeltaCall()) вычисляет дельту опциона колл, которая показывает, насколько, по прогнозам, изменится цена опциона в ответ на небольшое изменение цены базового актива. Более высокое значение дельты означает, что опцион ведет себя в большей степени как базовый актив. В этой формуле дельта корректируется с учетом дивидендной доходности (q), что делает ее более реалистичной для активов, выплачивающих дивиденды или несущих затраты на хранение, — ключевой фактор для таких акций, как EU50.
Наконец, функция BS_Gamma() вычисляет гамму — скорость изменения дельты относительно движения цены. Гамма позволяет оценить кривизну или выпуклость стоимости опциона, указывая на то, как будет меняться дельта по мере движения рынка. Высокие значения гаммы указывают на высокую чувствительность дельты опциона к изменениям цены, что является важнейшей информацией для стратегий хеджирования и управления рисками, таких как гамма-скальпинг.
// Calculate days until December 31, 2025 double DaysUntilExpiry() { datetime expiry = D'2025.12.31 23:59:59'; datetime current = TimeCurrent(); double days = (expiry - current) / (60.0 * 60.0 * 24.0); return MathMax(days / 365.0, 0.0); // Convert to years } // -------------------- Input parameters ------------------------ input double K = 5000.0; // Strike price (adjust based on current EU50 price) input double r = 0.04; // Interest rate (4% - more realistic for current rates) input double sigma = 0.1691; // Annualized volatility (16.91% as specified) input int BarsToCalc = 100; // How many bars back to calculate input double q = 0.02; // Dividend yield (2% - typical for EU50)
Функция DaysUntilExpiry() вычисляет выраженное в годах время, оставшееся до 31 декабря 2025 года. Для этого она вычисляет разницу между текущим временем и датой истечения срока действия в секундах, преобразования этой разницы в дни, а затем деления на 365. Это значение представляет собой время до наступления срока погашения (T), используемое в модели Блэка-Шоулза, — ключевой входной параметр, влияющий на то, как стоимость опционов снижается со временем (известный как тета-распад). Использование функции MathMax() гарантирует, что возвращаемое значение никогда не будет меньше нуля, даже если текущая дата уже истекла.
Во втором разделе определяются входные параметры, которые делают скрипт гибким и пригодным для разных рыночных условий. К ним относятся цена исполнения (K), процентная ставка (r), волатильность (сигма), количество баров для расчета (BarsToCalc) и дивидендная доходность (q). В совокупности эти входные данные позволяют трейдерам моделировать реалистичные рыночные условия, особенно для таких активов, как EU50, где процентные ставки, волатильность и дивиденды играют значительную роль в ценообразовании и оценке рисков.
// -------------------- Main calculation function -------------------------------- void OnStart() { Print("Starting Delta and Gamma calculation for ", _Symbol, " with Dec 2025 expiry..."); // Calculate dynamic time to expiry double timeToExpiry = DaysUntilExpiry(); PrintFormat("Time to expiry: %.4f years (%.0f days)", timeToExpiry, timeToExpiry * 365); // Get historical data MqlRates rates[]; int copied = CopyRates(_Symbol, PERIOD_D1, 0, BarsToCalc, rates); if(copied <= 0) { Print("Failed to get historical data. Error: ", GetLastError()); return; } PrintFormat("Successfully retrieved %d bars of historical data", copied); // Create CSV filename with symbol and timestamp string filename = "EU50_DeltaGamma_" + IntegerToString(TimeCurrent()) + ".csv"; int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_ANSI, ','); if(handle == INVALID_HANDLE) { Print("Failed to open file for writing. Error: ", GetLastError()); return; } // Write CSV headers FileWrite(handle, "Date", "Time", "Close", "Delta", "Gamma", "Strike", "TimeToExpiry_Days"); Print("\n=== EU50 Delta and Gamma Calculations (Dec 2025 Expiry) ==="); Print("Date\t\tClose\t\tDelta\t\tGamma\t\tDays to Expiry"); Print("----------------------------------------------------------------"); int displayCounter = 0; // Calculate delta and gamma for each bar (from oldest to newest) for(int i = copied - 1; i >= 0; i--) { // Calculate time to expiry for each historical point datetime barTime = rates[i].time; datetime expiry = D'2025.12.31 23:59:59'; double daysToExpiry = (expiry - barTime) / (60.0 * 60.0 * 24.0); double T_historical = MathMax(daysToExpiry / 365.0, 0.0); double S = rates[i].close; double delta = BS_DeltaCall(S, K, sigma, T_historical, r, q); double gamma = BS_Gamma(S, K, sigma, T_historical, r, q); // Format date and time string dateStr = TimeToString(rates[i].time, TIME_DATE); string timeStr = TimeToString(rates[i].time, TIME_MINUTES); // Write to CSV file FileWrite(handle, dateStr, timeStr, DoubleToString(S, 2), DoubleToString(delta, 6), DoubleToString(gamma, 6), DoubleToString(K, 2), DoubleToString(daysToExpiry, 1)); // Print to Experts tab (with formatting for readability) if(displayCounter % 15 == 0 || i == copied - 1 || i == 0) // Print every 15th bar plus first and last { PrintFormat("%s\t%.2f\t%.6f\t%.6f\t%.0f days", dateStr, S, delta, gamma, daysToExpiry); } displayCounter++; } FileClose(handle); // Calculate current values with exact time to expiry double currentT = DaysUntilExpiry(); double currentPrice = SymbolInfoDouble(_Symbol, SYMBOL_BID); double currentDelta = BS_DeltaCall(currentPrice, K, sigma, currentT, r, q); double currentGamma = BS_Gamma(currentPrice, K, sigma, currentT, r, q); Print(""); Print("=============================================================="); PrintFormat("CALCULATION COMPLETE - Results saved to: %s", filename); Print(""); Print("CURRENT MARKET VALUES:"); PrintFormat("EU50 Price: %.2f", currentPrice); PrintFormat("Strike: %.2f", K); PrintFormat("Moneyness: %.2f%%", (currentPrice/K - 1.0) * 100.0); PrintFormat("Delta: %.6f", currentDelta); PrintFormat("Gamma: %.6f", currentGamma); PrintFormat("Days to Expiry: %.0f", currentT * 365); Print(""); Print("PARAMETERS USED:"); PrintFormat("Volatility: %.4f (16.91%%)", sigma); PrintFormat("Interest Rate: %.3f (4%%)", r); PrintFormat("Dividend Yield: %.3f (2%%)", q); PrintFormat("Total bars processed: %d", copied); // Risk assessment Print(""); Print("RISK ASSESSMENT:"); if(currentDelta > 0.7) Print("→ High Delta: Option behaves like underlying stock"); else if(currentDelta > 0.3) Print("→ Moderate Delta: Sensitive to price movements"); else Print("→ Low Delta: Limited price sensitivity"); if(currentGamma > 0.02) Print("→ High Gamma: Delta changes rapidly with price moves"); else if(currentGamma > 0.005) Print("→ Moderate Gamma: Delta has reasonable sensitivity"); else Print("→ Low Gamma: Delta relatively stable"); Alert("EU50 Delta & Gamma Calculation Complete!\nFile: ", filename, "\nCurrent Delta: ", DoubleToString(currentDelta, 4), "\nCurrent Gamma: ", DoubleToString(currentGamma, 6)); }
В этом разделе определяется основная процедура вычислений (OnStart()) для оценки значений Дельты и Гаммы индекса EU50 с использованием модели Блэка-Шоулза. Функция начинает работу с объявления начала вычислений и определения динамического времени до истечения срока действия до 31 декабря 2025 года. Это гарантирует отражение в расчетах время, оставшееся до истечения срока действия опциона, что является важнейшим фактором, влияющим как на Дельту, так и на Гамму. Выведя на экран количество лет и дней, оставшихся до истечения срока действия опциона, трейдер мгновенно получает представление о том, насколько близок опцион к истечению срока действия, что является ключевым аспектом риска временного спада.
Далее скрипт извлекает исторические данные о дневных ценах с помощью функции CopyRates(), которая заполняет массив ценами закрытия для количества баров, указанного во входном параметре BarsToCalc. Этот шаг необходим для проведения исторического анализа эволюции Дельты и Гаммы. Если получить данные не удается, функция элегантно завершает работу сообщением об ошибке, что обеспечивает надежность при тестировании на реальном рынке. После успешного сбора данных скрипт создает CSV-файл с динамически создаваемым именем, содержащим текущую метку времени, что обеспечивает организованное хранение и удобный экспорт для внешнего анализа, как, например, в Excel или Jupyter Lab.
Затем код переходит в цикл, который перебирает исторические данные (от самых старых к самым новым), вычисляя Дельту и Гамму для каждой цены закрытия. Для каждого бара скрипт пересчитывает время до истечения срока действия, чтобы отразить, насколько далеко каждая точка данных находится от 31 декабря 2025 года. Вычисленные значения — Дельта, Гамма, цена исполнения и количество дней до истечения срока действия опциона — записываются в CSV-файл и периодически выводятся на терминал для удобства чтения. Данная разработка предоставляет трейдерам структурированный набор данных, который впоследствии можно использовать для визуализации и дальнейшего анализа, например для изучения чувствительности опционов к различным фазам рынка.
После обработки всех баров файл закрывается, а скрипт вычисляет текущие рыночные значения Дельты и Гаммы на основе последней цены и точного времени, оставшегося до истечения срока действия опциона. Эти текущие значения помогают трейдеру понять реальную подверженность его опционной позиции каким-либо рискам. Кроме того, скрипт рассчитывает и выводит дополнительные сведения, такие как доходность, волатильность, процентная ставка и дивидендная доходность — параметры, которые в совокупности определяют рыночную ситуацию для данного опциона. Это позволяет получить исчерпывающую сводку как исторических, так и текущих рисков в одном представлении.
Наконец, скрипт включает раздел оценки рисков, в котором дается качественная интерпретация величин Дельта и Гамма. Высокое значение Дельты указывает на то, что опцион ведет себя аналогично базовому активу, тогда как низкое значение Дельты свидетельствует о меньшей чувствительности к цене. Аналогичным образом, высокое значение Гаммы указывает на то, что Дельта быстро меняется по мере изменения базовой цены, что подразумевает более высокую выпуклость и потенциальные издержки, связанные с хеджированием. Функция завершается оповещением пользователя на экране, подтверждением успешного завершения вычислений и предоставлением ключевых результатов для немедленной интерпретации.
Результаты отчета


На основе анализа Дельты и Гаммы EU50 результаты показывают устойчиво находящуюся в деньгах позицию по колл-опциону с выраженными бычьими характеристиками. Значения дельты на протяжении всего исторического периода колебались от 0,74 до 0,99, что указывает на высокую вероятность прибыльного истечения срока действия опциона. В настоящее время значение Дельты составляет 0.991, до истечения срока действия осталось 69 дней. Его поведение практически идентично владению базовым индексом EU50: изменения цены почти 1:1 коррелируют с изменениями стоимости опциона. Значения Гаммы, варьирующиеся от 0,000186 до 0,000624, демонстрируют умеренную чувствительность к изменениям цен, при этом наибольшая концентрация Гаммы наблюдалась, когда цены опускались ближе к уровню цены исполнения 5000 в конце июля и начале августа 2025 года. Такая модель указывает на то, что опцион был наиболее чувствителен к базовым ценовым движениям в периоды приближения опциона к цене исполнения, особенно когда курс EU50 колебался в диапазоне от 5180 до 5260.

Временной анализ показывает четкую взаимосвязь между временным спадом и чувствительностью «греков». По мере приближения срока истечения опциона в декабре 2025 года, как Дельта, так и Гамма становятся более стабильными: Дельта приблизилась к 1.0, а Гамма снизилась до текущего уровня 0.000186. Оценка рисков показывает, что это позиция с низким значением Гаммы и высоким значением Дельты, требующая минимального динамического хеджирования и ведущая себя преимущественно как позиция, сходная с длинной по базовому активу. Для трейдеров это представляет собой позицию, требующую относительно мало усилий для своего поддержания с ограниченным риском, связанным с Гаммой, хотя высокое значение Дельты означает, что позиция сопряжена со значительной подверженностью направленному воздействию ценовых движений EU50. Стабильная прибыльность на протяжении всего периода свидетельствует о том, что выбор цены исполнения был оправдан для бычьего прогноза, обеспечивая высокую внутреннюю стоимость при сохранении обоснованных характеристик чувствительности до истечения срока действия опциона.
Заключение
Подведем итоги: мы разработали комплексную систему для расчета «греков» Блэка-Шоулза — Гаммы и Дельты — для реальных финансовых инструментов, таких как EU50. Исходя из математической основы, мы реализовали основные формулы для расчетов Дельты, Гаммы и времени до истечения срока действия опционов непосредственно в MQL5, что позволило отслеживать чувствительность опционов в реальном времени в терминале MetaTrader. Затем мы экспортировали исторические данные в формат CSV и выполнили расширенную визуализацию в Jupyter Lab, изучив, как Дельта и Гамма изменяются в зависимости от цены и волатильности. Полученные графики — «Дельта против цены», «Кривизна Гаммы» и «Подверженность Гаммы рискам» (GEX) — наглядно показали, как эти показатели чувствительности ведут себя в различных рыночных условиях.
В заключение, такая интеграция количественного моделирования может помочь трейдерам лучше понимать свою подверженность опционным рискам и свой профиль рисков. Наблюдая за тем, как Гамма усиливает изменения Дельты вблизи цены исполнения и как GEX отражает потенциальную стабильность или волатильность рынка, трейдеры могут принимать более обоснованные решения о хеджировании и входе в сделку. Такой подход устраняет разрыв между теорией и практикой, преобразуя «греков» Блэка-Шоулза в практические торговые сведения для динамического управления рисками и совершенствования стратегий в зависимости от получаемых данных.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/20054
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Бимодальный Market Profile с дельтой и памятью в MQL5
MetaTrader 5 и экономический календарь MQL5: как превратить новости в воспроизводимую торговую систему
Разработка торговой стратегии на основе псевдокорреляции Пирсона
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования