コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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"));
        }