Вопрос к опционщикам, или же к тем у кого хорошо с матиматикой (а именно оптимизацией).

 

Приветствую всех зашедших) Понимаю что вопрос не совсем по тематике сайта, однако вроде встречал людей кто торгует опционами и кто активен тут. В целом вопрос как уже писал в заглавии адресован тем кто торгует опционами или же к тем кто хорош в оптимизационных задачах. 

Я пытаюсь реализовать алгоритм подбора улыбки волатильноти московской биржи используемый биржей порядок рассчета доступен по ссылке (скачается файлик с сайта биржи). Когда я реализовал данный алгоритм, лн показывал себя не сильно хорошо. Очень часто улыбка не подбиралась как следует (мною была реализована только та часть алгоритма которая описана в блоке подробной оптимизации). 

Далее я пытался реализовать подбор улыбки с помощью метода НЬютона Рафсона для многих переменных - так же не получилось (от чего то значения улыбки не приближались вовсе к требуемым, хотя все производные брал с помощью маткада если кто то пожелает посмотреть на взятые мною производные, то могу скинуть ссылку) 

Для большей конкретики опишу цель и то что требуется мне сделать а так же мои подходы:

1) Есть функция улыбки московской биржи, для тех кто не знаком с ней опишу ее (формула есть в файле по ссылке). 

Данная функция является по просту интерполяционной функцией которая имеет 6 свободных членов (S,A,B,C,D,E) которые нужно найти. Когда они верно подобраны, функция имеет вид гладкой кривой монотонно убывающей и после возрастающей, которая чем то напоминает пораболу. 

2) Есть ряд точек с координатами x,y которые ложатся на данную кревую - это волатильности опционов. 

3) Задача - Нужно оптимизировать 6 свободных членов так что бы этот ряз точек полностью (или же как можно ближе) совподал к кревой описываемой формулой московской биржей. 


Мною была создана следующая оценочная функция:
f = summ(exp((fIV-IV)^2*n)-1)/N = 0;

fIV - функция московской биржи

IV - i-тая волатильность (одна из тех точек о которых я говорил во втором пункте)

n - вес на основе удаленности от центрального страйка, пока для простаты использую порядковый номер страйка где первый страйк (ATM) = 1 итак далее. n > 0.

N - Общее количество суммируемых данных (кол во итерраций цикла)


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


Задача - как оптимально подобрать требуемые 6 параметров ? 

