← Назад

Подразумеваемая волатильность опциона на S#

Привет опционщикам на S#

Хочу посчитать подразумеваемую волатильность опциона по предполагаемой волатильности базового актива. Т.е. я считаю, что рынок НЕ знает все и что рыночная премия опциона в текущий момент может быть ошибочной. И соответственно реальная IV опциона может быть отличной от транслируемой биржей или высчитанной по блеку-шоулзу из рыночной премии.

На S# я могу получить IV по рыночной премии. Могу получить премию по IV (через класс BlackScholes) А как посчитать премию по волатильности базового актива с тем чтобы из этой премии затем получить свою IV?

Комментарии (22)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Den
Den

pehas: Могу получить премию по IV (через класс BlackScholes) А как посчитать премию по волатильности базового актива с тем чтобы из этой премии затем получить свою IV?

Самому написать подсчет волатильности базового актива за интересующий период, а потом получить премию для этой волатильности подставив вместо IV (через класс BlackScholes). Я давно хотел этим заняться, да все руки не доходят.

pehas
pehas Автор

Den: Самому написать подсчет волатильности базового актива за интересующий период, а потом получить премию для этой волатильности подставив вместо IV (через класс BlackScholes). Я давно хотел этим заняться, да все руки не доходят.

Так не выйдет. bs.Premium(Volatility) расчитывает премию по IV опциона, не по исторической. Я пока сделал так. Нашел в интернетах класс блека шоулза на сях, он считает премию по исторической волатильности, а потом эту премию подставляю в bs.IV(premium) стокшарпа.

Вот думал, может как то сразу на S# это можно сделать, чтобы сторонние либы не пользовать

Дюшес
Дюшес

pehas: Я пока сделал так. Нашел в интернетах класс блека шоулза на сях, он считает премию по исторической волатильности

А исходники есть?

pehas
pehas Автор

Дюшес: А исходники есть? Брал отсюда http://yesakov.com/2010/04/14/%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C-%D0%B1%D0%BB%D1%8D%D0%BA%D0%B0-%D1%88%D0%BE%D1%83%D0%BB%D0%B7%D0%B0black%E2%80%93scholes-option-pricing-model-opm/

Дюшес: Кстати, ну и как эти iv сильно расходятся? Не сравнивал? Расхождение сильно зависит от периода за который ты считаешь историческую волатильность. Если брать за день, то сильно, а за месяц почти одинаково

Дюшес
Дюшес

Кстати, ну и как эти iv сильно расходятся? Не сравнивал?

Mikhail Sukhov
Mikhail Sukhov

Насколько я помню, через S# это делалось через переключение одного поля на другое.

pehas
pehas Автор

Mikhail Sukhov: Насколько я помню, через S# это делалось через переключение одного поля на другое.

Интуитивно, я как бы догадываюсь, что если вызывать расчет премии без параметров - bs.Premium() то расчет должен вестись по полю Volatility базового актива (?). Но как говорится, хотелось бы уточнить..

Ну и вопрос, конечно, если это так (как описано выше) и используется это поле Volatility, будет ли это по феншую выставлять каждый раз в это поле свою расчетную историческую волатильность

Дюшес
Дюшес

pehas: Интуитивно, я как бы догадываюсь, что если вызывать расчет премии без параметров - bs.Premium() то расчет должен вестись по полю Volatility базового актива (?). Но как говорится, хотелось бы уточнить..

Нет, в bs.Premium() берется поле ImpliedVolatility у инструмента. Если подставлять свою волатильность, используется bs.Premium(decimal deviation). А вот откуда ее можно брать?

pehas
pehas Автор

Дюшес: Нет, в bs.Premium() берется поле ImpliedVolatility у инструмента. Если подставлять свою волатильность, используется bs.Premium(decimal deviation). А вот откуда ее можно брать?

Так в том и проблема, что bs.Premium(decimal deviation) - это расчет по своей ОПЦИОННОЙ волатильности. Но не по исторической. Можно легко проверить. Если получить IV через iv = bs.IV(sec.LastPrice) а затем подставить полученное iv в price = bs.Premium(iv), то price будет равно sec.LastPrice А если бы bs.Premium(decimal deviation) считало бы по исторической волатильности, значение было бы другим.

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

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

Дюшес
Дюшес

pehas: Так в том и проблема, что bs.Premium(decimal deviation) - это расчет по своей ОПЦИОННОЙ волатильности. Но не по исторической. Можно легко проверить. Если получить IV через iv = bs.IV(sec.LastPrice) а затем подставить полученное iv в price = bs.Premium(iv), то price будет равно sec.LastPrice А если бы bs.Premium(decimal deviation) считало бы по исторической волатильности, значение было бы другим. Так в принципе сток шарп все и считает по ходу. Любые греки. Находит сначала IV по последней цене опциона, а затем расчитывает через эту IV греки и премию. По-умолчанию берется IV инструмента транслируемое биржей, если вызываем через функцию bs.Premium(). Если надо посчитать с HV, то, насколько я понимаю, надо использовать bs.Premium(decimal deviation). То же самое и для греков. Там же в формуле БШ, как раз и используется этот параметр - deviation или стандартное отклонение или HV. Вроде так?

pehas: Соответственно, отвечая на ваш вопрос, я решаю задачу с другого конца. Я расчитываю премию через отдельную либу по историческим данным. А затем уже по этой премии нахожу IV ей соответствующую и держу пальцы крестиком, чтобы она оказалась правильнее чем та, что расчитана шарпом по последней цене (или та что транслируется биржей) :) Поглядел исходники, все формулы практически один в один. Также есть параметр deviation в расчете премии. Что нужно ставить на его место? В либе, в классе Statistic, есть ф-я Dev(ArrayList dataRow) // Вычисление дисперсии (отклонение от среднего значения числового ряда)(Deviation) Наверное ее и подставлять, а в массиве данные по исторической волатильности?

pehas
pehas Автор

Дюшес: По-умолчанию берется IV инструмента транслируемое биржей, если вызываем через функцию bs.Premium()

Откуда вы это знаете, проверенное инфо? Как тогда я вызываю bs.Premium на инструменте загруженном из истории (при тестировании) и соответственно без данных о волатильности с биржи? И оно рассчитывается.

Дюшес: Поглядел исходники, все формулы практически один в один.

Исходники шарпа тоже? Если да, то скажите как посмотреть, пожалуйста.

Дюшес: Также есть параметр deviation в расчете премии. Что нужно ставить на его место? В либе, в классе Statistic, есть ф-я Dev(ArrayList dataRow) // Вычисление дисперсии (отклонение от среднего значения числового ряда)(Deviation) Наверное ее и подставлять, а в массиве данные по исторической волатильности?

Волатильность считается на основе стандартного отклонения лог реторнов временного ряда БА. Это и будет Deviation

Дюшес
Дюшес

pehas: Откуда вы это знаете, проверенное инфо? Как тогда я вызываю bs.Premium на инструменте загруженном из истории (при тестировании) и соответственно без данных о волатильности с биржи? И оно рассчитывается. Ну оно из терминала берется, для этого строчки (из документации):

// изменяем метаданные так, чтобы начали обрабатывать дополнительные колонки опционов 
var columns = _trader.SecuritiesTable.Columns;
....
columns.Add(DdeSecurityColumns.Volatility);
....

А в коннекторе, пришедшая/изменяющаяся iv заполняет соответствующее поле у инструмента.

pehas: Исходники шарпа тоже? Если да, то скажите как посмотреть, пожалуйста. Они в общем доступе, на кодеплексе лежат :)

pehas: Волатильность считается на основе стандартного отклонения лог реторнов временного ряда БА. Это и будет Deviation А нету примерчика как это сделать? И откуда можно брать историю? Просто этим вопросом не задавался раньше.

pehas
pehas Автор

Точно лежат.. Раньше не было сорсов. И согласно исходникам таки юзается по дефолту поле Option.ImpliedVolatility Хотя как оно тогда расчитывает Premium для исторических данных в которых нет этой волатильности.. В любом случае - это опционная волатильность, не историческая. Так что все равно не оно.

Дюшес: А нету примерчика как это сделать? И откуда можно брать историю? Просто этим вопросом не задавался раньше. Универсального короткого примерчика нет. Просто посмотрите как считается волатильность. В интернетах этой инфы хватает. В принципе все не сложно. Считается стандартное отклонение реторнов (отношения следующего значения временного ряда к предыдущему) и аннуализируется (приводится к годовому значению умножением на корень из к-ва дней в году, если ряд на дневках)

Историю я беру из гидры

Mikhail Sukhov
Mikhail Sukhov

pehas: Историю я беру из гидры

А саму волатильность берете именно как волатильность базового актива, или самостоятельно рассчитываете по цене хождения?

Насколько я помню, РТС сама транслирует как IV так и HV. Но это надо уточнять. Если можете найти в Плазе, можно прикрутить накопление уже HV. Я недавно сделал это для кое какого источника, чтобы Гидра начала разливать историю от подразумеваемой. Так что формат в принципе готов.

Mikhail Sukhov
Mikhail Sukhov

Ну и вставлю видос по теме (но я там не согласен с методикой расчета волатильности)

pehas
pehas Автор

Mikhail Sukhov: А саму волатильность берете именно как волатильность базового актива, или самостоятельно рассчитываете по цене хождения? Историческую волатильность считаю сам. Очень похожим способом на тот что упоминал Каленкович в том видео, что вы выложили (кстати, за видео отдельное спасибо)

Mikhail Sukhov: Насколько я помню, РТС сама транслирует как IV так и HV. Но это надо уточнять. Если можете найти в Плазе, можно прикрутить накопление уже HV. Я недавно сделал это для кое какого источника, чтобы Гидра начала разливать историю от подразумеваемой. Так что формат в принципе готов. Как и Каленкович говорил - нет особого смысла пользовать HV транслируемую биржей по ряду причин. Во-первых, биржа туда может транслировать что угодно и судя по всему так и делает. Т.е. далеко не всегда их оценка волатильности адекватная. Во вторых, HV сильно зависит от таймфрейма и периода времени на котором вы ее оцениваете. Например, если вы торгуете минутками, то зачем вам волатильность за два месяца (которую может давать вам биржа)? Лично для меня, наверное, была бы польза, если S#.BlackScholes мог расчитывать цену опциона по HistoryVolatility базового актива. И была бы возможность в это поле подставлять свою волатильность (не транслируемую, а расчитанную)

Mikhail Sukhov: Ну и вставлю видос по теме (но я там не согласен с методикой расчета волатильности) Если не сложно, обоснуйте, пожалуйста, свое несогласие. В чем конкретно по вашему мнению она не верна и как ее считаете (если считаете) вы?

Дюшес
Дюшес

pehas: И была бы возможность в это поле подставлять свою волатильность (не транслируемую, а расчитанную)

Параметр Deviation, вместо IV подставляем расчетную HV?

pehas
pehas Автор

Дюшес:

pehas: И была бы возможность в это поле подставлять свою волатильность (не транслируемую, а расчитанную)

Параметр Deviation, вместо IV подставляем расчетную HV?

Нет, тут речь шла о дополнительном поле HistoricalVolatility Расчитанную историческую волатильность будеете подставлять в модель БШ сторонней либы сслыку на которую я дал в самом начале, чтобы получить расчетную цену опциона. По этой расчитанной цене, сможете вычислить собственную IV а не ту что вам дает биржа

Mikhail Sukhov
Mikhail Sukhov

pehas: Нет, тут речь шла о дополнительном поле HistoricalVolatility Расчитанную историческую волатильность будеете подставлять в модель БШ сторонней либы сслыку на которую я дал в самом начале, чтобы получить расчетную цену опциона. По этой расчитанной цене, сможете вычислить собственную IV а не ту что вам дает биржа

Помоему, Дюшес все правильно сказал. Получение информации от биржи не должно конфликтовать с собственным расчетом. Или вы хотите расчет своей ИВ записать в поле Security?

pehas
pehas Автор

Mikhail Sukhov: Или вы хотите расчет своей ИВ записать в поле Security? Да, в принципе, все что я хотел, уже реализовал. Единственное, чего не хватает в S# - это расчета теор цены опциона. Не по IV биржи как это делается сейчас, а по формуле для исторической волатильности. Сейчас приходится это делать через стороннюю библиотеку. Ну и получать от биржи историческую волатильность тоже было бы не лишним. Чтобы можно было сравнить со своей.

Mikhail Sukhov
Mikhail Sukhov

pehas:

Mikhail Sukhov: Или вы хотите расчет своей ИВ записать в поле Security? Да, в принципе, все что я хотел, уже реализовал. Единственное, чего не хватает в S# - это расчета теор цены опциона. Не по IV биржи как это делается сейчас, а по формуле для исторической волатильности. Сейчас приходится это делать через стороннюю библиотеку. Ну и получать от биржи историческую волатильность тоже было бы не лишним. Чтобы можно было сравнить со своей.

Я не знаю что у вас не получается (у меня потому что расчет идет свой, но не по истории). В любом случае раз решили проблему, то это хорошо.

Дюшес
Дюшес

pehas: Сейчас приходится это делать через стороннюю библиотеку. Ну и получать от биржи историческую волатильность тоже было бы не лишним. Чтобы можно было сравнить со своей.

Мне кажется можно не пользоваться сторонней библиотекой, т.к. все то же самое реализовано в s#. Например, возьмем вычисление премии, ф-я в либе - BS_CALL(double baseActive, double strike, int dayToExp, double riskFree, double deviation, double dividend). HV вы вычисляете как-то и передаете в виде параметра deviation. Можно то же самое сделать и в s#, через этот же параметр. Если посмотрим формулу БШ, переменная s. Ее описание: s — годовое стандартное отклонение цены базовых акций (историческая волатильность). Рассчитывается через умножение стандартного отклонения цены за несколько дней на квадратный корень из 260 (количество торговых дней в году). И посмотрим на формулы в BS_CALL (так же как и в s#) – то s соответствует параметру deviation. Кажется так. Или я что-то не углядел и вы как-то по-другому этой либу используете? Там вроде больше ничего нет и примера использования с HV тоже. Вместо IV подставляем таки HV и получаем щастье, без сторонней либы? :)