public static SymmetryTSInstrument Get(string curvename_) { if (m_cache.ContainsKey(curvename_)) return m_cache[curvename_]; return m_cache[curvename_] = new SymmetryTSInstrument(SwapCurveDefinitions.Get(curvename_).FrontOfCurveSymmetryCode); }
public async Task<DFs> GoAll(string holidayCode_, int spotStart_, CurveIDs curve_, CarbonClient cc_, bool forceReRead_=false) { Logger.Info(string.Format("Considering {0} DFs...", curve_.CarbonCurveName), typeof (DFsWorker)); // first we need to get the list of dates for the given holidaycode var datesRecord = TenorDatesCache.Instance() .InnerList.FirstOrDefault( x => x.SpotStart == spotStart_ && string.Compare(holidayCode_, x.HolidayCode, StringComparison.OrdinalIgnoreCase) == 0); if (datesRecord == null) { Logger.Error( string.Format("cannot update DFs as can't find a calendar object with params [spotStart={0},Calendar={1}]", spotStart_, holidayCode_), typeof (DFsWorker)); return null; } var taDFs = DFsCache.Instance().InnerList.FirstOrDefault(x => String.Compare(x.Curvename, curve_.CarbonCurveName, StringComparison.OrdinalIgnoreCase) == 0); if (taDFs == null) { taDFs = new DFs() { Curvename=curve_.CarbonCurveName, }; } var carbonDFs = await CarbonCurveRetriever.Instance().GetDailyCurveDFs(cc_, datesRecord, curve_.CarbonCurveName); if (carbonDFs == null) { Logger.Error(string.Format("Did not successfully retrieve DFs for {0} from carbon", curve_.CarbonCurveName), typeof (DFsWorker)); return null; } bool updated = false; if (taDFs.DFValues == null || forceReRead_) { updated = true; taDFs.DFValues = carbonDFs; } else { foreach (var date in carbonDFs.Dates) { bool needToSet = !taDFs.DFValues.HasDate(date); if (!needToSet && date>DateTime.Today.AddMonths(-1)) { needToSet = true; var current = taDFs.DFValues.ValueOnExactDate(date); var carbon = carbonDFs.ValueOnExactDate(date); if (current!=null && carbon!=null && current.Data!=null && carbon.Data!=null && (current.Data.Sum() - carbon.Data.Sum()).IsZero()) { needToSet = false; } else Logger.Debug( string.Format("Going to update dfs for {0} on {1}", curve_.CarbonCurveName, date.ToString("dd-MMM-yyyy")), typeof(DFsWorker)); } if (!needToSet) continue; Logger.Debug( string.Format("Adding in dfs for {0} on {1}", curve_.CarbonCurveName, date.ToString("dd-MMM-yyyy")), typeof (DFsWorker)); updated = true; taDFs.DFValues.SetValueOnDate(date, carbonDFs.ValueOnDate(date)); } } // persist the fixings if the curve has details if (!string.IsNullOrEmpty(curve_.CurveFixingTicker)) { var pxs = new SymmetryTSInstrument(curve_.CurveFixingTicker).GetPrices(); if (pxs != null) { if (taDFs.FixingValues == null || (taDFs.FixingValues.LastDate < pxs.LastDate)) { taDFs.FixingValues = pxs.GetValuesBetweenDates(datesRecord.Dates.Keys[0],DateTime.Today); updated = true; } } } if (updated) { var result = await DFsCache.Instance().AddOrUpdateDefinition(taDFs); Logger.Info(string.Format("Updated DFs on server for {0}. Result = {1}", curve_.CarbonCurveName, result), typeof (DFsWorker)); } else Logger.Info(string.Format("Not updating {0} DFs as nothing changed", curve_.CarbonCurveName), typeof(DFsWorker)); return taDFs; }