private OhlcData CreateDataItem(MarketDataItemRange range, decimal amount, decimal volume, string currency, DateTime date) { OhlcData result = new OhlcData(); result.CurrencyId = currency; result.Volume = volume; result.VolumeBase = volume * amount; result.Max = amount; result.Min = amount; result.Close = amount; result.Date = date; result.Range = range; _context.Add(result); _context.SaveChanges(); OhlcData previous = GetPreviousDataItem(result); if (previous == null) { result.Open = 0; } else { result.Open = previous.Close; } return(result); }
/// <summary> /// Update OHLC data /// </summary> /// <param name="range">Range</param> /// <param name="amount">Amount</param> /// <param name="volume">Volume</param> /// <param name="currency">Currency</param> /// <param name="date">Date</param> public void PutData(MarketDataItemRange range, decimal amount, decimal volume, string currency, DateTime date) { OhlcData di = GetDataItem(range, currency, date); if (di == null) { di = CreateDataItem(range, amount, volume, currency, date); } else { UpdateDataItem(di, amount, volume); } _context.SaveChanges(); }
public async Task <ResponseOHLC> GetOHLCLastCandle(MarketDataItemRange range, string currencyId, DateTime?before = null) { var result = await _context.OHLCData .Where(a => a.Range == range && a.CurrencyId == currencyId && (!before.HasValue || a.Date < before)) .Select(a => new ResponseOHLC { Date = a.Date, Close = a.Close, Open = a.Open, Max = a.Max, Min = a.Min, Volume = a.Volume, VolumeBase = a.VolumeBase }).OrderByDescending(a => a.Date).FirstOrDefaultAsync(); return(result); }
/// <summary> /// /// </summary> /// <param name="range"></param> /// <param name="currencyId"></param> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> public async Task <IEnumerable <ResponseOHLC> > GetOHLCData(MarketDataItemRange range, string currencyId, DateTime start, DateTime end) { var result = await _context.OHLCData .Where(a => a.Range == range && a.CurrencyId == currencyId && a.Date >= start && a.Date <= end) .Select(a => new ResponseOHLC { Date = a.Date, Close = a.Close, Open = a.Open, Max = a.Max, Min = a.Min, Volume = a.Volume, VolumeBase = a.VolumeBase }).OrderBy(a => a.Date).ToListAsync(); return(result); }
public async Task <ResponseOHLC> GetOHLCLastCandle(MarketDataItemRange range, string currencyId, DateTime?before = null) { return(await _ohclService.GetOHLCLastCandle(range, currencyId, before)); }
public async Task <IEnumerable <ResponseOHLC> > GetOHLCData(MarketDataItemRange range, string currencyId, DateTime start, DateTime end) { return(await _ohclService.GetOHLCData(range, currencyId, start, end)); }
/// <summary> /// Get OHLC element from database /// </summary> /// <param name="range">Range</param> /// <param name="currency">Currency</param> /// <param name="date">Date</param> /// <returns></returns> private OhlcData GetDataItem(MarketDataItemRange range, string currency, DateTime date) { OhlcData result = null; if (range == MarketDataItemRange.Year) { result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2}", range, currency, date.Year).FirstOrDefault(); } if (range == MarketDataItemRange.Month) { result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3}", range, currency, date.Year, date.Month).FirstOrDefault(); } if (range == MarketDataItemRange.Day) { result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4}", range, currency, date.Year, date.Month, date.Day).FirstOrDefault(); } if (range == MarketDataItemRange.Hour4) { int hour = date.Hour; int range_start, range_end; BuildRange(1, 23, 6, hour, out range_start, out range_end); result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and ((date_part('hour', \"Date\") >= {5}) and (date_part('hour', \"Date\") < {6}))", range, currency, date.Year, date.Month, date.Day, range_start, range_end).FirstOrDefault(); } if (range == MarketDataItemRange.Hour) { result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and date_part('hour', \"Date\")={5}", range, currency, date.Year, date.Month, date.Day, date.Hour).FirstOrDefault(); } if (range == MarketDataItemRange.Minute) { result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and date_part('hour', \"Date\")={5} and date_part('minute', \"Date\")={6}", range, currency, date.Year, date.Month, date.Day, date.Hour, date.Minute).FirstOrDefault(); } if (range == MarketDataItemRange.Minutes30) { int minute = date.Minute; int range_start, range_end; BuildRange(1, 59, 2, minute, out range_start, out range_end); result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and date_part('hour', \"Date\")={5} and (date_part('minute', \"Date\")>={6} and date_part('minute', \"Date\")<{7})", range, currency, date.Year, date.Month, date.Day, date.Hour, range_start, range_end).FirstOrDefault(); } if (range == MarketDataItemRange.Minutes15) { int minute = date.Minute; int range_start, range_end; BuildRange(1, 59, 4, minute, out range_start, out range_end); result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and date_part('hour', \"Date\")={5} and (date_part('minute', \"Date\")>={6} and date_part('minute', \"Date\")<{7})", range, currency, date.Year, date.Month, date.Day, date.Hour, range_start, range_end).FirstOrDefault(); } if (range == MarketDataItemRange.Minutes5) { int minute = date.Minute; int range_start, range_end; BuildRange(1, 59, 12, minute, out range_start, out range_end); result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and date_part('hour', \"Date\")={5} and (date_part('minute', \"Date\")>={6} and date_part('minute', \"Date\")<{7})", range, currency, date.Year, date.Month, date.Day, date.Hour, range_start, range_end).FirstOrDefault(); } if (range == MarketDataItemRange.Minutes3) { int minute = date.Minute; int range_start, range_end; BuildRange(1, 59, 20, minute, out range_start, out range_end); result = _context.OHLCData.FromSql("select * from \"OHLCData\" where \"Range\"={0} and \"CurrencyId\"={1} and date_part('year', \"Date\")={2} and date_part('month', \"Date\")={3} and date_part('day', \"Date\")={4} and date_part('hour', \"Date\")={5} and (date_part('minute', \"Date\")>={6} and date_part('minute', \"Date\")<{7})", range, currency, date.Year, date.Month, date.Day, date.Hour, range_start, range_end).FirstOrDefault(); } return(result); }