Привет опционщикам на S#
Хочу посчитать подразумеваемую волатильность опциона по предполагаемой волатильности базового актива. Т.е. я считаю, что рынок НЕ знает все и что рыночная премия опциона в текущий момент может быть ошибочной. И соответственно реальная IV опциона может быть отличной от транслируемой биржей или высчитанной по блеку-шоулзу из рыночной премии.
На S# я могу получить IV по рыночной премии. Могу получить премию по IV (через класс BlackScholes) А как посчитать премию по волатильности базового актива с тем чтобы из этой премии затем получить свою IV?
评论 (22)
登录 或 创建账户, 登录或注册以发表评论
Самому написать подсчет волатильности базового актива за интересующий период, а потом получить премию для этой волатильности подставив вместо 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 и получаем щастье, без сторонней либы? :)