public async Task <IActionResult> Get(int id, [FromQuery] uint instrumentToken, [FromQuery] DateTime?startDate, [FromQuery] DateTime?endDate) { List <CandleUnit> candleUnits = null; List <KiteCandleUnit> kiteCandleUnits = null; if (endDate == null) { endDate = DateTime.Now; endDate = new DateTime(endDate.Value.Year, endDate.Value.Month, endDate.Value.Day, 15, 30, 00); startDate = endDate.Value.AddMonths(-1); startDate = new DateTime(startDate.Value.Year, startDate.Value.Month, startDate.Value.Day, 09, 15, 00); } try { switch (id) { case (int)Interval.FifteenMinute: kiteCandleUnits = await _marketDataAccessService.GetData(instrumentToken, Interval.FifteenMinute, Convert.ToDateTime(startDate), Convert.ToDateTime(endDate)); break; default: kiteCandleUnits = null; break; } } catch (IntelliTradeException ex) { _logger.LogError($"An error occurred while getting OHLC data. {ex.Message}"); } catch (Exception ex) { _logger.LogError($"An error occurred while getting OHLC data. {ex.Message}"); } if (kiteCandleUnits.Count > 0) { candleUnits = new List <CandleUnit>(); foreach (KiteCandleUnit row in kiteCandleUnits) { try { CandleUnit candleUnit = new CandleUnit(); candleUnit.time = (row.time.Value.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; candleUnit.open = row.open.Value; candleUnit.high = row.high.Value; candleUnit.low = row.low.Value; candleUnit.close = row.close.Value; candleUnit.volume = row.volume.Value; candleUnits.Add(candleUnit); } catch (IntelliTradeException ex) { _logger.LogError($"An error occurred while parsing OHLC data. {ex.Message}"); } catch (Exception ex) { _logger.LogError($"An error occurred while parsing OHLC data. {ex.Message}"); } } } if (candleUnits == null) { return(new StatusCodeResult(500)); } else { return(Ok(candleUnits)); } }
public async Task <IActionResult> DownloadData(string tradingSymbol, string interval, string from, string to) { List <KiteCandleUnit> kiteCandleUnits = null; Instrument? instrument = _kiteInstruments.Instruments.Where(obj => string.Compare(obj.TradingSymbol, tradingSymbol) == 0).FirstOrDefault(); if (instrument == null) { return(NotFound()); } uint instrumentToken = instrument.Value.InstrumentToken; Interval lag = interval.GetValueFromDescription <Interval>(); string[] fromParts = from.Split('/'); string[] toParts = to.Split('/'); DateTime dateFrom = new DateTime(Convert.ToInt32(fromParts[2]), Convert.ToInt32(fromParts[0]), Convert.ToInt32(fromParts[1])); DateTime dateTo = new DateTime(Convert.ToInt32(toParts[2]), Convert.ToInt32(toParts[0]), Convert.ToInt32(toParts[1])); TimeSpan totalDays = dateTo.Subtract(dateFrom); if (totalDays.Days > 30) { float loopCount = (float)totalDays.Days / 30; int loopTimes = totalDays.Days / 30; if (Convert.ToDouble(loopTimes) == loopCount) { DateTime newTo = DateTime.MinValue; for (int i = 0; i < loopTimes; i++) { if (i == 0) { newTo = dateFrom.AddDays(30); } else { dateFrom = newTo; newTo = dateFrom.AddDays(30); } if (kiteCandleUnits == null) { kiteCandleUnits = await _marketDataAccessService.GetData(instrumentToken, lag, dateFrom, newTo); } else { List <KiteCandleUnit> kites = await _marketDataAccessService.GetData(instrumentToken, lag, dateFrom, newTo); kiteCandleUnits.AddRange(kites); } } } else { DateTime newTo = DateTime.MinValue; for (int i = 0; i < loopTimes; i++) { if (i == 0) { newTo = dateFrom.AddDays(30); } else { dateFrom = newTo; newTo = dateFrom.AddDays(30); } if (kiteCandleUnits == null) { kiteCandleUnits = await _marketDataAccessService.GetData(instrumentToken, lag, dateFrom, newTo); } else { List <KiteCandleUnit> kites = await _marketDataAccessService.GetData(instrumentToken, lag, dateFrom, newTo); kiteCandleUnits.AddRange(kites); } } dateFrom = newTo; newTo = dateFrom.AddDays(dateTo.Subtract(dateFrom).Days); List <KiteCandleUnit> lastKites = await _marketDataAccessService.GetData(instrumentToken, lag, dateFrom, newTo); kiteCandleUnits.AddRange(lastKites); } } else { kiteCandleUnits = await _marketDataAccessService.GetData(instrumentToken, lag, dateFrom, dateTo); } string csv = kiteCandleUnits.ToCsvString(); Encoding ascii = Encoding.ASCII; byte[] bytes = ascii.GetBytes(csv); return(File(bytes, "text/csv", $"{tradingSymbol}.csv")); }