public TVCHistoryResponse GetHistoricalPrices(string symbol, BarFrequency frequency, DateTime from, DateTime to) { string freq = ConvertBarFrequencyToTVCResolution(frequency); string result = TVCHttpGet(string.Format(TVC_URL_HISTORY, symbol, freq, from.ToUnixDateTime(), to.ToUnixDateTime())); TVCHistoryResponse history = JsonConvert.DeserializeObject <TVCHistoryResponse>(result); return(history); }
public override TimeSeriesDataOutput GetTimeSeriesData(TimeSeriesDataInput input) { if (input == null || string.IsNullOrEmpty(input.Symbol)) { return(null); } DateTime fromDate = new DateTime(1970, 1, 1); DateTime toDate = DateTime.Now; if (input.OutputCount >= 0) { switch (input.Frequency) { case BarFrequency.Day1: fromDate = toDate.AddDays(-input.OutputCount * 5); break; case BarFrequency.Week1: fromDate = toDate.AddDays(-input.OutputCount * 8); break; case BarFrequency.Month1: fromDate = toDate.AddDays(-input.OutputCount * 31); break; case BarFrequency.Hour1: fromDate = toDate.AddDays(-(input.OutputCount / 6.5) * 5); break; case BarFrequency.Hour4: fromDate = toDate.AddDays(-(input.OutputCount / (6.5 / 4) * 5)); break; case BarFrequency.Minute1: fromDate = toDate.AddDays(-(input.OutputCount / 390 >= 1.0 ? input.OutputCount / 390 : 1) * 5); break; case BarFrequency.Minute15: fromDate = toDate.AddDays(-(input.OutputCount / (390 / 15) > 1.0 ? input.OutputCount / (390 / 15) : 1) * 5); break; case BarFrequency.Minute30: fromDate = toDate.AddDays(-(input.OutputCount / (390 / 30) > 1.0 ? input.OutputCount / (390 / 30) : 1) * 5); break; case BarFrequency.Minute5: fromDate = toDate.AddDays(-(input.OutputCount / (390 / 5) > 1.0 ? input.OutputCount / (390 / 5) : 1) * 5); break; } } TVCHistoryResponse tvchistory = GetHistoricalPrices(input.Symbol, input.Frequency, fromDate, toDate); if (tvchistory != null && tvchistory.s == "ok") { TimeSeriesDataOutput output = new TimeSeriesDataOutput(); output.Symbol = input.Symbol; output.TimeZone = "UTC"; List <StockBar> stockBars = new List <StockBar>(); if (tvchistory.t != null && tvchistory.t.Length > 0) { for (int i = 0; i < tvchistory.t.Length; i++) { StockBar bar = new StockBar(); bar.AsOfDate = new DateTime(1970, 1, 1).AddSeconds(tvchistory.t[i]); bar.Close = tvchistory.c[i]; bar.High = tvchistory.h[i]; bar.Low = tvchistory.l[i]; bar.Open = tvchistory.o[i]; bar.SplitCoefficient = 1.0; bar.Volume = Convert.ToDecimal(tvchistory.v[i]); bar.TS = DateTime.UtcNow; stockBars.Add(bar); } } if (stockBars.Count > 0) { if (input.OutputCount >= 0 && stockBars.Count > input.OutputCount) { output.Data = stockBars.Skip(stockBars.Count - (int)input.OutputCount).ToArray(); } else { output.Data = stockBars.ToArray(); } } return(output); } return(null); }