public void TestLoanWithRepurchase() { #region var loanInfo = new LoanInfo { Amortization = "EqualPrincipal", Coupon = 0.18, Currency = "CNY", DayCount = "Act360", FirstPaymentDate = "20150712", Frequency = "Monthly", IsFloatingRate = false, MaturityDate = "20160612", Notional = 500000000, NumOfPayment = 12, StartDate = "20150612", MortgageCalcMethod = "Simple", AbsPrepaymentModel = "Cpr", AbsDefaultModel = "Cdr", AnnualCprRate = 0.0, AnnualCdrRate = 0.03, TaxRate = 0.056 }; #endregion var maturityDates = new[] { "20150912", "20151212", "20160312", "20160612" }; var coupons = new[] { 0.05, 0.052, 0.054, 0.055 }; var notionals = new[] { 115000000, 113000000, 110000000, 112000000 }; var bondInfos = maturityDates.Select((x, i) => new FixedRateBondInfo("bond" + x) { StartDate = "20150612", MaturityDate = x, Notional = notionals[i], Currency = "CNY", FixedCoupon = coupons[i], Calendar = "chn", PaymentFreq = "Quarterly", PaymentStub = "ShortEnd", AccrualDC = "Act365NoLeap", DayCount = "Act360", AccrualBD = "None", PaymentBD = "None", TradingMarket = "ChinaInterBank", Settlement = "+0D", ValuationParamters = new SimpleCfValuationParameters("Fr007", null, "Fr007") }).ToArray(); var loanWithRepurchaseInfo = new AbsWithRepurchaseInfo("test1") { Tranches = bondInfos, LoanInfo = loanInfo, RepurchaseRatio = 0.8, MaintenanceFeeRate = 0.004, ProtectionFeeRate = 0.0015 }; var marketInfo = new MarketInfo("testMarket", "20160202"); QdpMarket qdpMarket; MarketFunctions.BuildMarket(marketInfo, out qdpMarket); var loanVf = new AbsWithRepurchaseVf(loanWithRepurchaseInfo); var market = loanVf.GenerateMarketCondition(qdpMarket); var loanWithRepurchase = loanVf.GenerateInstrument(); var engine = loanVf.GenerateEngine(); var result = engine.Calculate(loanWithRepurchase, market, PricingRequest.Cashflow); foreach (var cashflow in result.Cashflows) { Console.WriteLine("{0},{1},{2}", cashflow.PaymentDate, cashflow.CashflowType, cashflow.PaymentAmount); } }