예제 #1
0
        // 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);
        }
예제 #2
0
        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));
        }
예제 #3
0
        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));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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));
        }
예제 #6
0
 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;
     }
 }
예제 #7
0
 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;
     }
 }
예제 #8
0
        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;
            }
        }
예제 #9
0
        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
            }
        }
예제 #10
0
        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;
            }
        }