コード例 #1
0
        public void TestTryParse_1y1m1q_Negative()
        {
            string tenor = "1y1m1q";
            bool   flag  = Tenor.TryParse(tenor, out Tenor res);

            Assert.IsFalse(flag);
        }
コード例 #2
0
        public void TestTryParse_null_Negative()
        {
            string tenor = null;
            bool   flag  = Tenor.TryParse(tenor, out Tenor res);

            Assert.IsFalse(flag);
        }
コード例 #3
0
        public void RateCurveCalibrator_CanCalibrateTwoCurves()
        {
            var instruments              = new List <IRateCurveInstrument>();
            var zarCsaCurveDescription   = new DiscountingSourceDescription(_zar, new BankAccountNumeraire(_zar));
            var jibarDiscountDescription = new DiscountingSourceDescription(_zar, _jibar3M);

            instruments.Add(new DepoCurveInstrument(Tenor.FromMonths(3), 0.071, jibarDiscountDescription));
            instruments.Add(new FixedFloatSwapCurveInstrument(Tenor.FromMonths(6), _jibar3M, 0.0, 0.07,
                                                              zarCsaCurveDescription, FixedFloatSwapCurveInstrument.CurveToStrip.Forecast));
            instruments.Add(new FixedFloatSwapCurveInstrument(Tenor.FromYears(2), _jibar3M, 0.0, 0.07,
                                                              zarCsaCurveDescription, FixedFloatSwapCurveInstrument.CurveToStrip.Forecast));

            instruments.Add(new DepoCurveInstrument(Tenor.FromDays(1), 0.06, zarCsaCurveDescription));
            instruments.Add(new BasisSwapCurveInstrument(Tenor.FromYears(1), _jibar3M, _jibar1D, 0.0, 0.01,
                                                         zarCsaCurveDescription, BasisSwapCurveInstrument.CurveToStrip.DiscountCurve));
            instruments.Add(new BasisSwapCurveInstrument(Tenor.FromYears(2), _jibar3M, _jibar1D, 0.0, 0.01,
                                                         zarCsaCurveDescription, BasisSwapCurveInstrument.CurveToStrip.DiscountCurve));

            var calib = new RateCurveCalibrator(instruments, new MultiDimNewton(1e-8, 100),
                                                zarCsaCurveDescription, new FloatRateIndex[] { _jibar1D },
                                                jibarDiscountDescription, new FloatRateIndex[] { _jibar3M });
            var mdc = new MarketDataContainer();

            mdc.Set(calib);
            calib.TryCalibrate(_calibrationDate, mdc);
            var testValues   = instruments.Select(inst => Math.Abs(inst.Objective()));
            var maxTestValue = testValues.Max();

            Assert.AreEqual(0.0, maxTestValue, 1e-8);
        }
コード例 #4
0
        private static Pair <Tenor, Tenor> DeserializeKey(IFudgeField fudgeField)
        {
            Tenor first  = DeserializeTenor(fudgeField, "first");
            Tenor second = DeserializeTenor(fudgeField, "second");

            return(new Pair <Tenor, Tenor>(first, second));
        }
コード例 #5
0
        //-------------------------------------------------------------------------
        // parse the index and default fixed leg day count
        private static FloatingRateIndex parseIndex(CsvRow row, string leg)
        {
            Optional <string> fixedRateOpt = findValue(row, leg, FIXED_RATE_FIELD);
            Optional <string> indexOpt     = findValue(row, leg, INDEX_FIELD);

            if (fixedRateOpt.Present)
            {
                if (indexOpt.Present)
                {
                    throw new System.ArgumentException("Swap leg must not define both '" + leg + FIXED_RATE_FIELD + "' and  '" + leg + INDEX_FIELD + "'");
                }
                return(null);
            }
            if (!indexOpt.Present)
            {
                throw new System.ArgumentException("Swap leg must define either '" + leg + FIXED_RATE_FIELD + "' or  '" + leg + INDEX_FIELD + "'");
            }
            // use FloatingRateName to identify Ibor vs other
            string           indexStr = indexOpt.get();
            FloatingRateName frn      = FloatingRateName.parse(indexStr);

            if (frn.Type == FloatingRateType.IBOR)
            {
                // re-parse Ibor using tenor, which ensures tenor picked up from indexStr if present
                Frequency freq      = Frequency.parse(getValue(row, leg, FREQUENCY_FIELD));
                Tenor     iborTenor = freq.Term ? frn.DefaultTenor : Tenor.of(freq.Period);
                return(FloatingRateIndex.parse(indexStr, iborTenor));
            }
            return(frn.toFloatingRateIndex());
        }