Если попробовать метод наименьших квадратов, то тогда не совсем пойму как решить получившуюся систему уравнений, она слишком грамоздкая и нет возможности ее верно сократить. 
Метод Ньютона рафсона для мнодественных переменных (http://knigechka.blogspot.com/2010/04/blog-post_1042.html) так же не помог как я писал выше. Вместо схождения к решению, ошибка постоянно наростала. Причем и производные и само уравнение было составлено верно. Метод половинчатого спуска не дает всегда оптимальное решение... 

Подскадите как бы лучше справиться с данной задачей ? Сейчас я пробую постиненно методом Ньбютона для одной переменной оптимизировать каждый из параметров постипенно однако пока не получаю требуемого результата... еще посижу с данным вариантом.

Если честно то уже месяц воюю с жтим вопросом довольно много перечитал уже и хотелось бы просто услышать Вашу точку зрения как оптимальнее ее подобрать.

 
  • Используя серию функций AlgLib::LRBuild или этот индикатор ниже можно построить спрогнозированный график, основанный на желаемой модели, например, параболе 
  • Если не хочется быть ограниченным рамками MQL, то в C# есть куча библиотек, использующих SVD => OrdinaryLeastSquares => Multiple (Linear / Non-Linear) Regression, метод наименьших квардатов решается через Singular Value Decomposition 
  • Non-Linear Regression отличается от линейной тем, что модель может меняться стохастически, а не линейно, то есть ты не просто задаешь набор чисел, по которым хочешь спрогнозировать значение, а передаешь callback функцию, которая на каждом шаге будет расчитывать модель по некой произвольной формуле, например, синусоида + парабола
  • В C# есть библиотека QLNet, основанная на QuantLib, которая уже включает в себя упомянутые методы, при этом заточена под финансовые рынки, в частности, опционы, вот вариант от QuantLib для Python, в QLNet должно быть что-то подобное ... говорю про C#, потому что его легко подкльючить в виде DLL 

https://www.google.com/search?q=MultipleLinearRegression+-+C%23

 
...:
  • Используя серию функций AlgLib::LRBuild или этот индикатор ниже можно построить спрогнозированный график, основанный на желаемой модели, например, параболе 
  • Если не хочется быть ограниченным рамками MQL, то в C# есть куча библиотек, использующих SVD => OrdinaryLeastSquares => Multiple (Linear / Non-Linear) Regression, метод наименьших квардатов решается через Singular Value Decomposition 
  • Non-Linear Regression отличается от линейной тем, что модель может меняться стохастически, а не линейно, то есть ты не просто задаешь набор чисел, по которым хочешь спрогнозировать значение, а передаешь callback функцию, которая на каждом шаге будет расчитывать модель по некой произвольной формуле, например, синусоида + парабола
  • В C# есть библиотека QLNet, основанная на QuantLib, которая уже включает в себя упомянутые методы, при этом заточена под финансовые рынки, в частности, опционы, вот вариант от QuantLib для Python, в QLNet должно быть что-то подобное ... говорю про C#, потому что его легко подкльючить в виде DLL 

https://www.google.com/search?q=MultipleLinearRegression+-+C%23

Я пишу на C#, да однако не использую сторонние библиотеки так как из за одной задачи подключать к проекту кучу кода который попросту не требуется - не является зорошим тоном. Мою задачцу, я уверен можно решить в один метод и чисто матиматическим подходм... 
Ваш совет мне не сильно помог так как Вы не совсем то посоветовали, мне не требуется регрессия вовсе, она тут не помощдит, мне нужны итеррационные методы, так как я подбираю 6 коэффициентов которые не зависят от какой либо переменной. касательно приведенной Вами ссылке - благодарю, однако жту можель я не использую сейча. Модель хестона давно зотел изучить, но сейчас у меня конкретная задача - оптимизировать модель улыбки волатильность Московской биржи по этомуц можель Хестона мне не поможет сейчас. 

Modeling Volatility Smile and Heston Model Calibration Using QuantLib Python
  • gouthamanbalaraman.com
Provides an introduction to constructing implied volatility surface consistend with the smile observed in the market and calibrating Heston model using QuantLib Python. Visit here for other QuantLib Python examples. If you found these posts useful, please take a minute by providing some feedback. European options on an equity underlying...
 
Наверно надо писать оптЕмизация, разу уж матИматика
 
Dmitry Fedoseev:
Наверно надо писать оптЕмизация, разу уж матИматика
Это новые правила в шахматах. Раньше было шах и мат, а теперь мат и мат вперемешку с нецензурной бранью.
 

Там же в методичке приводится метод решения:

1. Грубая подстройка – метод псевдослучайных отклонений;

2. Точная подстройка – метод покоординатного спуска.

А чисто математический, наверно замучаешься.

=======

Если с умом подойти к подбору параметров, процесс можно значительно ускорить.

Там такая формула: a+b*(1.0-exp(-c*y*y))+d*atan(e*y);

Постоянную составляющая "а" пока убираем, делим формулу на две части: b*(1.0-exp(-c*y*y)) и d*atan(e*y).

Коэффициента b и d пока тоже убираем получаем две формулы:

1. 1.0-exp(-c*y*y)

2. atan(e*y).

У первой подбираем с, у второй e. Критерий - максимум корреляции.

Потом соединяем их: К*(1.0-exp(-c*y*y))+(1-K)atan(e*y) - подбираем К, тоже по критерии максимума корреляции.

Остается подмасштабировать полученную кривую под высота окна и выровнять, добавив постоянную составляющую. 

=======

Но это не самое интересно. А самое интересное - подобрали эти коэффициенты и что дальше?

 
Dmitry Fedoseev:

Там же в методичке приводится метод решения:

1. Грубая подстройка – метод псевдослучайных отклонений;

2. Точная подстройка – метод покоординатного спуска.

А чисто математический, наверно замучаешься.

=======

Если с умом подойти к подбору параметров, процесс можно значительно ускорить.

Там такая формула: a+b*(1.0-exp(-c*y*y))+d*atan(e*y);

Постоянную составляющая "а" пока убираем, делим формулу на две части: b*(1.0-exp(-c*y*y)) и d*atan(e*y).

Коэффициента b и d пока тоже убираем получаем две формулы:

1. 1.0-exp(-c*y*y)

2. atan(e*y).

У первой подбираем с, у второй e. Критерий - максимум корреляции.

Потом соединяем их: К*(1.0-exp(-c*y*y))+(1-K)atan(e*y) - подбираем К, тоже по критерии максимума корреляции.

Остается подмасштабировать полученную кривую под высота окна и выровнять, добавив постоянную составляющую. 

=======

Но это не самое интересно. А самое интересное - подобрали эти коэффициенты и что дальше?


Меня как раз и интересует подход по уму) появились некоторые вопросы по Вашему методу. 
В Вашем методе не учтен коэффициент S - он задает положение наинисшей точки улыбки по оси X. Допустим подберем его в самом конце вместе с A. 

