コード例 #1
0
ファイル: Coinbase.cs プロジェクト: cryptobuks1/exchange.core
        public override bool InitIndicatorsAsync()
        {
            string  directoryName   = Path.GetDirectoryName(Assembly.GetEntryAssembly()?.Location);
            string  env             = TestMode ? "test" : "live";
            string  coinbaseRSIFile = Path.Combine(directoryName, $"data\\coinbase_{env}");
            Product product         = Products.FirstOrDefault(x => x.BaseCurrency == "BTC" && x.QuoteCurrency == "EUR");
            RelativeStrengthIndex relativeStrengthIndex = new RelativeStrengthIndex(coinbaseRSIFile, product);

            if (product != null)
            {
                relativeStrengthIndex.TechnicalIndicatorInformationBroadcast +=
                    delegate(Dictionary <string, string> input)
                {
                    TechnicalIndicatorInformationBroadcast?.Invoke(ApplicationName, input);
                };
                relativeStrengthIndex.ProcessLogBroadcast += delegate(MessageType messageType, string message)
                {
                    ProcessLogBroadcast?.Invoke(ApplicationName, messageType, message);
                };
                relativeStrengthIndex.UpdateProductHistoricCandles += UpdateProductHistoricCandlesAsync;
                relativeStrengthIndex.EnableRelativeStrengthIndexUpdater();
                return(true);
            }

            return(false);
        }
コード例 #2
0
        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();
            }
        }