コード例 #6
0
        private void SetYSliceGraph(Tenor y)
        {
            var slice = Surface.GetYSlice(y);

            _ySliceCurveControl.DataContext = slice;
            leftCurveControl.DataContext    = slice;
        }
コード例 #7
0
        public void TestSwapHW()
        {
            // Make the swap
            var    rate      = 0.08;
            var    payFixed  = true;
            double notional  = 1000000;
            var    startDate = new Date(2016, 9, 17);
            var    tenor     = Tenor.Years(5);
            var    swap      = IRSwap.CreateZARSwap(rate, payFixed, notional, startDate, tenor);

            // Set up the model
            var valueDate     = new Date(2016, 9, 17);
            var a             = 0.05;
            var vol           = 0.01;
            var flatCurveRate = 0.07;
            var hullWiteSim   = new HullWhite1F(Currency.ZAR, a, vol, flatCurveRate, flatCurveRate, valueDate);

            hullWiteSim.AddForecast(FloatingIndex.JIBAR3M);
            var coordinator = new Coordinator(hullWiteSim, new List <Simulator>(), 10000);

            // Run the valuation
            var value    = coordinator.Value(new Product[] { swap }, valueDate);
            var refValue = -41838.32; // See RateProductTest.xlsx

            Assert.AreEqual(refValue, value, 4000);
        }
コード例 #8
0
ファイル: CoordinatorTest.cs プロジェクト: sandboxorg/QuantSA
        public void TestCoordinatorAllData()
        {
            // Make the swap
            var    rate      = 0.07;
            var    payFixed  = true;
            double notional  = 1000000;
            var    startDate = new Date(2016, 9, 17);
            var    tenor     = Tenor.Years(5);
            var    swap      = IRSwap.CreateZARSwap(rate, payFixed, notional, startDate, tenor);

            // Set up the model
            var valueDate     = new Date(2016, 9, 17);
            var a             = 0.05;
            var vol           = 0.01;
            var flatCurveRate = 0.07;
            var hullWiteSim   = new HullWhite1F(Currency.ZAR, a, vol, flatCurveRate, flatCurveRate, valueDate);

            hullWiteSim.AddForecast(FloatingIndex.JIBAR3M);
            var coordinator = new Coordinator(hullWiteSim, new List <Simulator>(), 5000);

            var date          = valueDate;
            var endDate       = valueDate.AddTenor(tenor);
            var fwdValueDates = new List <Date>();

            while (date < endDate)
            {
                fwdValueDates.Add(date);
                date = date.AddTenor(Tenor.Days(10));
            }

            var allDetails = coordinator.GetValuePaths(new Product[] { swap }, valueDate, fwdValueDates.ToArray());

            allDetails.GetNames();
        }
コード例 #9
0
        private void SetXSliceGraph(Tenor x)
        {
            var slice = Surface.GetXSlice(x);

            _xSliceCurveControl.DataContext = slice;
            rightCurveControl.DataContext   = slice;
        }
コード例 #10
0
 public static object _CreateZARBermudanSwaption(string objectName,
                                                 object[,] exerciseDates,
                                                 object[,] longOptionality,
                                                 object[,] startDate,
                                                 object[,] tenor,
                                                 object[,] rate,
                                                 object[,] payFixed,
                                                 object[,] notional)
 {
     try
     {
         Date[]           _exerciseDates   = XU.GetDate1D(exerciseDates, "exerciseDates");
         Boolean          _longOptionality = XU.GetBoolean0D(longOptionality, "longOptionality");
         Date             _startDate       = XU.GetDate0D(startDate, "startDate");
         Tenor            _tenor           = XU.GetTenor0D(tenor, "tenor");
         Double           _rate            = XU.GetDouble0D(rate, "rate");
         Boolean          _payFixed        = XU.GetBoolean0D(payFixed, "payFixed");
         Double           _notional        = XU.GetDouble0D(notional, "notional");
         BermudanSwaption _result          = XLRates.CreateZARBermudanSwaption(_exerciseDates, _longOptionality, _startDate, _tenor, _rate, _payFixed, _notional);
         return(XU.AddObject(objectName, _result));
     }
     catch (Exception e)
     {
         return(XU.Error0D(e));
     }
 }
