Example #1
0
 public static object FuturesExpiryFromCode(
     [ExcelArgument(Description = "Futures code, e.g. CLZ3")] string FuturesCode)
 {
     return(ExcelHelper.Execute(_logger, () =>
     {
         return FutureCode.GetExpiryFromCode(FuturesCode, ContainerStores.SessionContainer.GetService <IFutureSettingsProvider>());
     }));
 }
Example #2
0
        public void StripCrackedCurve()
        {
            var buildDate = new DateTime(2018, 07, 28);

            string[] futures       = { "COV8", "COX8", "COZ8", "COF9", "COG9" };
            double[] futuresPrices = { 77, 78, 79, 79.5, 79.75 };
            string[] periods       = { "AUG18", "SEP18", "OCT18", "NOV18" };
            double[] strikes       = { -10, -11, -12, -13 };

            var cal = TestProviderHelper.CalendarProvider.Collection["LON"];
            var usd = TestProviderHelper.CurrencyProvider["USD"];

            var bPillars   = futures.Select(x => FutureCode.GetExpiryFromCode(x, TestProviderHelper.FutureSettingsProvider)).ToArray();
            var brentCurve = new PriceCurve(buildDate, bPillars, futuresPrices, PriceCurveType.ICE, TestProviderHelper.CurrencyProvider, futures)
            {
                AssetId = "Brent"
            };


            var instruments = periods.Select((p, ix) =>
                                             (IAssetInstrument)AssetProductFactory.CreateTermAsianBasisSwap(p, strikes[ix], "Brent", "Sing180", cal, cal, cal, 0.Bd(), usd, 0.Bd(), 0.Bd(), 1000, 1000 / 6.35))
                              .ToList();
            var pillars = instruments.Select(x => ((AsianBasisSwap)x).RecSwaplets.Max(sq => sq.AverageEndDate)).ToList();

            DateTime[] dPillars      = { buildDate, buildDate.AddDays(1000) };
            double[]   dRates        = { 0, 0 };
            var        discountCurve = new IrCurve(dPillars, dRates, buildDate, "zeroDiscount", Interpolator1DType.LinearFlatExtrap, usd);

            var s = new Calibrators.NewtonRaphsonAssetBasisCurveSolver(TestProviderHelper.CurrencyProvider);

            if (IsCoverageOnly)
            {
                s.Tollerance = 1.0;
            }

            var curve = s.SolveCurve(instruments, pillars, discountCurve, brentCurve, buildDate, PriceCurveType.ICE);

            if (!IsCoverageOnly)
            {
                for (var i = 0; i < instruments.Count; i++)
                {
                    var resultPV = Calibrators.NewtonRaphsonAssetBasisCurveSolver.BasisSwapPv(curve, instruments[i], discountCurve, brentCurve);
                    Assert.Equal(0, resultPV, 6);
                }
            }
        }
Example #3
0
        private static IFundingInstrument ToQwackIns(this CMEFileRecord record, string qwackCode, IFutureSettingsProvider futureSettingsProvider, ICurrencyProvider currencyProvider, Dictionary <string, FloatRateIndex> indices, Dictionary <string, string> forecastCurves)
        {
            switch (qwackCode)
            {
            case "ED":
                var edExp = FutureCode.GetExpiryFromCode(MmmYtoCode(record.MMY, qwackCode), futureSettingsProvider);
                return(new STIRFuture
                {
                    ContractSize = 1e6,
                    Currency = currencyProvider.GetCurrency("USD"),
                    DCF = 0.25,
                    ConvexityAdjustment = 0,
                    Price = record.SettlePrice.Value,
                    Index = indices["ED"],
                    Expiry = edExp,
                    PillarDate = edExp.AddMonths(3),
                    TradeId = qwackCode + record.MMY,
                    Position = 1,
                    SolveCurve = forecastCurves["ED"],
                    ForecastCurve = forecastCurves["ED"],
                });

            case "FF":
                var ffEnd   = FutureCode.GetExpiryFromCode(MmmYtoCode(record.MMY, qwackCode), futureSettingsProvider);
                var ffStart = ffEnd.FirstDayOfMonth();
                return(new OISFuture
                {
                    ContractSize = 1e6,
                    Currency = currencyProvider.GetCurrency("USD"),
                    DCF = ffStart.CalculateYearFraction(ffEnd, DayCountBasis.ACT360),
                    Price = record.SettlePrice.Value,
                    Index = indices["FF"],
                    PillarDate = ffEnd,
                    TradeId = qwackCode + record.MMY,
                    Position = 1,
                    SolveCurve = forecastCurves["FF"],
                    ForecastCurve = forecastCurves["FF"],
                    AverageStartDate = ffStart,
                    AverageEndDate = ffEnd,
                });

            default:
                throw new Exception($"No mapping found for code {qwackCode}");
            }
        }
Example #4
0
        public static BasicPriceCurve GetCurveForCode(string nymexSymbol, string nymexFutureFilename, string qwackCode, IFutureSettingsProvider provider, ICurrencyProvider currency)
        {
            var parsed    = NYMEXFutureParser.Instance.Parse(nymexFutureFilename).Where(r => r.Symbol == nymexSymbol);
            var q         = parsed.Where(x => x.Settle.HasValue).ToDictionary(x => Year2to1(x.Contract.Replace(nymexSymbol, qwackCode)), x => x.Settle);
            var datesDict = q.ToDictionary(x => FutureCode.GetExpiryFromCode(x.Key, provider), x => x.Key);
            var datesVec  = datesDict.Keys.OrderBy(x => x).ToArray();
            var labelsVec = datesVec.Select(d => datesDict[d]).ToArray();
            var pricesVec = labelsVec.Select(l => System.Math.Max(q[l].Value, MinPrice)).ToArray();
            var origin    = DateTime.ParseExact(parsed.First().TradeDate, "MM/dd/yyyy", CultureInfo.InvariantCulture);
            var curve     = new BasicPriceCurve(origin, datesVec, pricesVec, PriceCurveType.NYMEX, currency, labelsVec)
            {
                AssetId = qwackCode,
                Name    = qwackCode,
                SpotLag = 0.Bd()
            };

            return(curve);
        }