示例#1
0
        /// <summary>
        /// This method check scenario by scenario for defaults, overwriting bondValue as necessary
        /// </summary>
        public static void AdjustBondValueForDefault(double notional, double expiryTime, Vector bondValue, Vector bondIsAlive,
                                                     Vector historicalRecovery, Vector defaultTime, double currentTime, IInterestRate discountRate, RecoveryRate recoveryRate)
        {
            using (var cache = Vector.CacheLike(bondValue))
            {
                Vector recoveryValue = cache.Get();
                Vector expiryDf      = cache.Get();

                discountRate.GetValue(expiryDf, currentTime, expiryTime);
                recoveryRate.GetValue(recoveryValue, currentTime);

                // If this is the period when the bond defaults fill in the historical recovery amount.
                historicalRecovery.AssignConditional((defaultTime <= currentTime).And(bondIsAlive), recoveryValue * notional, historicalRecovery);

                bondValue.AssignConditional((defaultTime <= currentTime), expiryDf * historicalRecovery, bondValue);

                bondIsAlive.AssignConditional((defaultTime <= currentTime), 0.0, bondIsAlive);
            }
        }
示例#2
0
 /// <summary>
 /// Returns the recovery rate to be used for realized default.
 /// </summary>
 protected override void RealizedRecoveryRate(Vector vout, RecoveryRate RR, double t)
 {
     RR.GetValue(vout, t);
 }