public void ShouldGetIntrdayFutureFromCarbon() { var args = new HelperRequestArgs() { EventDates = new[] { new DateTime(2016, 1, 27, 19, 0,0), //new DateTime(2016, 3, 16, 19, 0, 0), //new DateTime(2016, 4, 27, 19, 0, 0), }, FrequencyOfPricing = new TimeSpan(0, 25, 0), // 5 min NumDataPointsAroundEvent = 10, Timezone = TZ.LN, InputString = "FV1", }; var data = Helper.CarbonIntradayGo(args); foreach (var dataAroundEvent in data) { Console.WriteLine(@" "); Console.WriteLine(@" "); Console.WriteLine(@"-------------------------------------------"); Console.WriteLine(@"Event {0}", dataAroundEvent.EventDate); foreach (var p in dataAroundEvent.FilledDataAroundEvent_Diff.Data) { Console.WriteLine(@"{0},{1}", p.Index, p.Value); } } }
public static IEnumerable<DataAroundEvent> Go(HelperRequestArgs args_) { var ret = new List<DataAroundEvent>(); foreach (var eventTime in args_.EventDates) { var tsBefore = new TimeSpan(args_.FrequencyOfPricing.Ticks * (args_.NumDataPointsAroundEvent + 10)); var startDate = eventTime - tsBefore ; var futures = Singleton<IntradayFutures>.Instance.Where(x => x.BbgTicker.StartsWith(args_.FutureGroup.BbgStart) && x.BbgTicker.ToUpper().EndsWith(args_.FutureGroup.Suffix) && x.FirstTrade < startDate.Date && x.LastTrade > startDate.Date); if(args_.FutureGroup.LiquidContracts!=null && args_.FutureGroup.LiquidContracts.Count()>0) futures = futures.Where(x=>args_.FutureGroup.LiquidContracts.Contains((MonthCode)x.LastTrade.Month)); int contractIndex = args_.ContractNumber - 1; // want to specify '1' as first, so '0' would be index of that if (!futures.Any() || contractIndex > (futures.Count()-1)) { Logger.Error(string.Format("Could not find {0} future for eventDate{1}", args_.FutureGroup, eventTime.Date.ToString("dd-MMM-yyyy")), typeof(Helper)); continue; } var future = futures .OrderBy(x => x.LastTrade) .ToArray()[contractIndex]; Logger.Debug(string.Format("{0} => contract = {1}", eventTime.ToString("dd-MMM-yyyy HH:mm"), future.BbgTicker), typeof(Helper)); if (false) { var pxs = future.GetPrices(args_.Timezone, startDate, eventTime + tsBefore, args_.FrequencyOfPricing, false); ret.Add(new DataAroundEvent(eventTime, future, pxs, args_.NumDataPointsAroundEvent)); } else { var pxs = CarbonModel.GetIntradayCloseWithFrequency(new[] { future.BbgTicker }, TimeZoneHelper.ConvertLocalTimeToGmt(args_.Timezone, startDate), TimeZoneHelper.ConvertLocalTimeToGmt(args_.Timezone, eventTime + tsBefore), string.Format("{0}m", args_.FrequencyOfPricing.TotalMinutes)).FirstOrDefault(); if (pxs != null) { var localPxs = HelperMethods.GmtToLocal(pxs.ToContruct().GetColumnValuesAsDDC(0), args_.Timezone); // close bidask ret.Add(new DataAroundEvent(eventTime, future, localPxs, args_.NumDataPointsAroundEvent)); } } } return ret; }
public static IEnumerable<DataAroundEvent> CarbonIntradayGo(HelperRequestArgs args_) { try { var dataGrabber = Singleton<IntradayDataGrabber>.Instance; var dataModel = new StructureDataModelDouble(dataGrabber) { Components = new List<StructureDataItem<double>>() }; var ret = new List<DataAroundEvent>(); var structures = StructureParser.StructureParser.ParseStruture(args_.InputString.ToUpper()); dataModel.Components.AddRange(structures.Select(s => new StructureDataItem<double> { Component = s.Key, Multiplier = s.Value, }).ToList()); //get eod data for time series chart var eodDataGrabber = Singleton<EodDataGrabber>.Instance; var eodModel = new StructureDataModelDouble(eodDataGrabber) { Components = new List<StructureDataItem<double>>() }; eodModel.Components.AddRange(structures.Select(s => new StructureDataItem<double> { Component = s.Key, Multiplier = s.Value, }).ToList()); var eodData = eodModel.RetreiveData(args_.EventDates.OrderBy(x => x.Date).First().Date.AddDays(-126d), DateTime.Today.AddDays(10), null); foreach (var eventTime in args_.EventDates) { var tsBefore = new TimeSpan(args_.FrequencyOfPricing.Ticks*(args_.NumDataPointsAroundEvent + 10)); var startDate = eventTime - tsBefore; //foreach (var structure in structures) //{ var data = dataModel.RetreiveData(TimeZoneHelper.ConvertLocalTimeToGmt(args_.Timezone, startDate), TimeZoneHelper.ConvertLocalTimeToGmt(args_.Timezone, eventTime + tsBefore), string.Format("{0}m", args_.FrequencyOfPricing.TotalMinutes)); foreach (var item in data) { if (item.DataValue != null) item.DataValue = HelperMethods.GmtToLocal(item.DataValue.ToContruct().GetColumnValuesAsDDC(0), args_.Timezone); } if (data.Any()) ret.Add(new DataAroundEvent(eventTime, args_.InputString, dataModel.AggregateStructures(data), args_.NumDataPointsAroundEvent) { EODData = eodModel.AggregateStructures(eodData), IsIntraday = true, }); } return ret; } catch (Exception e) { Logger.Error(string.Format("Error when retrieving intraday data {0} ", e.Message), typeof (Helper)); return null; } }
public static IEnumerable<DataInterEvent> GoInterEvents(HelperRequestArgs args_) { var ret = new List<DataInterEvent>(); foreach (var set in args_.InterEventArgs.Events.Where(x=>x.StartDate.Date.Date < DateTime.Today)) { var start = set.StartDate.Date.AddHours(-2d); var end = set.EndDate.Date.AddHours(2d); var futures = Singleton<IntradayFutures>.Instance.Where(x => x.BbgTicker.StartsWith(args_.FutureGroup.BbgStart) && x.BbgTicker.ToUpper() .EndsWith(args_.FutureGroup.Suffix) && x.FirstTrade < start.Date && x.LastTrade > end.Date); if (args_.FutureGroup.LiquidContracts != null && args_.FutureGroup.LiquidContracts.Count() > 0) futures = futures.Where(x => args_.FutureGroup.LiquidContracts.Contains((MonthCode) x.LastTrade.Month)); int contractIndex = args_.ContractNumber - 1; // want to specify '1' as first, so '0' would be index of that if (!futures.Any() || contractIndex > (futures.Count() - 1)) { Logger.Error( string.Format("Could not find {0} future for eventSpan {1} to {2}", args_.FutureGroup, set.StartDate.Date.ToString("dd-MMM-yyyy"), set.EndDate.Date.ToString("dd-MMM-yyyy")), typeof (Helper)); continue; } var future = futures .OrderBy(x => x.LastTrade) .ToArray()[contractIndex]; var pxs = future.GetPrices(args_.Timezone, start, end, args_.FrequencyOfPricing, false); ret.Add(new DataInterEvent(set, false, future, pxs, args_.InterEventArgs)); } return ret; }