Esempio n. 1
0
        public static object GetHistoricData(HistoricRate rate, string deviceId, string connString)
        {
            var             temperatures         = new List <PlotDataPoint>();
            var             thermocoupleStatuses = new List <PlotDataPoint>();
            MySqlConnection conn     = null;
            int             minsFrom = 5;

            switch (rate)
            {
            case HistoricRate.Back5Minutes:
                minsFrom = 5;
                break;

            case HistoricRate.Back30Minutes:
                minsFrom = 30;
                break;

            case HistoricRate.Back2Hours:
                minsFrom = 120;
                break;

            case HistoricRate.Back1Day:
                minsFrom = 1440;
                break;

            case HistoricRate.Back1Week:
                minsFrom = 10080;
                break;
            }

            conn = OpenConnection(connString);
            var          query  = $"CALL GetDataSamples({minsFrom}, '{deviceId}');";
            MySqlCommand cmd    = new MySqlCommand(query, conn);
            var          reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                var item = new ThermostatRequest
                {
                    DeviceStatus = (string)reader[2],
                    Measurement  = Convert.ToSingle(reader[3]),
                    Timestamp    = (DateTime)reader[5]
                };

                temperatures.Add(new PlotDataPoint(item.Measurement, item.Timestamp.ToUniversalTime()));
                thermocoupleStatuses.Add(new PlotDataPoint(item.DeviceStatus == "ON" ? 1 : 0, item.Timestamp.ToUniversalTime()));
            }

            reader.Close();
            if (conn != null && conn.State == ConnectionState.Open)
            {
                conn.Close();
            }

            return(new
            {
                Temperatures = temperatures,
                Statuses = thermocoupleStatuses
            });
        }
Esempio n. 2
0
        public static List <HistoricRate> ToHistoricRateList(this ArrayList[] arrayLists)
        {
            List <HistoricRate> historicRates = new List <HistoricRate>();

            if (arrayLists == null)
            {
                return(historicRates);
            }
            foreach (ArrayList array in arrayLists)
            {
                DateTime     unix         = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
                HistoricRate historicRate = new HistoricRate
                {
                    DateAndTime = unix.AddSeconds(((JsonElement)array[0]).GetInt64()),
                    Low         = ((JsonElement)array[1]).GetDecimal(),
                    High        = ((JsonElement)array[2]).GetDecimal(),
                    Open        = ((JsonElement)array[3]).GetDecimal(),
                    Close       = ((JsonElement)array[4]).GetDecimal(),
                    Volume      = ((JsonElement)array[5]).GetDecimal()
                };
                historicRates.Add(historicRate);
            }

            return(historicRates);
        }
 public object GetHistory(HistoricRate rate, string deviceId)
 {
     try
     {
         var data = DbService.GetHistoricData(rate, deviceId, _connString);
         return(data);
     }
     catch (Exception e)
     {
         _logger.LogError("GetHistoricData() THROWS AN ERROR", e);
         throw;
     }
 }
