В ряду алгоритмов, используемых в опционной торговле, значительное место занимают стратегии покупки/продажи волатильности. Смысл таких стратегий в покупке опциона, когда волатильность рынка мала, и соответственно, продаже, когда волатильность высока, при постоянном хэджировании базисным активом ( дельта позиции равна нулю).
Цена опционов, как известно, вычисляется по формуле Блэка-Шоулза, однако из-за того, что некоторые допущения, относящиеся к модели цены базисного актива, не соответствуют реальному статистическому распределению, опционам разных страйков приходится присваивать различные значения так называемой подразумеваемой волатильности (IV), которая входит в уравнение Блэка-Шоулза как параметр. Возникает ситуация с двумя неизвестными - мы вычисляем IV по текущей цене опциона, при этом не зная, насколько справедлива эта цена в настоящий момент, следовательно не можем определить, дешево стоит опцион сейчас или дорого. Если бы нам удалось определить истинную волатильность рынка , то рассчитав по ней цену и сравнив с текущей, можно было бы принимать решение о покупке или продаже опциона. Поэтому основная задача, которую нужно решить в стратегиях покупки/продажи волатильности - построение правильного графика подразумеваемой волатильности опционов, в зависимости от страйков, из-за его формы имеющим название улыбки волатильности, или поверхности волатильности, если речь идет о разных периодах до экспирации - см. график в заглавии.
Необязательно идти именно таким путем - находить справедливую цену через подразумеваемую волатильность с помощью формулы Блэка-Шоулза. Можно, например, составить модель цены базисного актива, которая лучше подходит к реальному стат. распределению, и в результате непосредственно вычислить справедливую цену опциона, основываясь на наблюдаемых рыночных параметрах, исключая посредников, подобных IV. Так работают, например, модели Хестона и Бейтса, которые мы рассмотрим в следующих частях этого цикла статей. Но самый простой и очевидный вариант - все-таки использовать подразумеваемую волатильность из формулы БШ, применив технику ad-hoc Блэк-Шоулз - прикладного Блэка-Шоулза - для построения правильной улыбки волатильности. Эту технику мы и разберем подробно в этой части.
Напомним сначала саму формулу Блэка-Шоулза для колл опциона европейского типа:
где С(S,K,T,t) - текущая стоимость опциона на момент времени t;
S - текущая цена базисного актива;
N(x) - интегральная функция нормального распределения;
К- страйк опциона;
r - безрисковая процентная ставка (для маржируемых опционов, торгуемых на бирже MOEX r=0);
T-t - время до экспирации;
- подразумеваемая волатильность.
Формулу БШ можно записать в виде функции :
, (r сразу положим равной 0), Т обозначим время до экпирации.
Тогда подразумеваемую волатильность можно найти с помощью обратной функции:
Для упрощения обозначим цены опционов как , где - цены страйков, , N - количество страйков, для которых можно определить рыночную цену. Так как подразумеваемая волатильность будет разной для разных страйков и сроков до экспирации, можно записать формулу для нее следующим образом:
где - вектор коэффициентов, - вектор объясняющих переменных (страйки и время до экспирации), - вектор ошибок.
Наша задача - найти коэффициенты . Для этого сначала вычисляем подразумеваемые волатильности для всех страйков и сроков до экспирации из наблюдаемых рыночных цен за определенный период времени, затем с помощью метода наименьших квадратов находим коэффициенты , минимизируя выражение:
Число наблюдаемых точек N должно быть больше или равно . Для практических целей, как правило, достаточно m=5.
Итак, в результате мы можем найти "справедливые" цены для любого страйка и срока до экспирации, подставляя в формулу Блэка-Шоулза подразумеваемые волатильности, вычисленные через найденные коэффициенты и значения этих страйков и периодов экспирации на текущий момент времени:
В помощь - примеры на языке 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; }
В следующей части цикла будем находить справедливые цены опционов с помощью модели Хестона.
Привет, есть чудесная библиотека где все реализовано https://github.com/lballabio/quantlib
Круто!
А может быть такое (не судите строго я новичёк), что S и K у брокер одинаковый?
Не совсем понял вопрос. S - это цена базового актива, K- страйк, в какой -то момент они могут быть одинаковы. При чем здесь брокер?