コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 public async Task <ResponseOHLC> GetOHLCLastCandle(MarketDataItemRange range, string currencyId,
                                                    DateTime?before = null)
 {
     return(await _ohclService.GetOHLCLastCandle(range, currencyId, before));
 }
コード例 #6
0
 public async Task <IEnumerable <ResponseOHLC> > GetOHLCData(MarketDataItemRange range, string currencyId,
                                                             DateTime start,
                                                             DateTime end)
 {
     return(await _ohclService.GetOHLCData(range, currencyId, start, end));
 }
コード例 #7
0
        /// <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);
        }