Мне остается не понятным, зачем Вы выразили b и d через K ? 

Критерий корреляции (корреляции чего с чем ? или же имеется ввиду максимальная автокорреляция ряда заданных опорных точек подставленных в данную формулу ?)

Маштабирование кривой по высоте окна - имеете ввиду подбор b и  d ? 

=========

Лично мне жто нужно для даполнения пробелов истории опционов которую я скачал а так эже для того что бы хранить котировки опционные в максимально сжатом виде.

=========

Ваш метод мне интересен еще советом подбирать не последовательно все коэффициенты а поэтапно, обязательно попробую жто реализовать, благодарю. 
Касательно коэфиуиентов улыбки, то у каждого из них есть своя задача:
A - поднимает / опускает всю улыбку целиком по оси "y" .
S - регулирует положение минимальной точки (если E > 1 или максимальной точки если E < 1) улыбки на оси "x"
B - Регулирует высоту крайних точек кревой улыбки
С - Регулирует резкость изгиба краев улыбки
D - Регулирует "Скос" т.е. то на сколько левый (или же правый) край улыбки задран выше другого.
E - колеблится в интервале [0 ; +inf] и задает форму кривой выпуклая( E > 1) или вогнутая улыбка. 

 
Andrey Azatskiy:


Меня как раз и интересует подход по уму) появились некоторые вопросы по Вашему методу. 
В Вашем методе не учтен коэффициент S - он задает положение наинисшей точки улыбки по оси X. Допустим подберем его в самом конце вместе с A. 

Вообще-то, в доске опционов есть настройка полей, и обычно есть поле волатильности, где она указана для каждого страйка. Точнее вроде и не надо.

 
Yuriy Asaulenko:

Вообще-то, в доске опционов есть настройка полей, и обычно есть поле волатильности, где она указана для каждого страйка. Точнее вроде и не надо.

Мне нужно исторические IV конвертировать в улыбку и улбыбки созранять. Так же заодно я пустые страйки этим заполняю. А если пострайкам хранить IV то за один день гигабайтные базы получаются

 
Andrey Azatskiy:


Меня как раз и интересует подход по уму) появились некоторые вопросы по Вашему методу. 
В Вашем методе не учтен коэффициент S - он задает положение наинисшей точки улыбки по оси X. Допустим подберем его в самом конце вместе с A. 

Мне остается не понятным, зачем Вы выразили b и d через K ? 

Критерий корреляции (корреляции чего с чем ? или же имеется ввиду максимальная автокорреляция ряда заданных опорных точек подставленных в данную формулу ?)

Маштабирование кривой по высоте окна - имеете ввиду подбор b и  d ? 

=========