Esempio n. 4
0
        public static List <HistoricRate> ToHistoricCandleList(this ArrayList[] arrayLists)
        {
            List <HistoricRate> historicRates = new List <HistoricRate>();

            if (arrayLists == null)
            {
                return(historicRates);
            }
            DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

            foreach (ArrayList array in arrayLists)
            {
                HistoricRate historicRate = new HistoricRate();
                switch (array.Count)
                {
                case 12:
                    historicRate = new HistoricRate
                    {
                        //1499040000000,      // Open time
                        //"0.01634790",       // Open
                        //"0.80000000",       // High
                        //"0.01575800",       // Low
                        //"0.01577100",       // Close
                        //"148976.11427815",  // Volume

                        //1499644799999,      // Close time
                        //"2434.19055334",    // Quote asset volume
                        //308,                // Number of trades
                        //"1756.87402397",    // Taker buy base asset volume
                        //"17928899.62484339" // Ignore.
                        DateAndTime = start.AddMilliseconds(((JsonElement)array[0]).GetInt64()).ToLocalTime(),
                        Open        = decimal.Parse(((JsonElement)array[1]).GetString()),
                        High        = decimal.Parse(((JsonElement)array[2]).GetString()),
                        Low         = decimal.Parse(((JsonElement)array[3]).GetString()),
                        Close       = decimal.Parse(((JsonElement)array[4]).GetString()),
                        Volume      = decimal.Parse(((JsonElement)array[5]).GetString())
                    };
                    break;
                }

                historicRates.Add(historicRate);
            }

            return(historicRates);
        }
        private async void ProcessHistoryQuarterlyChartDownload()
        {
            await _processHistorySemaphoreSlim.WaitAsync();

            try
            {
                string fileName = FileName + $"_{RelativeStrengthIndexSettings.Product.ID.ToLower()}_15M.csv";
                string data     = "DateTime,High,Open,Close,Low,Volume,MA7,RSI14\n";
                //Validate file
                if (!File.Exists(fileName))
                {
                    if (!Directory.Exists(Path.GetDirectoryName(fileName)))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(fileName));
                    }
                    File.Create(fileName).Close();
                    SaveAnalyticData(fileName, data);
                }

                //Initialise fields
                const int            period      = 14;
                const int            maPeriod    = 7;
                const int            granularity = 900;
                DateTime             startingDateTime;
                HistoricRate         previousHistoricRate = null;
                decimal              increases            = 0;
                decimal              decreases            = 0;
                Queue <HistoricRate> maQueue = new Queue <HistoricRate>();
                //Check if we have an empty file or not
                if (string.IsNullOrWhiteSpace(RelativeStrengthIndexSettings
                                              .HistoricChartPreviousHistoricDateTimeQuarterly))
                {
                    startingDateTime = new DateTime(2015, 4, 23).Date;
                    RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly        = 0;
                    RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly        = 0;
                    RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly = 0;
                    RelativeStrengthIndexSettings.RelativeIndexQuarterly = -1;
                }
                else
                {
                    startingDateTime = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricDateTimeQuarterly
                                       .ToDateTime().AddMinutes(15);
                    previousHistoricRate = new HistoricRate
                    {
                        Close       = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateCloseQuarterly,
                        Open        = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateOpenQuarterly,
                        Low         = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateLowQuarterly,
                        High        = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateHighQuarterly,
                        Volume      = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateVolumeQuarterly,
                        DateAndTime = RelativeStrengthIndexSettings.HistoricChartPreviousHistoricDateTimeQuarterly
                                      .ToDateTime()
                    };
                }

                //Begin data parsing
                DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour,
                                            DateTime.Now.Minute, 0);
                while (startingDateTime < now)
                {
                    DateTime endingDateTime = startingDateTime.AddDays(2);
                    //Get the latest historic data
                    HistoricCandlesSearch historicCandlesSearch = new HistoricCandlesSearch
                    {
                        Symbol           = RelativeStrengthIndexSettings.Product.ID,
                        StartingDateTime = startingDateTime,
                        EndingDateTime   = endingDateTime,
                        Granularity      = (Granularity)granularity
                    };
                    //Prevent overloaded calls by delaying for 1 second before call
                    await Task.Delay(1000);

                    //Get the latest historic data
                    List <HistoricRate> result = await UpdateProductHistoricCandles(historicCandlesSearch);

                    if (!result.Any())
                    {
                        //in the case that no data is available but current search date is not current date
                        startingDateTime = new DateTime(startingDateTime.Year, startingDateTime.Month, 1, 0, 0, 0)
                                           .AddMonths(1);
                        continue;
                    }

                    //Iterate though the historic data
                    foreach (HistoricRate rate in result)
                    {
                        if (rate.DateAndTime >= now)
                        {
                            break;
                        }
                        if (previousHistoricRate != null &&
                            previousHistoricRate.DateAndTime.ToString("dd/MM/yyyy HH:mm") ==
                            rate.DateAndTime.ToString("dd/MM/yyyy HH:mm"))
                        {
                            continue;
                        }
                        //Moving Average 7 days
                        if (maQueue.Count == maPeriod)
                        {
                            maQueue.Dequeue();
                        }
                        maQueue.Enqueue(rate);
                        //Calculate RSI 14 days
                        if (RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly > 0)
                        {
                            decimal change = rate.Close - previousHistoricRate.Close;
                            if (change > 0)
                            {
                                increases += change;
                                if (RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly > period)
                                {
                                    RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly =
                                        (RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly *
                                         (period - 1) + change) / period;
                                    RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly =
                                        RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly * (period - 1) /
                                        period;
                                }
                            }
                            else if (change < 0)
                            {
                                decreases += change * -1;
                                if (RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly > period)
                                {
                                    RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly =
                                        RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly * (period - 1) /
                                        period;
                                    RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly =
                                        (RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly *
                                         (period - 1) + change * -1) / period;
                                }
                            }

                            if (RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly >= period)
                            {
                                if (RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly == period)
                                {
                                    RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly =
                                        increases / period;
                                    RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly =
                                        decreases / period;
                                }

                                if (RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly >= period)
                                {
                                    RelativeStrengthIndexSettings.RelativeIndexQuarterly =
                                        RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly == 0
                                            ? 100
                                            : Math.Round(
                                            100 - 100 /
                                            (1 + RelativeStrengthIndexSettings.HistoricChartAverageGainQuarterly /
                                             RelativeStrengthIndexSettings.HistoricChartAverageLossQuarterly),
                                            2);
                                }
                                //Generate data
                                data =
                                    $"{rate.DateAndTime}," +
                                    $"{rate.High}," +
                                    $"{rate.Open}," +
                                    $"{rate.Close}," +
                                    $"{rate.Low}," +
                                    $"{rate.Volume}," +
                                    $"{maQueue.Average(x => x.Close)}," +
                                    $"{RelativeStrengthIndexSettings.RelativeIndexQuarterly}" +
                                    "\n";
                                SaveAnalyticData(fileName, data);
                            }
                        }

                        previousHistoricRate = rate;
                        RelativeStrengthIndexSettings.HistoricChartCurrentPeriodCountQuarterly++;
                    }

                    startingDateTime = previousHistoricRate.DateAndTime.AddMinutes(15);
                    if (previousHistoricRate != null)
                    {
                        RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateCloseQuarterly =
                            previousHistoricRate.Close;
                        RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateOpenQuarterly =
                            previousHistoricRate.Open;
                        RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateLowQuarterly =
                            previousHistoricRate.Low;
                        RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateHighQuarterly =
                            previousHistoricRate.High;
                        RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateVolumeQuarterly =
                            previousHistoricRate.Volume;
                        RelativeStrengthIndexSettings.HistoricChartPreviousHistoricDateTimeQuarterly =
                            previousHistoricRate.DateAndTime.ToString();
                        Dictionary <string, string> indicatorInformation = new Dictionary <string, string>
                        {
                            ["RSI-15MIN"] =
                                RelativeStrengthIndexSettings.RelativeIndexQuarterly.ToString(CultureInfo
                                                                                              .InvariantCulture),
                            ["RSI-1HOUR"] =
                                RelativeStrengthIndexSettings.RelativeIndexHourly
                                .ToString(CultureInfo.InvariantCulture),
                            ["RSI-1DAY"] =
                                RelativeStrengthIndexSettings.RelativeIndexDaily.ToString(CultureInfo.InvariantCulture),
                            ["OPEN-15MIN"] =
                                RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateOpenQuarterly.ToString(
                                    CultureInfo.InvariantCulture),
                            ["OPEN-1HOUR"] =
                                RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateOpenHourly.ToString(
                                    CultureInfo.InvariantCulture),
                            ["OPEN-1DAY"] =
                                RelativeStrengthIndexSettings.HistoricChartPreviousHistoricRateOpen.ToString(CultureInfo
                                                                                                             .InvariantCulture)
                        };
                        TechnicalIndicatorInformationBroadcast?.Invoke(indicatorInformation);
                        Save();
                    }
                }
            }
            catch (Exception ex)
            {
                ProcessLogBroadcast?.Invoke(MessageType.Error,
                                            $"Method: ProcessHistoryHourlyChartDownload\r\nException Stack Trace: {ex.StackTrace}");
            }
            finally
            {
                _processHistorySemaphoreSlim.Release();
            }
        }
        private async void ProcessHistoryQuarterlyChartDownload()
        {
            string fileName = DatabaseDirectory + "\\coinbase_btc_eur_historic_data_quarterly.csv";
            string data     = "DateTime,High,Open,Close,Low,Volume,MA7,RSI14\n";

            //Validate file
            if (!File.Exists(fileName))
            {
                File.Create(fileName).Close();
                SaveAnalyticData(fileName, data);
            }
            //Initialise fields
            const int    period      = 14;
            const int    maPeriod    = 7;
            const int    granularity = 900;
            DateTime     startingDateTime;
            HistoricRate previousHistoricRate = new HistoricRate()
            {
                Close  = 0,
                Open   = 0,
                Low    = 0,
                High   = 0,
                Volume = 0
            };
            decimal increases            = 0;
            decimal decreases            = 0;
            Queue <HistoricRate> maQueue = new Queue <HistoricRate>();

            //Check if we have an empty file or not
            if (string.IsNullOrWhiteSpace(HistoricChartLastDateTime))
            {
                startingDateTime = new DateTime(2015, 4, 23).Date.ToUniversalTime();
                HistoricChartAverageGainQuarterly        = 0;
                HistoricChartAverageLossQuarterly        = 0;
                HistoricChartCurrentPeriodCountQuarterly = 0;
            }
            else
            {
                startingDateTime     = DateTime.Parse(HistoricChartLastDateTimeQuarterly);
                previousHistoricRate = new HistoricRate()
                {
                    Close  = HistoricChartPreviousHistoricRateCloseQuarterly,
                    Open   = HistoricChartPreviousHistoricRateOpenQuarterly,
                    Low    = HistoricChartPreviousHistoricRateLowQuarterly,
                    High   = HistoricChartPreviousHistoricRateHighQuarterly,
                    Volume = HistoricChartPreviousHistoricRateVolumeQuarterly
                };
            }
            //Begin data parsing
            DateTime now = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, 0).ToUniversalTime();

            while (startingDateTime < now)
            {
                DateTime endingDateTime = startingDateTime.AddDays(3).ToUniversalTime();
                //Get the latest historic data
                List <HistoricRate> result = await _exchangeService.UpdateProductHistoricCandlesAsync(Product, startingDateTime, endingDateTime, granularity);

                if (!result.Any() && startingDateTime == new DateTime(2015, 4, 23).Date.ToUniversalTime())
                {
                    HistoricChartLastDateTimeQuarterly = DateTime.Now.AddHours(-2).Date.ToUniversalTime().ToString(CultureInfo.InvariantCulture);
                    Save();
                }
                if (!result.Any())
                {
                    break;
                }
                result.Reverse();
                //Iterate though the historic data
                foreach (HistoricRate rate in result)
                {
                    if (rate.DateAndTime >= now)
                    {
                        break;
                    }
                    //Moving Average 7 days
                    if (maQueue.Count == maPeriod)
                    {
                        maQueue.Dequeue();
                    }
                    maQueue.Enqueue(rate);
                    //Calculate RSI 14 days
                    if (HistoricChartCurrentPeriodCountQuarterly > 0)
                    {
                        decimal change = rate.Close - previousHistoricRate.Close;
                        if (change > 0)
                        {
                            increases += change;
                            if (HistoricChartCurrentPeriodCountQuarterly > period)
                            {
                                HistoricChartAverageGainQuarterly = ((HistoricChartAverageGainQuarterly * (period - 1)) + change) / period;
                                HistoricChartAverageLossQuarterly = (HistoricChartAverageLossQuarterly * (period - 1)) / period;
                            }
                        }
                        else if (change < 0)
                        {
                            decreases += (change * -1);
                            if (HistoricChartCurrentPeriodCountQuarterly > period)
                            {
                                HistoricChartAverageGainQuarterly = (HistoricChartAverageGainQuarterly * (period - 1)) / period;
                                HistoricChartAverageLossQuarterly = ((HistoricChartAverageLossQuarterly * (period - 1)) + (change * -1)) / period;
                            }
                        }
                        if (HistoricChartCurrentPeriodCountQuarterly >= period)
                        {
                            if (HistoricChartCurrentPeriodCountQuarterly == period)
                            {
                                HistoricChartAverageGainQuarterly = increases / period;
                                HistoricChartAverageLossQuarterly = decreases / period;
                            }
                            if (HistoricChartCurrentPeriodCountQuarterly >= period)
                            {
                                RelativeIndexQuarterly = HistoricChartAverageLossQuarterly == 0 ? 100 : Math.Round(100 - (100 / (1 + (HistoricChartAverageGainQuarterly / HistoricChartAverageLossQuarterly))), 2);
                            }
                            //Generate data
                            data =
                                $"{rate.DateAndTime}," +
                                $"{rate.High}," +
                                $"{rate.Open}," +
                                $"{rate.Close}," +
                                $"{rate.Low}," +
                                $"{rate.Volume}," +
                                $"{maQueue.Average(x => x.Close)}," +
                                $"{RelativeIndexQuarterly}" +
                                $"\n";
                            SaveAnalyticData(fileName, data);
                        }
                    }
                    previousHistoricRate = rate;
                    HistoricChartCurrentPeriodCountQuarterly++;
                }
                startingDateTime = endingDateTime > now ? now : endingDateTime.AddHours(1);
            }
            HistoricChartPreviousHistoricRateCloseQuarterly  = previousHistoricRate.Close;
            HistoricChartPreviousHistoricRateOpenQuarterly   = previousHistoricRate.Open;
            HistoricChartPreviousHistoricRateLowQuarterly    = previousHistoricRate.Low;
            HistoricChartPreviousHistoricRateHighQuarterly   = previousHistoricRate.High;
            HistoricChartPreviousHistoricRateVolumeQuarterly = previousHistoricRate.Volume;
            Save();
        }