uralpro
uralpro личный блог
29 апреля 2015, 10:29

Улыбка волатильности. Ad-hoc Блэк Шоулз

06eacc816672bc6021ef661b0ec0981a67773653

В ряду алгоритмов, используемых в опционной торговле, значительное место занимают стратегии покупки/продажи волатильности. Смысл таких стратегий в покупке опциона, когда волатильность рынка мала, и соответственно, продаже, когда волатильность высока, при постоянном хэджировании базисным активом ( дельта позиции равна нулю).

Цена опционов, как известно, вычисляется по формуле Блэка-Шоулза, однако из-за того, что некоторые допущения, относящиеся к модели цены базисного актива, не соответствуют реальному статистическому распределению, опционам разных страйков приходится присваивать различные значения так называемой подразумеваемой волатильности (IV), которая входит в уравнение Блэка-Шоулза как параметр. Возникает ситуация с двумя неизвестными — мы вычисляем IV  по текущей цене опциона, при этом не зная, насколько справедлива эта цена в настоящий момент, следовательно не можем определить, дешево стоит опцион сейчас или дорого. Если бы нам удалось определить истинную волатильность рынка, то рассчитав по ней цену и сравнив с текущей, можно было бы принимать решение о покупке или продаже опциона. Поэтому основная задача, которую нужно решить в стратегиях покупки/продажи волатильности — построение правильного графика подразумеваемой волатильности опционов, в зависимости от страйков, из-за его формы имеющим название улыбки волатильности, или поверхности волатильности, если речь идет о разных периодах до экспирации — см. график в заглавии.

Необязательно идти именно таким путем — находить справедливую цену через подразумеваемую волатильность с помощью формулы Блэка-Шоулза. Можно, например, составить модель цены базисного актива, которая лучше подходит к реальному стат. распределению, и в результате непосредственно вычислить справедливую цену опциона, основываясь на наблюдаемых рыночных параметрах, исключая посредников, подобных IV. Так работают, например, модели Хестона и Бейтса, которые мы рассмотрим в следующих частях этого цикла статей. Но самый простой и очевидный вариант — все-таки использовать подразумеваемую волатильность из формулы БШ, применив технику ad-hoc Блэк-Шоулз — прикладного Блэка-Шоулза — для построения правильной улыбки волатильности. Эту технику мы и разберем подробно в этой части.

Напомним сначала саму формулу Блэка-Шоулза для колл опциона европейского типа:

C(S,K,T,t)=SN(d_1)-K\exp(-r(T-t))N(d_2)

d_1=\frac{\ln(S/K)-(r+\sigma^2/2)(T-t)}{\sigma\sqrt{T-t}}

d_2=d_1-\sigma\sqrt{T-t}

где С(S,K,T,t) — текущая стоимость опциона на момент времени t;

S — текущая цена базисного актива;

N(x) — интегральная функция нормального распределения;

К- страйк опциона;

r — безрисковая процентная ставка (для маржируемых опционов, торгуемых на бирже MOEX r=0);

T-t — время до экспирации;

σ- подразумеваемая волатильность.

Формулу БШ можно записать в виде функции :

C(S,K,T,t)=\phi(S,K,T,\sigma), (r сразу положим равной 0), Т обозначим время до экпирации.

Тогда подразумеваемую волатильность можно найти с помощью обратной функции:

\sigma=\phi^{-1}(S,K,T,C)

Для упрощения  обозначим цены опционов как C(S,K_i,T_i,t)=C_{i,t}, где Ki- цены  страйков, i∈1,..,N, N — количество страйков, для которых можно определить рыночную цену. Так как подразумеваемая волатильность будет разной для разных страйков и сроков до экспирации, можно записать формулу для нее следующим образом:

\sigma_i=\beta_0+\beta_1 K_i+...+\beta_m K_i^m+\beta_{2m}T_i^m+\beta_{2m+1}K_iT_i^{m-1}+...+\epsilon_i=\beta^{'}Z_i^m+\epsilon_i

где β′- вектор коэффициентов, Zi- вектор объясняющих переменных (страйки и время до экспирации), ϵi- вектор ошибок.

Наша задача — найти коэффициенты β0...β2m+1. Для этого сначала вычисляем подразумеваемые волатильности для всех страйков и сроков до экспирации из наблюдаемых рыночных цен за определенный период времени, затем с помощью метода наименьших квадратов находим коэффициенты β′, минимизируя выражение:

\theta=\arg\min_{\theta}\sum_{i=1}^N(C_{i,t}-\phi(S,K_i,T_i,\beta^{'}Z_i^m)^2

Число наблюдаемых точек N должно быть больше или равно m^2. Для практических целей, как правило, достаточно m=5.

Итак, в результате мы можем найти «справедливые» цены для любого страйка и срока до экспирации, подставляя в формулу Блэка-Шоулза подразумеваемые волатильности, вычисленные через найденные коэффициенты β′ и значения этих страйков и периодов экспирации на текущий момент времени:

C_{i,t}=\phi(S,K_i,T_i,\beta^{'}Z_i^m)

В помощь — примеры на языке C++ для вычисления цен опционов пут и колл и вычисление подразумеваемой волатильности из текущей рыночной цены опциона бисекционным методом:

// Формула Блэка-Шоулза
//здесь Т - время до экспирации,
//v - подразумеваемая волатильность
//PutCall - 'C' - вычисление цены для колл опциона, иначе - пут опцион
double BSPrice(double S, double K, double r, double T, double v, char PutCall) {
        double d = (log(S/K) + T*(r + 0.5*v*v)) / (v*sqrt(T));
        double Call = S*N(d) - exp(-r*T)*K*N(d - v*sqrt(T));
        if (PutCall=='C')
                return Call;
        else
                return Call - S + K*exp(-r * T);
}

// Вычисление подразумеваемой волатильности
//a - минимальное значение волатильности (например 0.00001)
//b - максимальное значение волатильности (например 10.0)
//MktPrice - рыночная цена опциона
double BisecBSV(double S, double K, double r, double T, 
                                double a, double b, double MktPrice, char PutCall) {
        const int MaxIter = 1000;
        double Tol = 0.0000001;
        double midP, midCdif;
        double  lowCdif = MktPrice - BSPrice(S, K, r, T, a, PutCall);
        double highCdif = MktPrice - BSPrice(S, K, r, T, b, PutCall);
        if (lowCdif*highCdif > 0) {
                double Temp = lowCdif;
                lowCdif = highCdif;
                highCdif = Temp;
        }
        else
        for (int i=0; i< =MaxIter; i++) {
            midP = (a + b) / 2.0;
                midCdif = MktPrice - BSPrice(S, K, r, T, midP, PutCall);
                if (abs(midCdif)<Tol) goto LastLine;
                else {
                if (midCdif>0) a = midP;
                        else b = midP;
                }
        }
        LastLine:
        return midP;
}

В следующей части цикла будем находить справедливые цены опционов с помощью модели Хестона.

Другие стратегии, применяемые в алгоритмической торговле и биржевых роботах смотрите в моем блоге и на сайте.

17 Комментариев
  • bstone
    29 апреля 2015, 10:54
    считать волатильность по волатильности? свежо :)
  • 2:5020/1164
    29 апреля 2015, 11:19
    Хорошо, что взялись перевести интересные материалы. Однако в цивилизованном обществе принято указывать ссылки и источники заимствований, это относится и к исходным текстам программ.

    BlackSholes.cpp

    // Black Scholes prices
    // by Fabrice Douglas Rouah, FRouah.com and Volopta.com
    [...]
  • noHurry
    29 апреля 2015, 11:56
    «Если бы нам удалось определить истинную волатильность рынка, то рассчитав по ней цену и сравнив с текущей, можно было бы принимать решение о покупке или продаже опциона.»
    «Истинная волатильность» это историческая волотильность и она рассчитывается элементарно. Любая самая простая графическая программа имеет соответствующие индикаторы. Но толку от нее ни какой, нужно знать будущую волатильность, а будующее не знает никто.
      • bstone
        29 апреля 2015, 12:14
        uralpro, зачем пишете? Чтобы из комментариев понять, где вы, возможно, ошибаетесь :) Например здесь я полностью согласен с noHurry — в статье сначала смешались кони и люди в виде ожидаемой и реализуемой волатильности, а потом приводится громоздкая модель улыбки ожидаемой волатильности без учета какой-либо динамики этого параметра. Из-за этого попытка учета времени до экспирации в этой модели выглядит нелепо и нежизнеспособно. Вы с этим не согласны? Почему?
          • bstone
            29 апреля 2015, 12:29
            uralpro, посмотрите число параметров модели! 1 параметр — отличная модель, 2-3 параметра — не громоздкая модель. А у вас 2m+2 параметров :) И нет, динамика не учитывается никак. Почему? Потому что каждый раз у вас будет новая поверхность, а если бы динамика учитывалась, то одна поверхность описывала бы волатильность с приемлемой погрешностью ровно до экспирации.
              • bstone
                29 апреля 2015, 15:20
                uralpro, как я собираюсь? Никак. А вот если вы опишете, то вам нобелевку сразу в руки под роспись выдадут, как Блэку и Шоулзу :) Биржа поверхность не калибрует — только улыбку.
                  • bstone
                    29 апреля 2015, 15:50
                    uralpro, этого не буду говорить, а скажу, что поверхности волатильности — тупиковый путь по мненю Пола Вилмота, а я ему доверяю в этом вопросе :)
      • bstone
        29 апреля 2015, 12:22
        uralpro, ну и вообще, если перевести статью на устоявшуюся терминологию, то речь тут идет и вовсе не о модели улыбки волатильности, а о калибровке volatility surface. Такая вот польза от некоторых комментариев :)
  • Simix
    29 апреля 2015, 12:26
    Т.к. оказалось что физическая волатильность напрямую не подставляется в Блэка-шоулза, а требует поправочных коэффициентов виде улыбки, то нужно признать Улыбку волатильности и саму IV искуственным производным параметром, который сам по себе не решает ничего, а исполняет роль индикатора пост-фактум. С таким же успехом можно анализировать полосы болинджера.
    Настоящие опционеры анализируют фактические цены опционов напрямую, которые пропорциональны реальной (а не выдуманной) физической величине — вероятности достижения страйка. Соотношение цен на разных страйках даёт картину настроений (крупных) игроков рынка относительно вероятности движения в ту или иную сторону.
    • bstone
      29 апреля 2015, 12:36
      Simix, ну это талебанская школа — пут-кол паритет и баста. БШ все-таки очень полезен :) Ну а про физическую волатильность — а как можно куда-то подставить то, чего нет?
  • noHurry
    29 апреля 2015, 13:09
    Для меня единственная польза от БШ это то, что зная IV можно аналитически посчитать цену опциона на любом страйке в любой момент времени, а все остальное от лукавого.
    Поправка. Я это имею в виду конечно применительно для работы с историческими данными.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн