// Fras public ADouble ParFraRateAD(Fra fra) { Curve_AD fwdCurve = this.ADFwdCurveCollection.GetCurve(fra.ReferenceIndex); ADouble rate = fwdCurve.FwdRate(fra.AsOf, fra.StartDate, fra.EndDate, fra.DayRule, fra.DayCount, Interpolation); return(rate); }
public ADouble FraNpvAD(Fra fra) { ADouble fraRate = ADFwdCurveCollection.GetCurve(fra.ReferenceIndex).FwdRate(fra.AsOf, fra.StartDate, fra.EndDate, fra.DayRule, fra.DayCount, Interpolation); ADouble notional = fra.Notional; ADouble discFactor = ADDiscCurve.DiscFactor(fra.AsOf, fra.EndDate, fra.DayCount, Interpolation); ADouble coverage = DateHandling.Cvg(fra.StartDate, fra.EndDate, fra.DayCount); return(fra.TradeSign * notional * discFactor * coverage * (fraRate - fra.FixedRate)); }
public double FraNpv(Fra fra) { double fraRate = FwdCurveCollection.GetCurve(fra.ReferenceIndex).FwdRate(fra.AsOf, fra.StartDate, fra.EndDate, fra.DayRule, fra.DayCount, Interpolation); double notional = fra.Notional; double discFactor = DiscCurve.DiscFactor(fra.AsOf, fra.StartDate, fra.DayCount, Interpolation); // Note from today and to startDate => Market FRA double coverage = DateHandling.Cvg(fra.StartDate, fra.EndDate, fra.DayCount); return(fra.TradeSign * notional * discFactor * coverage * (fraRate - fra.FixedRate)); }
public ADouble FuturesNpvAD(Futures future) { Fra fra = future.FraSameSpec; ADouble fraRate = ParFraRateAD(fra); ADouble notional = fra.Notional; ADouble convexity = future.Convexity; ADouble futuresRate = fraRate + convexity; return(notional * (1.0 - futuresRate)); }
public double FuturesNpv(Futures future) { Fra fra = future.FraSameSpec; double fraRate = ParFraRate(fra); double notional = fra.Notional; double convexity = future.Convexity; double futuresRate = fraRate + convexity; return(notional * (1 - futuresRate)); }
public Futures(Fra fra, double?convexity) { FraSameSpec = fra; if (convexity == null) { Convexity = CalcSimpleConvexity(fra.AsOf, fra.StartDate, fra.EndDate, fra.DayCount); } else { Convexity = (double)convexity; } }
public Futures(DateTime asOf, DateTime startDate, DateTime endDate, CurveTenor referenceIndex, DayCount dayCount, DayRule dayRule, double fixedRate, double notional, int tradeSign, double?convexity = null) { FraSameSpec = new Fra(asOf, startDate, endDate, referenceIndex, dayCount, dayRule, fixedRate, notional, tradeSign); if (convexity == null) { Convexity = CalcSimpleConvexity(asOf, startDate, endDate, dayCount); } else { Convexity = (double)convexity; } }
public Futures(DateTime asOf, string startTenor, string endTenor, CurveTenor referenceIndex, DayCount dayCount, DayRule dayRule, double fixedRate, double notional, int tradeSign, double?convexity = null) { DateTime startDate = DateHandling.AddTenorAdjust(asOf, startTenor, dayRule); DateTime endDate = DateHandling.AddTenorAdjust(startDate, endTenor, dayRule); FraSameSpec = new Fra(asOf, startDate, endDate, referenceIndex, dayCount, dayRule, fixedRate, notional, tradeSign); if (convexity == null) { Convexity = CalcSimpleConvexity(asOf, startDate, endDate, dayCount); } else { Convexity = (double)convexity; } }
private void InterpretFuturesString(string instrumentString) { string identifier, type, currency, endTenor, settlementLag, floatPayFreq, floatFixingTenor, fwdTenor; DayRule dayRule; DayCount dayCount; CurveTenor curveTenor; string[] infoArray = instrumentString.Split(',').ToArray(); identifier = infoArray[0]; type = infoArray[1]; currency = infoArray[2]; endTenor = infoArray[3]; settlementLag = infoArray[4]; dayRule = StrToEnum.DayRuleConvert(infoArray[5]); floatPayFreq = infoArray[8]; floatFixingTenor = infoArray[9]; fwdTenor = infoArray[15]; dayCount = StrToEnum.DayCountConvert(infoArray[11]); DateTime startDate, endDate; try { startDate = Convert.ToDateTime(fwdTenor); endDate = DateHandling.AddTenorAdjust(startDate, floatPayFreq, dayRule); curveTenor = StrToEnum.CurveTenorFromSimpleTenor(floatPayFreq); Fra fra = new MasterThesis.Fra(AsOf, startDate, endDate, curveTenor, dayCount, dayRule, _defaultFixedRate, _defaultNotional, _defaultTradeSign); Futures[identifier] = new MasterThesis.Futures(fra, null); CurvePointMap[identifier] = fra.GetCurvePoint(); InstrumentTypeMap[identifier] = QuoteType.FuturesRate; InstrumentFormatTypeMap[identifier] = InstrumentFormatType.Futures; IdentifierStringMap[identifier] = instrumentString; } catch { // Ignore instrument } }
private void InterpretFraString(string instrumentString) { string identifier, type, currency, endTenor, settlementLag, floatPayFreq, floatFixingTenor, fwdTenor; DayRule dayRule; DayCount dayCount; CurveTenor curveTenor; string[] infoArray = instrumentString.Split(',').ToArray(); identifier = infoArray[0]; type = infoArray[1]; currency = infoArray[2]; endTenor = infoArray[3]; settlementLag = infoArray[4]; dayRule = StrToEnum.DayRuleConvert(infoArray[5]); floatPayFreq = infoArray[8]; floatFixingTenor = infoArray[9]; fwdTenor = infoArray[15]; dayCount = StrToEnum.DayCountConvert(infoArray[11]); if (type == "DEPOSIT") { //handle deposits - only used for LIBOR discounting. Not implemented } else { // handle FRA // Has to consider both FwdTenor and SettlementLag here.. curveTenor = StrToEnum.CurveTenorFromSimpleTenor(floatPayFreq); Fra fra = new MasterThesis.Fra(AsOf, fwdTenor, endTenor, curveTenor, dayCount, dayRule, _defaultFixedRate, _defaultNotional, _defaultTradeSign); Fras[identifier] = fra; CurvePointMap[identifier] = fra.GetCurvePoint(); InstrumentTypeMap[identifier] = QuoteType.FraRate; InstrumentFormatTypeMap[identifier] = InstrumentFormatType.Fras; IdentifierStringMap[identifier] = instrumentString; } }