Лично мне жто нужно для даполнения пробелов истории опционов которую я скачал а так эже для того что бы хранить котировки опционные в максимально сжатом виде.

=========

Ваш метод мне интересен еще советом подбирать не последовательно все коэффициенты а поэтапно, обязательно попробую жто реализовать, благодарю. 
Касательно коэфиуиентов улыбки, то у каждого из них есть своя задача:
A - поднимает / опускает всю улыбку целиком по оси "y" .
S - регулирует положение минимальной точки (если E > 1 или максимальной точки если E < 1) улыбки на оси "x"
B - Регулирует высоту крайних точек кревой улыбки
С - Регулирует резкость изгиба краев улыбки
D - Регулирует "Скос" т.е. то на сколько левый (или же правый) край улыбки задран выше другого.
E - колеблится в интервале [0 ; +inf] и задает форму кривой выпуклая( E > 1) или вогнутая улыбка. 

S. А не обнаружил S в формуле. Наверно матИматик писавший методичку был пьян. 

b и d через K. Потому, что либо одна кривулина, либо вторая. Одна из низ второго порядка, другая  - первого. Скорее всего можно и не подбирать b и d (или К), а выбрать одну, у которой корреляция больше. Корреляция - с теми данными под которые подгоняется кривулина.

Масштабирование по окну. Да - b и d. Но только параллельно, потому, что их соотношение уже выяснено. Скорее всего одно из них будет 0.

Получается, что цель - экстраполяция. Так что ли?  Там дальше конец идет почти горизонтально. Так что, можно просто линейную регрессию использовать, что бы определить сверху продолжение или снизу. Неужели в его форме есть какой-то смысл? 

Впрочем, может я в корне не прав. Но странно, какой смысл таких методичек с такими формулами где и х и у перепутаны и т.п.

 
Dmitry Fedoseev:

S. А не обнаружил S в формуле. Наверно матИматик писавший методичку был пьян. 

b и d через K. Потому, что либо одна кривулина, либо вторая. Одна из низ второго порядка, другая  - первого. Скорее всего можно и не подбирать b и d (или К), а выбрать одну, у которой корреляция больше. Корреляция - с теми данными под которые подгоняется кривулина.

Масштабирование по окну. Да - b и d. Но только параллельно, потому, что их соотношение уже выяснено. Скорее всего одно из них будет 0.

Получается, что цель - экстраполяция. Так что ли?  Там дальше конц идет почти горизонтально. Так что можно просто линейную регрессию использовать, что бы определить сверху продолжение или снизу. 

Впрочем, может я в корне не прав. Но странно, какой смысл таких методичек с такими формулами где и х и у перепутаны и т.п.

Там сама формула разбита на 3, полная формула вот такая:
x=1/sqrt(T)*Ln(Strike/Price)
y = x-S
fIV =  a+b*(1.0-exp(-c*y*y))+d*atan(e*y);

Получается что S - это сдвиг лагорифмической шкалы деленной на корень из T. 
T - время  = кол-во дней до экспира/365 
Strike - Цена страйк опциона (по сути ось "x" i-той опорной точки) 
Price - цена базового актива.

Линейную регрессию не получится, но основная цель - экстрополяция да.  Сам ряд опорных точек это что то ввиде параболы асиметричной и левый (или правый) хвост выше (или ниже) другого. Вот тут как раз первая картинка показывает точки и эту самую кревую (
http://novationz.ru/html/probability_trade/05smileIVvsDistrP.htm)


Касательно b и d - Вы не правы. В одних из тестовых данных (у меня есть несколько подобранных улыбок которые сама биржа подбирала) b =   35 d = -14

Улыбка волатильности vs Распределение вероятностей
  • novationz.ru
Итак, имея информацию о ценах на опционы (берём цены прямо с рынка, из стакана) мы можем, пользуясь формулой Блэка-Шоулза, перевести их в график подразумеваемой волатильности для всех страйков, и воспроизвести улыбку IV. Насколько полезна для целей обычного трейдера данная информация? Практика показывает, что информация полезна, но можно...
Причина обращения: