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


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

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

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

Теги:


Спасибо:




22 Ответов
Den

Фотография
Дата: 04.03.2013
Ответить


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


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

pehas

Фотография
Дата: 04.03.2013
Ответить


Den Перейти

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


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

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

Дюшес

Фотография
Программист
Дата: 05.03.2013
Ответить


pehas Перейти

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


А исходники есть?
Спасибо:

Дюшес

Фотография
Программист
Дата: 05.03.2013
Ответить


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

pehas

Фотография
Дата: 05.03.2013
Ответить


Дюшес Перейти

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

Брал отсюда http://yesakov.com/2010/...ption-pricing-model-opm/

Дюшес Перейти

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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 05.03.2013
Ответить


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

pehas

Фотография
Дата: 05.03.2013
Ответить


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


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

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

Дюшес

Фотография
Программист
Дата: 05.03.2013
Ответить


pehas Перейти

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


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

pehas

Фотография
Дата: 05.03.2013
Ответить


Дюшес Перейти

Нет, в 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 ей соответствующую и держу пальцы крестиком, чтобы она оказалась правильнее чем та, что расчитана шарпом по последней цене (или та что транслируется биржей) :)
Автор топика
Спасибо:

Дюшес

Фотография
Программист
Дата: 05.03.2013
Ответить


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

Фотография
Дата: 05.03.2013
Ответить


Дюшес Перейти

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


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

Дюшес Перейти

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


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

Дюшес Перейти

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


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

Дюшес

Фотография
Программист
Дата: 06.03.2013
Ответить


pehas Перейти

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

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

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


pehas Перейти

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

Они в общем доступе, на кодеплексе лежат :)


pehas Перейти

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

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

pehas

Фотография
Дата: 06.03.2013
Ответить


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

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

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

Историю я беру из гидры
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 06.03.2013
Ответить


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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 06.03.2013
Ответить


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

Спасибо:

pehas

Фотография
Дата: 06.03.2013
Ответить


Mikhail Sukhov Перейти

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

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

Mikhail Sukhov Перейти

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


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

Mikhail Sukhov Перейти

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

Если не сложно, обоснуйте, пожалуйста, свое несогласие. В чем конкретно по вашему мнению она не верна и как ее считаете (если считаете) вы?
Автор топика
Спасибо:

Дюшес

Фотография
Программист
Дата: 07.03.2013
Ответить


pehas Перейти

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


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

pehas

Фотография
Дата: 07.03.2013
Ответить


Дюшес Перейти
pehas Перейти

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


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


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.03.2013
Ответить


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


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

pehas

Фотография
Дата: 07.03.2013
Ответить


Mikhail Sukhov Перейти
Или вы хотите расчет своей ИВ записать в поле Security?

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 07.03.2013
Ответить


pehas Перейти
Mikhail Sukhov Перейти
Или вы хотите расчет своей ИВ записать в поле Security?

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


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

Дюшес

Фотография
Программист
Дата: 09.03.2013
Ответить


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 и получаем щастье, без сторонней либы? :)
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy