Привет опционщикам на S#
Хочу посчитать подразумеваемую волатильность опциона по предполагаемой волатильности базового актива. Т.е. я считаю, что рынок НЕ знает все и что рыночная премия опциона в текущий момент может быть ошибочной. И соответственно реальная IV опциона может быть отличной от транслируемой биржей или высчитанной по блеку-шоулзу из рыночной премии.
На S# я могу получить IV по рыночной премии. Могу получить премию по IV (через класс BlackScholes) А как посчитать премию по волатильности базового актива с тем чтобы из этой премии затем получить свою IV?
Kommentare (22)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Самому написать подсчет волатильности базового актива за интересующий период, а потом получить премию для этой волатильности подставив вместо IV (через класс BlackScholes). Я давно хотел этим заняться, да все руки не доходят.
Так не выйдет. bs.Premium(Volatility) расчитывает премию по IV опциона, не по исторической. Я пока сделал так. Нашел в интернетах класс блека шоулза на сях, он считает премию по исторической волатильности, а потом эту премию подставляю в bs.IV(premium) стокшарпа.
Вот думал, может как то сразу на S# это можно сделать, чтобы сторонние либы не пользовать
А исходники есть?
Кстати, ну и как эти iv сильно расходятся? Не сравнивал?
Насколько я помню, через S# это делалось через переключение одного поля на другое.
Интуитивно, я как бы догадываюсь, что если вызывать расчет премии без параметров - bs.Premium() то расчет должен вестись по полю Volatility базового актива (?). Но как говорится, хотелось бы уточнить..
Ну и вопрос, конечно, если это так (как описано выше) и используется это поле Volatility, будет ли это по феншую выставлять каждый раз в это поле свою расчетную историческую волатильность
Нет, в 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 ей соответствующую и держу пальцы крестиком, чтобы она оказалась правильнее чем та, что расчитана шарпом по последней цене (или та что транслируется биржей) :)
Откуда вы это знаете, проверенное инфо? Как тогда я вызываю bs.Premium на инструменте загруженном из истории (при тестировании) и соответственно без данных о волатильности с биржи? И оно рассчитывается.
Исходники шарпа тоже? Если да, то скажите как посмотреть, пожалуйста.
Волатильность считается на основе стандартного отклонения лог реторнов временного ряда БА. Это и будет Deviation
А в коннекторе, пришедшая/изменяющаяся iv заполняет соответствующее поле у инструмента.
Точно лежат.. Раньше не было сорсов. И согласно исходникам таки юзается по дефолту поле Option.ImpliedVolatility Хотя как оно тогда расчитывает Premium для исторических данных в которых нет этой волатильности.. В любом случае - это опционная волатильность, не историческая. Так что все равно не оно.
Историю я беру из гидры
А саму волатильность берете именно как волатильность базового актива, или самостоятельно рассчитываете по цене хождения?
Насколько я помню, РТС сама транслирует как IV так и HV. Но это надо уточнять. Если можете найти в Плазе, можно прикрутить накопление уже HV. Я недавно сделал это для кое какого источника, чтобы Гидра начала разливать историю от подразумеваемой. Так что формат в принципе готов.
Ну и вставлю видос по теме (но я там не согласен с методикой расчета волатильности)
Параметр Deviation, вместо IV подставляем расчетную HV?
Нет, тут речь шла о дополнительном поле HistoricalVolatility Расчитанную историческую волатильность будеете подставлять в модель БШ сторонней либы сслыку на которую я дал в самом начале, чтобы получить расчетную цену опциона. По этой расчитанной цене, сможете вычислить собственную IV а не ту что вам дает биржа
Помоему, Дюшес все правильно сказал. Получение информации от биржи не должно конфликтовать с собственным расчетом. Или вы хотите расчет своей ИВ записать в поле Security?
Я не знаю что у вас не получается (у меня потому что расчет идет свой, но не по истории). В любом случае раз решили проблему, то это хорошо.
Мне кажется можно не пользоваться сторонней библиотекой, т.к. все то же самое реализовано в 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 и получаем щастье, без сторонней либы? :)