Бага в расчете теты и в целом о расчете греков
Уважаемые разработчики!
Нашел багу в расчете теты.
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.
Теперь в целом о греках.
Формулы, которые используются в расчетах применимы только для опционов на АКЦИИ. У нас на бирже только опционы на ФЬЮЧЕРСЫ.
На западных биржах есть и те, и другие.
Если НЕ учитывать безрисковую ставку, то для фьючей по этим формулам правильно расчитываются дельта, гамма и вега, что
в общем для жизни хватает. Но если учитывать, то все неточно.