コード例 #11
0
        public FixedFloatSwapCurveInstrument(Tenor tenor, FloatRateIndex index, double spread, double fixedRate,
                                             DiscountingSourceDescription discountCurveDescription, CurveToStrip curveToStrip)
        {
            _tenor     = tenor;
            _index     = index;
            _spread    = spread;
            _fixedRate = fixedRate;
            _discountCurveDescription = discountCurveDescription;
            switch (curveToStrip)
            {
            case CurveToStrip.Forecast:
            {
                _nameOfCurveToStrip = new FloatingRateSourceDescription(index).Name;
                break;
            }

            case CurveToStrip.Discount:
            {
                _nameOfCurveToStrip = _discountCurveDescription.Name;
                break;
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(curveToStrip), curveToStrip, null);
            }
        }
コード例 #12
0
            public override Builder set(string propertyName, object newValue)
            {
                switch (propertyName.GetHashCode())
                {
                case 102727412:         // label
                    this.label_Renamed = (string)newValue;
                    break;

                case -518800962:         // observableId
                    this.observableId_Renamed = (ObservableId)newValue;
                    break;

                case 110246592:         // tenor
                    this.tenor_Renamed = (Tenor)newValue;
                    break;

                case 746995843:         // spotDateOffset
                    this.spotDateOffset_Renamed = (DaysAdjustment)newValue;
                    break;

                case -1065319863:         // businessDayAdjustment
                    this.businessDayAdjustment_Renamed = (BusinessDayAdjustment)newValue;
                    break;

                case 1905311443:         // dayCount
                    this.dayCount_Renamed = (DayCount)newValue;
                    break;

                default:
                    throw new NoSuchElementException("Unknown property: " + propertyName);
                }
                return(this);
            }
コード例 #13
0
 public PointRecipe(Guid instrumentId, Tenor tenor, DateLag dateLag, PriceType?priceType = null)
 {
     InstrumentId = instrumentId;
     Tenor        = tenor;
     DateLag      = dateLag;
     PriceType    = priceType;
 }
コード例 #14
0
        /// <summary>
        /// Converts an FpML tenor string to a {@code Tenor}.
        /// </summary>
        /// <param name="multiplier">  the multiplier </param>
        /// <param name="unit">  the unit </param>
        /// <returns> the tenor </returns>
        /// <exception cref="IllegalArgumentException"> if the tenor is not known </exception>
        public Tenor convertIndexTenor(string multiplier, string unit)
        {
            string periodStr = multiplier + unit;
            Tenor  tenor     = TENOR_MAP[periodStr];

            return(tenor != null ? tenor : Tenor.parse(periodStr));
        }
コード例 #15
0
        private static IborIndex parseIborIndex(CsvRow row)
        {
            string            name      = row.getValue(NAME_FIELD);
            Currency          currency  = Currency.parse(row.getValue(CURRENCY_FIELD));
            bool              active    = bool.Parse(row.getValue(ACTIVE_FIELD));
            DayCount          dayCount  = DayCount.of(row.getValue(DAY_COUNT_FIELD));
            HolidayCalendarId fixingCal = HolidayCalendarId.of(row.getValue(FIXING_CALENDAR_FIELD));
            int offsetDays = int.Parse(row.getValue(OFFSET_DAYS_FIELD));
            HolidayCalendarId offsetCal        = HolidayCalendarId.of(row.getValue(OFFSET_CALENDAR_FIELD));
            HolidayCalendarId effectiveCal     = HolidayCalendarId.of(row.getValue(EFFECTIVE_DATE_CALENDAR_FIELD));
            Tenor             tenor            = Tenor.parse(row.getValue(TENOR_FIELD));
            LocalTime         time             = LocalTime.parse(row.getValue(FIXING_TIME_FIELD), TIME_FORMAT);
            ZoneId            zoneId           = ZoneId.of(row.getValue(FIXING_ZONE_FIELD));
            DayCount          fixedLegDayCount = DayCount.of(row.getValue(FIXED_LEG_DAY_COUNT));

            // interpret CSV
            DaysAdjustment fixingOffset    = DaysAdjustment.ofBusinessDays(-offsetDays, offsetCal, BusinessDayAdjustment.of(PRECEDING, fixingCal)).normalized();
            DaysAdjustment effectiveOffset = DaysAdjustment.ofBusinessDays(offsetDays, offsetCal, BusinessDayAdjustment.of(FOLLOWING, effectiveCal)).normalized();

            // convention can be two different things
            PeriodAdditionConvention periodAdditionConvention = PeriodAdditionConvention.extendedEnum().find(row.getField(TENOR_CONVENTION_FIELD)).orElse(PeriodAdditionConventions.NONE);
            BusinessDayConvention    tenorBusinessConvention  = BusinessDayConvention.extendedEnum().find(row.getField(TENOR_CONVENTION_FIELD)).orElse(isEndOfMonth(periodAdditionConvention) ? MODIFIED_FOLLOWING : FOLLOWING);
            BusinessDayAdjustment    adj             = BusinessDayAdjustment.of(tenorBusinessConvention, effectiveCal);
            TenorAdjustment          tenorAdjustment = TenorAdjustment.of(tenor, periodAdditionConvention, adj);

            // build result
            return(ImmutableIborIndex.builder().name(name).currency(currency).active(active).dayCount(dayCount).fixingCalendar(fixingCal).fixingDateOffset(fixingOffset).effectiveDateOffset(effectiveOffset).maturityDateOffset(tenorAdjustment).fixingTime(time).fixingZone(zoneId).defaultFixedLegDayCount(fixedLegDayCount).build());
        }
コード例 #16
0
        public void TestTenor_7d_is_1w()
        {
            var tenor7d = new Tenor(0, 0, 0, 7);
            var tenor1w = new Tenor(0, 0, 1, 0);

            Assert.IsTrue(tenor1w == tenor7d);
        }
コード例 #17
0
 public void TestTenor_Constructor_Negative4()
 {
     Assert.ThrowsException <ArgumentOutOfRangeException>(() =>
     {
         Tenor tenor = new Tenor(1, 1, 1, -1);
     });
 }
コード例 #18
0
        public void TestTenor_12m_is_1y()
        {
            var tenor12m = new Tenor(0, 12, 0, 0);
            var tenor1y  = new Tenor(1, 0, 0, 0);

            Assert.IsTrue(tenor1y == tenor12m);
        }
コード例 #19
0
 private TenorParameterMetadata(Tenor tenor, string label)
 {
     JodaBeanUtils.notNull(tenor, "tenor");
     JodaBeanUtils.notEmpty(label, "label");
     this.tenor = tenor;
     this.label = label;
 }
コード例 #20
0
 private FixedInflationSwapTemplate(Tenor tenor, FixedInflationSwapConvention convention)
 {
     JodaBeanUtils.notNull(tenor, "tenor");
     JodaBeanUtils.notNull(convention, "convention");
     this.tenor      = tenor;
     this.convention = convention;
 }
コード例 #21
0
        private Product[] GetListOfSwaps()
        {
            int    N          = 50000;
            Date   anchorDate = new Date(2016, 11, 21);
            double rate       = 0.08;
            bool   payFixed   = true;
            double notional   = 1000000;

            double[,] swapDist = new double[, ] {
                { 0.171 }, { 0.148 }, { 0.101 }, { 0.094 }, { 0.108 }, { 0.056 }, { 0.041 }, { 0.049 }, { 0.047 }, { 0.056 }, { 0.013 }, { 0.013 }, { 0.010 }, { 0.011 }, { 0.011 }, { 0.004 }, { 0.003 }, { 0.005 }, { 0.007 }, { 0.006 }, { 0.004 }, { 0.004 }, { 0.007 }, { 0.005 }, { 0.006 }, { 0.006 }, { 0.003 }, { 0.003 }, { 0.002 }, { 0.005 }
            };
            IRandomNumberGenerator <double> generator1   = new ZigguratUniformGenerator(0, 1);
            IRandomNumberGenerator <double> generator365 = new ZigguratUniformGenerator(1, 365);

            double[,] cumSum = swapDist.CumulativeSum(1);

            Product[] allSwaps = new Product[N];
            for (int swapNum = 0; swapNum < N; swapNum++)
            {
                double x     = generator1.Generate();
                int    years = 0;
                while (years < cumSum.GetLength(0) && x > cumSum[years, 0])
                {
                    years++;
                }
                int  days      = (int)Math.Round(generator365.Generate());
                Date endDate   = anchorDate.AddTenor(new Tenor(days, 0, 0, years));
                Date startDate = endDate.AddTenor(Tenor.Years(-years - 1));
                allSwaps[swapNum] = IRSwap.CreateZARSwap(rate, payFixed, notional, startDate, Tenor.Years(years + 1));
            }

            return(allSwaps);
        }
コード例 #22
0
        internal static FixedIborSwapCurveNode fixedIborSwapNode(Tenor tenor, string id)
        {
            QuoteId quoteId = QuoteId.of(StandardId.of(TEST_SCHEME, id));
            FixedIborSwapTemplate template = FixedIborSwapTemplate.of(Period.ZERO, tenor, SWAP_CONVENTION);

            return(FixedIborSwapCurveNode.of(template, quoteId));
        }
コード例 #23
0
        public void TestSwap()
        {
            // Make the swap
            var    rate      = 0.08;
            var    payFixed  = true;
            double notional  = 1000000;
            var    startDate = new Date(2016, 9, 17);
            var    tenor     = Tenor.Years(5);
            var    swap      = IRSwap.CreateZARSwap(rate, payFixed, notional, startDate, tenor);

            // Set up the model
            var valueDate = new Date(2016, 9, 17);

            Date[]              dates         = { new Date(2016, 9, 17), new Date(2026, 9, 17) };
            double[]            rates         = { 0.07, 0.07 };
            IDiscountingSource  discountCurve = new DatesAndRates(Currency.ZAR, valueDate, dates, rates);
            IFloatingRateSource forecastCurve = new ForecastCurve(valueDate, FloatingIndex.JIBAR3M, dates, rates);
            var curveSim = new DeterminsiticCurves(discountCurve);

            curveSim.AddRateForecast(forecastCurve);
            var coordinator = new Coordinator(curveSim, new List <Simulator>(), 1);

            // Run the valuation
            var value    = coordinator.Value(new Product[] { swap }, valueDate);
            var refValue = -41838.32; // See RateProductTest.xlsx

            Assert.AreEqual(refValue, value, 0.01);
        }
コード例 #24
0
 public FloatRateIndex(string objectName, Currency currency, string indexName, Tenor tenor)
 {
     Currency    = currency;
     _indexName  = indexName;
     Tenor       = tenor;
     _objectName = objectName;
 }
コード例 #25
0
        public BasisSwapCurveInstrument(Tenor tenor, FloatRateIndex leg1Index, FloatRateIndex leg2Index,
                                        double leg1Spread,
                                        double leg2Spread, DiscountingSourceDescription discountCurveDescription, CurveToStrip curveToStrip)
        {
            _tenor      = tenor;
            _leg1Index  = leg1Index;
            _leg2Index  = leg2Index;
            _leg1Spread = leg1Spread;
            _leg2Spread = leg2Spread;
            _discountCurveDescription = discountCurveDescription;
            switch (curveToStrip)
            {
            case CurveToStrip.Leg1Forecast:
            {
                _curveName = new FloatingRateSourceDescription(leg1Index).Name;
                break;
            }

            case CurveToStrip.Leg2Forecast:
            {
                _curveName = new FloatingRateSourceDescription(leg2Index).Name;
                break;
            }

            case CurveToStrip.DiscountCurve:
            {
                _curveName = _discountCurveDescription.Name;
                break;
            }

            default:
                throw new ArgumentOutOfRangeException(nameof(curveToStrip), curveToStrip, null);
            }
        }
