Вопросы по BlackScholes
Atom
20.02.2012
dvoris


Рассчитывая параметры опционов с помощью класса BlackScholes и сравнивая с другими реализациями расчёта, заметил небольшие, но расхождения. Хотелось бы от них избавиться, ведь речь идет всего лишь об простой формуле (БШ) и сколь значительных расхождений тут быть не должно.
Поэтому прошу разработчиков прояснить то, что происходит внутри BlackScholes. Как максимум, хорошо было бы увидеть код, как минимум, прошу ответить на вопросы:
1. Как именно считается время Т внутри BlackScholes? Я пробовал брать время в днях, которое даёт сам BlackScholes (GetDaysBeforeExpiry), делил на 365.0 и подставлял в формулу БШ. И всё равно получал расхождения при расчёте премий и греков. Как считается время в долях года внутри BlackScholes?
P.S. Цену базового актива беру из bs.UnderlyingAsset.LastTrade (думаю, как и в BlackScholes), волатильность - транслируемую теоретическую.. откуда ещё могут быть расхождения?
2. ... (пока хочу услышать ответ на 1-й вопрос)

Теги:


Спасибо:


dvoris

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


Пример расхождений:
код опциона, страйк, премия BlackScholes, премия моя, дельта BlackScholes, дельта моя
20:52:05 RI140000BC2 140000 27595,6 27760,8 0,958 0,944
20:52:05 RI145000BC2 145000 22790,4 23007,5 0,933 0,916
20:52:05 RI150000BC2 150000 18132,9 18416,2 0,890 0,871
20:52:05 RI155000BC2 155000 13721,1 14078,0 0,823 0,804
20:52:05 RI160000BC2 160000 9692,2 10113,9 0,723 0,708
20:52:05 RI165000BC2 165000 6226,4 6679,4 0,587 0,582
20:52:05 RI170000BC2 170000 3534,8 3963,2 0,424 0,433
20:52:05 RI175000BC2 175000 1751,9 2098,6 0,264 0,283
Спасибо:

dvoris

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


Мне кажется, что BlackScholes.GetDaysBeforeExpiry выдаёт неверный результат. Например, сейчас для мартовской серии он выдаёт 28,66.
Если прибавить это к DateTime.Now (AddDays), то у меня выходит 20 марта 2012 г. 14:10:46 (местное время на момент теста 22:19:32).
Спасибо:

dvoris

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


Опытным путем выяснил, что, скорее всего, в BlackScholes используется время окончания основной сессии дня экспирации.
Я всё-таки думаю, что чуть правильнее использовать время начала сессии или время первого клиринга (14:00), правда, это уже казуистика и сильно на расчеты не влияет.
Подставляя в формулу БШ такое время, параметры опционов почти сопадают с S#, с цифрами в терминале SmartTrade и т.д.
dt = ((DateTime)s.ExpiryDate).AddHours(14.0);
T = (dt - Trader.MarketTime).TotalSeconds / 31536000.0; // 365 * 24 * 60 * 60


Что более интересует, так это расчёт IV из цены опциона.
Заметил, что иногда BlackScholes не может рассчитать IV, и выдаёт 0.
Причем, одновременно с этим другие реализации подбора IV тоже не могут рассчитать волатильность.
Косяк возникает, как правило, на дальних страйках. Причем, уловить зависимость я не смог.
При незначительном изменении волатильности, цены БА, он может то возникать, то не возникать.
Возможно, алгоритм попадает в какую-то оптимизационную ловушку, и не может добраться по кривой к искомой IV.. (??) Хотя это странно.
Спасибо:

Mikhail Sukhov

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


dvoris
Мне кажется, что BlackScholes.GetDaysBeforeExpiry выдаёт неверный результат.


Это СмартКом значение. SmartExtensionInfoHelper.GetDaysBeforeExpiry
Спасибо:


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

loading
clippy