public void FixedPaymentStreamLevelFunctionTest() { PaymentStream.Direction direction = PaymentStream.Direction.Payer; decimal notional = 1239771.88m; List <decimal> notionals = new List <decimal>(40); for (int i = 0; i < 40; ++i) { notionals.Add(notional); } DateTime referenceDate = new DateTime(2009, 7, 1); FixedPaymentStream fixedPaymentStream = new FixedPaymentStream(direction, notionals, fixedYearFractions, fixedCashflows, fixedDiscountFactors, 0.0m); decimal calculatedLevelFunction = fixedPaymentStream.LevelFunction(); // decimal calculatedAccruedNPV = fixedPaymentStream.AccruedNPV(); //fixedPaymentStream.AccruedNPV(4.22095m/100.0m); //double expectedAccruedNPV = -397825.73; double expectedLevelFunction = -7.60223072; Assert.AreEqual(Convert.ToDouble(calculatedLevelFunction), expectedLevelFunction, 5e-3); // Assert.AreEqual(Convert.ToDouble(calculatedAccruedNPV), expectedAccruedNPV, 0.2); }
public decimal BreakEvenRate(PaymentStream.Direction direction) { if (direction == _payerPaymentStream.Dir) { if (_payerPaymentStream.GetType() == typeof(FixedPaymentStream)) { return((((_receiverPaymentStream.NPV() / getSpotExchangeRate(direction)) - _payerPaymentStream.PrincipleExchangePV()) / _payerPaymentStream.AccruedNPVOfNotional()) * -1.0m); } //else //{ // find the spread over floating rate //} } else { if (_receiverPaymentStream.GetType() == typeof(FixedPaymentStream)) { return((((_payerPaymentStream.NPV() / getSpotExchangeRate(direction)) - _receiverPaymentStream.PrincipleExchangePV()) / _receiverPaymentStream.AccruedNPVOfNotional()) * -1.0m); } //else //{ // find the spread over floating rate //} } return(0.0m); }
public CrossCurrencyIRSwap(PaymentStream payerPaymentStream, PaymentStream receiverPaymentStream, decimal spotExchangeRate, PaymentStream.Direction direction) { _payerPaymentStream = payerPaymentStream; _receiverPaymentStream = receiverPaymentStream; _spotExchangeRate = spotExchangeRate; _spotExchangeRateBase = direction; }
public decimal getSpotExchangeRate(PaymentStream.Direction direction) { if (direction == _spotExchangeRateBase) { return(_spotExchangeRate); } return(1.0m / _spotExchangeRate); }
public decimal SpotExchangeRate(PaymentStream.Direction conversionBase) { if (conversionBase == _payerPaymentStream.Dir) { return(_receiverPaymentStream.PrincipleExchange / _payerPaymentStream.PrincipleExchange); } return(_payerPaymentStream.PrincipleExchange / _receiverPaymentStream.PrincipleExchange); }
public void CrossCurrencyIRSwapTest() { #region Receiver Leg of the swap PaymentStream.Direction direction = PaymentStream.Direction.Receiver; decimal notional = 1000000.0m; List <decimal> notionals = new List <decimal>(40); for (int i = 0; i < 40; ++i) { notionals.Add(notional); } DateTime referenceDate = new DateTime(2009, 7, 1); FloatingPaymentStream floatingPaymentStream = new FloatingPaymentStream(direction, notionals, floatingYearFractions, floatingCashflows, floatingDiscountFactors, 0.0m); #endregion #region Payer Leg of the swap PaymentStream.Direction dir = PaymentStream.Direction.Payer; decimal payerNotional = 1239771.88m; List <decimal> payerNotionals = new List <decimal>(40); for (int i = 0; i < 40; ++i) { payerNotionals.Add(payerNotional); } DateTime payerReferenceDate = new DateTime(2009, 7, 1); FixedPaymentStream fixedPaymentStream = new FixedPaymentStream(dir, payerNotionals, fixedYearFractions, fixedCashflows, fixedDiscountFactors, 0.0m); #endregion CrossCurrencyIRSwap swap = new CrossCurrencyIRSwap(fixedPaymentStream, floatingPaymentStream, 0.8066m, PaymentStream.Direction.Payer); decimal ber = swap.BreakEvenRate(PaymentStream.Direction.Payer); }
public void FloatingPaymentStreamConstructorTest() { PaymentStream.Direction direction = PaymentStream.Direction.Payer; decimal notional = 1000000.0m; List <decimal> notionals = new List <decimal>(); for (int i = 0; i < 40; ++i) { notionals.Add(notional); } DateTime referenceDate = new DateTime(2009, 7, 1); FloatingPaymentStream floatingPaymentStream = new FloatingPaymentStream(direction, notionals, floatingYearFractions, floatingCashflows, floatingDiscountFactors, 0.0m); #region expected forward rates decimal[] expectedForwardRates = { 0.59494m / 100.0m, 0.6464m / 100.0m, 0.98232m / 100.0m, 1.25659m / 100.0m, 1.62129m / 100.0m, 1.99391m / 100.0m, 2.37068m / 100.0m, 2.70303m / 100.0m, 3.02493m / 100.0m, 3.29518m / 100.0m, 3.55722m / 100.0m, 3.74159m / 100.0m, 3.88433m / 100.0m, 3.85484m / 100.0m, 4.0788m / 100.0m, 4.29895m / 100.0m, 4.2114m / 100.0m, 4.40091m / 100.0m, 4.58781m / 100.0m, 4.76869m / 100.0m, 4.40348m / 100.0m, 4.54149m / 100.0m, 4.67837m / 100.0m, 4.78932m / 100.0m, 4.49065m / 100.0m, 4.59064m / 100.0m, 4.68818m / 100.0m, 4.78657m / 100.0m, 4.59108m / 100.0m, 4.66833m / 100.0m, 4.74582m / 100.0m, 4.82381m / 100.0m, 4.59301m / 100.0m, 4.6531m / 100.0m, 4.71192m / 100.0m, 4.76986m / 100.0m, 4.69361m / 100.0m, 4.74621m / 100.0m, 4.79761m / 100.0m, 4.84809m / 100.0m }; #endregion List <decimal> calculatedForwardRates = new List <decimal>(); calculatedForwardRates.AddRange(floatingPaymentStream.ForwardRates); int len = floatingPaymentStream.ForwardRates.Count; for (int i = 0; i < len; ++i) { Assert.AreEqual(Convert.ToDouble(calculatedForwardRates[i]), Convert.ToDouble(expectedForwardRates[i]), 5e-3); } }