コード例 #26
0
        /// <summary>
        /// Add extra dates to make sure that the minimum spacing is not too large to make the Monte Carlo errors bad.
        /// <para/>
        /// At this point the dates are all copied.
        /// </summary>
        public override void Prepare(Date anchorDate)
        {
            _anchorDate = anchorDate;
            fM          = date => _inputRate;
            PM          = date => Math.Exp(-_inputRate * (date - anchorDate) / 365.0);
            double minStepSize = 20;

            allDates.Insert(0, anchorDate);
            allDates = allDates.Distinct().ToList();
            allDates.Sort();
            var newDates = new List <Date>();

            newDates.Add(new Date(allDates[0]));
            for (var i = 1; i < allDates.Count; i++)
            {
                var nSteps = (int)Math.Floor((allDates[i] - allDates[i - 1]) / minStepSize);
                var days   = (allDates[i] - allDates[i - 1]) / (nSteps + 1);
                for (var j = 0; j < nSteps; j++)
                {
                    newDates.Add(new Date(allDates[i - 1].AddTenor(Tenor.FromDays((j + 1) * days))));
                }
                newDates.Add(new Date(allDates[i]));
            }

            allDates       = newDates;
            allDatesDouble = allDates.Select(date => (double)date).ToArray();
        }
コード例 #27
0
        private void presentValueSensitivityRawDataParallelSensitivity(SabrParametersSwaptionVolatilities sabrCalibrated, TenorRawOptionData dataRaw)
        {
            PointSensitivities             points = LEG_PRICER.presentValueSensitivityModelParamsSabr(FLOOR_LEG, MULTICURVE, sabrCalibrated).build();
            CurrencyParameterSensitivities sabrParametersSurfaceSensitivities = sabrCalibrated.parameterSensitivity(points);
            CurrencyParameterSensitivity   parallelSensitivitiesSurface       = RDSC.parallelSensitivity(sabrParametersSurfaceSensitivities, sabrCalibrated);
            DoubleArray sensitivityArray  = parallelSensitivitiesSurface.Sensitivity;
            double      fdShift           = 1.0E-6;
            int         surfacePointIndex = 0;

            for (int loopexpiry = 0; loopexpiry < EXPIRIES.size(); loopexpiry++)
            {
                for (int looptenor = 0; looptenor < TENORS.size(); looptenor++)
                {
                    Tenor tenor = TENORS.get(looptenor);
                    Pair <DoubleArray, DoubleArray> ds = dataRaw.getData(tenor).availableSmileAtExpiry(EXPIRIES.get(loopexpiry));
                    if (!ds.First.Empty)
                    {
                        double[] pv = new double[2];   // pv with shift up and down
                        for (int loopsign = 0; loopsign < 2; loopsign++)
                        {
                            TenorRawOptionData dataShifted = SabrSwaptionCalibratorSmileTestUtils.rawDataShiftSmile(TENORS, EXPIRIES, ValueType.SIMPLE_MONEYNESS, MONEYNESS, ValueType.NORMAL_VOLATILITY, DATA_ARRAY_FULL, looptenor, loopexpiry, (2 * loopsign - 1) * fdShift);
                            SabrParametersSwaptionVolatilities calibratedShifted = SABR_CALIBRATION.calibrateWithFixedBetaAndShift(DEFINITION, CALIBRATION_TIME, dataShifted, MULTICURVE, BETA_SURFACE, SHIFT_SABR_SURFACE);
                            pv[loopsign] = LEG_PRICER.presentValue(FLOOR_LEG, MULTICURVE, calibratedShifted).Amount;
                        }
                        double sensitivityFd = (pv[1] - pv[0]) / (2 * fdShift);   // FD sensitivity computation
                        SabrSwaptionCalibratorSmileTestUtils.checkAcceptable(sensitivityFd, sensitivityArray.get(surfacePointIndex), 0.10, "Tenor/Expiry: " + TENORS.get(looptenor) + " / " + EXPIRIES.get(loopexpiry));
                        surfacePointIndex++;
                    }
                }
            }
        }
コード例 #28
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @ImmutablePreBuild private static void preBuild(Builder builder)
        private static void preBuild(Builder builder)
        {
            if (string.ReferenceEquals(builder.label_Renamed, null) && builder.template_Renamed != null)
            {
                builder.label_Renamed = Tenor.of(builder.template_Renamed.DepositPeriod).ToString();
            }
        }
コード例 #29
0
 /// <summary>
 /// Get an array of <see cref="Tenor"/> from an excel range of strings.
 /// </summary>
 /// <remarks>
 /// This is implemented in the Excel layer rather than in <see cref="Tenor"/> itself to make sure that users in the library don't use strings to construct things.
 /// </remarks>
 /// <param name="values"></param>
 /// <param name="inputName">The name of the input in the Excel function so that sensible errors can be returned.</param>
 /// <returns></returns>
 public static Tenor[] GetTenor1D(object[,] values, string inputName)
 {
     if (values.GetLength(0) == 1 && values.GetLength(1) >= 1) // row of inputs
     {
         Tenor[] result = new Tenor[values.GetLength(1)];
         for (int i = 0; i < values.GetLength(1); i++)
         {
             result[i] = GetTenor(values[0, i], inputName);
         }
         return(result);
     }
     else if (values.GetLength(0) >= 1 && values.GetLength(1) == 1) // column of inputs
     {
         Tenor[] result = new Tenor[values.GetLength(0)];
         for (int i = 0; i < values.GetLength(0); i++)
         {
             result[i] = GetTenor(values[i, 0], inputName);
         }
         return(result);
     }
     else
     {
         throw new ArgumentException(inputName + " must be a single row or column of strings representing tenors.");
     }
 }
コード例 #30
0
        public void Init()
        {
            // Set up the model
            valueDate = new Date(2016, 9, 17);
            var a             = 0.05;
            var vol           = 0.01;
            var flatCurveRate = 0.07;

            hullWiteSim = new HullWhite1F(Currency.ZAR, a, vol, flatCurveRate, flatCurveRate, valueDate);
            hullWiteSim.AddForecast(FloatingIndex.JIBAR3M);

            // Make the underlying swap
            var    rate      = 0.07;
            var    payFixed  = true;
            double notional  = 1000000;
            var    startDate = new Date(2016, 9, 17);
            var    tenor     = Tenor.Years(5);

            swapPay = IRSwap.CreateZARSwap(rate, payFixed, notional, startDate, tenor);
            swapRec = IRSwap.CreateZARSwap(rate, !payFixed, notional, startDate, tenor);

            // Full set of exercise dates
            exDates = new List <Date>
            {
                new Date(2017, 9, 17),
                new Date(2018, 9, 17),
                new Date(2019, 9, 17),
                new Date(2020, 9, 17)
            };
        }
コード例 #31
0
 private FixedIncomeStripWithSecurity(FixedIncomeStrip originalStrip, Tenor resolvedTenor, DateTimeOffset maturity, ExternalId securityIdentifier, ISecurity security)
 {
     _resolvedTenor = resolvedTenor;
     _originalStrip = originalStrip;
     _maturity = maturity;
     _securityIdentifier = securityIdentifier;
     _security = security;
 }
コード例 #32
0
 public static FixedIncomeStripWithSecurity FromFudgeMsg(IFudgeFieldContainer ffc, IFudgeDeserializer deserializer)
 {
     var originalstrip = deserializer.FromField<FixedIncomeStrip>(ffc.GetByName("strip"));
     var resolvedTenor = new Tenor(ffc.GetString("resolvedTenor"));
     DateTimeOffset maturity = GetDateTime(ffc.GetByName("maturity"));
     ExternalId securityIdentifier = ExternalId.Parse(ffc.GetString("identifier"));
     var security = deserializer.FromField<ISecurity>(ffc.GetByName("security"));
     return new FixedIncomeStripWithSecurity(originalstrip,
                                             resolvedTenor,
                                             maturity,
                                             securityIdentifier,
                                             security
         );
 }
