public FXQuoteTest() { this.fxAUD_USD = new FXQuote(baseCurrency: "AUD", counterCurrency: "USD", bidRate: 1.00275d, offerPlusPip: 5); this.fxGBP_USD = new FXQuote(baseCurrency: "GBP", counterCurrency: "USD", bidRate: 1.56788d, offerPlusPip: 5); this.fxUSD_CHF = new FXQuote(baseCurrency: "USD", counterCurrency: "CHF", bidRate: 0.92866d, offerPlusPip: 5); this.fxUSD_EUR = new FXQuote(baseCurrency: "USD", counterCurrency: "EUR", bidRate: 0.76257d, offerPlusPip: 5); }
public void TestCalculateDifferentQuote() { var fxGBP_EUR = FXQuote.CalculateCrossCurrencyQuote(this.fxGBP_USD, this.fxUSD_EUR); Assert.AreEqual(1.1956182516d, fxGBP_EUR.BidRate, Mathematics.Error, "Bid rate wrong for A/B, B/C => A/C"); Assert.AreEqual(1.1967837266d, fxGBP_EUR.OfferRate, Mathematics.Error, "Offer rate wrong for A/B, B/C => A/C"); var fxEUR_AUD = FXQuote.CalculateCrossCurrencyQuote(this.fxUSD_EUR, this.fxAUD_USD); Assert.AreEqual(1.3062504465947817d, fxEUR_AUD.BidRate, Mathematics.Error, "Bid rate wrong for A/B, C/A => B/C"); Assert.AreEqual(1.3077586867568349d, fxEUR_AUD.OfferRate, Mathematics.Error, "Offer rate wrong for A/B, C/A => B/C"); }
public void TestCalculateSameQuote() { var fxCHF_EUR = FXQuote.CalculateCrossCurrencyQuote(this.fxUSD_CHF, this.fxUSD_EUR); Assert.AreEqual(0.82070902750871755d, fxCHF_EUR.BidRate, Mathematics.Error, "Bid rate wrong for A/B, A/C => B/C"); Assert.AreEqual(0.82168931578834d, fxCHF_EUR.OfferRate, Mathematics.Error, "Offer rate wrong for A/B, A/C => B/C"); var fxAUD_GBP = FXQuote.CalculateCrossCurrencyQuote(this.fxAUD_USD, this.fxGBP_USD); Assert.AreEqual(0.63935398309083269d, fxAUD_GBP.BidRate, Mathematics.Error, "Bid rate wrong for A/B, C/B => A/C"); Assert.AreEqual(0.63987677628389927d, fxAUD_GBP.OfferRate, Mathematics.Error, "Offer rate wrong for A/B, C/B => A/C"); }
public static FXQuote CalculateCrossCurrencyQuote(FXQuote firstQuote, FXQuote secondQuote) { var commonCurrency = FindCommonCurrency(firstQuote, secondQuote); if (firstQuote.BaseCurrency == commonCurrency) { return firstQuote.BaseCurrency == secondQuote.BaseCurrency ? CalculateSameQuote(commonCurrency, firstQuote, secondQuote) : CalculateDifferentQuote(commonCurrency, firstQuote, secondQuote); } return firstQuote.CounterCurrency == secondQuote.CounterCurrency ? CalculateSameQuote(commonCurrency, firstQuote, secondQuote) : CalculateDifferentQuote(commonCurrency, firstQuote, secondQuote); }
private static string FindCommonCurrency(FXQuote firstQuote, FXQuote secondQuote) { if (firstQuote.BaseCurrency == secondQuote.BaseCurrency) return firstQuote.BaseCurrency; if (firstQuote.BaseCurrency == secondQuote.CounterCurrency) return firstQuote.BaseCurrency; if (firstQuote.CounterCurrency == secondQuote.BaseCurrency) return firstQuote.CounterCurrency; if (firstQuote.CounterCurrency == secondQuote.CounterCurrency) return firstQuote.CounterCurrency; throw new FinancialException("No common currency between FXQuote objects"); }
private static FXQuote CalculateDifferentQuote(string commonCurrency, FXQuote firstQuote, FXQuote secondQuote) { var fxQuote = new FXQuote(); if (firstQuote.BaseCurrency == commonCurrency) { fxQuote.BaseCurrency = firstQuote.CounterCurrency; fxQuote.CounterCurrency = secondQuote.BaseCurrency; fxQuote.BidRate = 1 / (firstQuote.OfferRate * secondQuote.OfferRate); fxQuote.OfferRate = 1 / (firstQuote.BidRate * secondQuote.BidRate); } else { fxQuote.BaseCurrency = firstQuote.BaseCurrency; fxQuote.CounterCurrency = secondQuote.CounterCurrency; fxQuote.BidRate = firstQuote.BidRate * secondQuote.BidRate; fxQuote.OfferRate = firstQuote.OfferRate * secondQuote.OfferRate; } return fxQuote; }
static void Main() { var cashflowPricer = new CashflowPricer(); cashflowPricer.Calculate(); Console.WriteLine(cashflowPricer); var bondPricer = new BondPricer(); bondPricer.Calculate(); Console.WriteLine(bondPricer); var yieldCurve = new YieldCurve(); yieldCurve.BootstrapSpotYields(); Console.WriteLine(yieldCurve); var depositCertificate = new CertificateDeposit(); depositCertificate.Calculate(); Console.WriteLine(depositCertificate); var discountPaper = new DiscountPaper(); discountPaper.Calculate(); Console.WriteLine(discountPaper); var fixedDeposit = new FixedDeposit(); fixedDeposit.Calculate(); Console.WriteLine(fixedDeposit); var fxQuote = new FXQuote(); Console.WriteLine(fxQuote); Console.ReadKey(); }