Dear All!
I found that the calculation of the collateral floor value only takes into account the situation where the spread is 0.
We’d rather need a calculation where the spread is not 0, the userguide (p. 162, eq. 15) gives a hint towards that.
Now following that hint, I’d put the following
Real floorDelta = -balance * std::max(-indexValue, 0.0) * dcf / samples;
...
nettingSetCollateralFloor_[nettingSetId] += floorDelta;
to be
Real floorDelta = -balance * (std::max(indexValue - collateralSpread, 0.0) - indexValue) * dcf / samples;
instead.
I’m also convinced that following the userguide, the current implementation (without regarding the spread) should rather be
Real floorDelta = -balance * (std::max(indexValue, 0.0) - indexValue) * dcf / samples;
I also don’t see where the stochastic discount factor comes into action here, but maybe I’m missing something in the balance computation.
-regards,
Roland