コード例 #33
0
        private void UpdateCellSelection(Tenor x, Tenor y)
        {
            InitTableData();

            Func<Dictionary<string, object>, bool> rowPredicate = row => row["Length"].Equals(y);

            Func<DataGridColumn, bool> columnPredicate = c => c.Header.Equals(x);

            DataGridColumn myColumn = detailsList.Columns.Where(columnPredicate).First();
            Dictionary<string, object> myRow = detailsList.Items.Cast<Dictionary<string, object>>().Where(rowPredicate).First();

            detailsList.SelectedCells.Clear();
            detailsList.SelectedCells.Add(new DataGridCellInfo(myRow, myColumn));
        }
コード例 #34
0
 private static double GetScaledValue(Tenor t)
 {
     return Math.Log(t.TimeSpan.TotalDays);
 }
コード例 #35
0
 static public RateIndex FindRateIndex(string currency, string indexTicker, out Tenor tenor)
 {
     //US0003M Index  
     tenor = null;
     var indexes = Env.Current.StaticData.GetCurrencyRateIndexes(currency);
     string[] tenors = new[] { "3M", "6M", "9M", "1Y" };
     var ticker = indexTicker.ToLower();
     foreach (var index in indexes)
     {
         foreach (var sten in tenors)
         {
             var ten = Tenor.Get(sten);
             var qn = index.BuildQuoteName(ten);
             if (qn.DefaultTicker.ToLower().Equals(ticker))
             {
                 tenor = ten;
                 return index;
             }
         }
     }
     Logger.Error("@@@ Cannot find Rate Index " + currency + " " + indexTicker);
     return null;
 }
コード例 #36
0
        static public RateIndex FindRateIndex2(string currency, string indexName, string tenor, out Tenor tenorOut)
        {
            tenorOut = null;
            var indexes = Env.Current.StaticData.GetCurrencyRateIndexes(currency);
            foreach (var index in indexes)
            {
                var theIndexName = index.Name;
                if(theIndexName.Equals(indexName) || theIndexName.Contains(indexName) || indexName.Contains(theIndexName))
                {
                    var ten = Tenor.Get(tenor);
                    if (ten != null)
                    {
                        tenorOut = ten;
                        return index;
                    }
                }
            }
            Logger.Error("@@@ Cannot find Rate Index " + currency + " " + indexName + " " + tenor);
            return null;

        }
コード例 #37
0
 private void SetXSliceGraph(Tenor x)
 {
     var slice = Surface.GetXSlice(x);
     _xSliceCurveControl.DataContext = slice;
     rightCurveControl.DataContext = slice;
 }
コード例 #38
0
 private void SetYSliceGraph(Tenor y)
 {
     var slice = Surface.GetYSlice(y);
     _ySliceCurveControl.DataContext = slice;
     leftCurveControl.DataContext = slice;
 }
コード例 #39
0
        public static Curve GetYSlice(this VolatilitySurfaceData<Tenor, Tenor> surface, Tenor y)
        {
            var values = surface.Xs.Select(
                delegate(Tenor t) {
                                      double value;
                                      var have = surface.TryGet(t, y, out value);
                                      return Tuple.Create(t.TimeSpan.TotalMilliseconds, have, value);
                }).Where(t => t.Item2);

            return new InterpolatedDoublesCurve(string.Format("Swap length {0}", y),
                                                values.Select(t => t.Item1).ToArray(),
                                                values.Select(t => t.Item3).ToArray()
                );
        }
コード例 #40
0
 public static Curve GetXSlice(this VolatilitySurfaceData<Tenor, Tenor> surface, Tenor x)
 {
     return new InterpolatedDoublesCurve(string.Format("Expiry {0}", x),
                                         surface.Ys.Select(t => t.TimeSpan.TotalMilliseconds).ToArray(),
                                         surface.Ys.Select(y => surface[x, y]).ToArray()
         );
 }
コード例 #41
0
 private void UpdateToolTip(Tenor x, Tenor y)
 {
     toolTipBox.Text = string.Format("{0},{1},{2}", x, y, Surface[x, y]);
     toolTip.IsOpen = true;
 }