Уважаемые разработчики!
Нашел багу в расчете теты.
var theta =
-(SecurityPriceMode(UnderlyingAsset) * deviation * (decimal)nd1) / (2 * (decimal)timeToExp.Sqrt() * **_dayInYear**) -
sign * (Option.Strike * RiskFree * (decimal)(expRate * normaldistr.normaldistribution(sign * d2)));
return TryRound(theta);
Т.е. на кол-во дней в году делится только первое слагаемое. Если безрисковую ставку сделать ненулевой тета начинает быть положительной и зашкаливать :) Правильно будет вот так:
var theta =
-(SecurityPriceMode(UnderlyingAsset) * deviation * (decimal)nd1) / (2 * (decimal)timeToExp.Sqrt()) -
sign * (Option.Strike * RiskFree * (decimal)(expRate * normaldistr.normaldistribution(sign * d2)));
return TryRound(theta / **_dayInYear**);
Ну и переименовать бы ее в _daysInYear.
Теперь в целом о греках. Формулы, которые используются в расчетах применимы только для опционов на АКЦИИ. У нас на бирже только опционы на ФЬЮЧЕРСЫ. На западных биржах есть и те, и другие.
Если НЕ учитывать безрисковую ставку, то для фьючей по этим формулам правильно расчитываются дельта, гамма и вега, что в общем для жизни хватает. Но если учитывать, то все неточно.
Comments (8)
Login or Create account, Log in or register to leave a comment
Будем фикс в следующей версии. Совместно с этим http://stocksharp.com/forum/3711/Raschiet-Tsieny-optsiona-iesli/
Поняли ли вы разницу между опционами на акции и фьючи?
Она и так понятная, так как формула универсальная (для акций и для фьючей одновременной). Я разобрался с расчетот теты, а именно то, что неправильно было в формуле. Я так понимаю, с другими греками все нормально? Фраза "то все неточно." несколько не понятна. Все - это что?
На верью могу прислать, как и сам юнит тест. Куда слать, на почту по аккаунту?
Да, на почту по аккаунту, плиз. Если хотите, могу к вам по скайпу позвонить и рассказать про неточности.
Постучался.
Вот еще бы для этого фикс: http://stocksharp.com/forum/3889/Probliema-eksporta-tablitsy-instrumientov-dlia-optsionov--iesli-iest--instrumienty-so-spota/