Exemple #1
0
        public async Task <decimal> MinLast20DaysAsync(string symbol)
        {
            var rootObject = await _dataProvider.FetchDataAsync(symbol, TimePeriod.InYears(1), TimePeriod.InWeeks(1));

            return(rootObject.chart.result[0].indicators.quote[0].low.Where(x => x.HasValue).Select(x => x.Value).Reverse().Take(4).Min());
        }
Exemple #2
0
        public async Task <decimal> MaxLast10YearsAsync(string symbol)
        {
            var rootObject = await _dataProvider.FetchDataAsync(symbol, TimePeriod.InYears(10), TimePeriod.InMonths(1));

            return(rootObject.chart.result[0].indicators.quote[0].high.Where(x => x.HasValue).Select(x => x.Value).Max());
        }
Exemple #3
0
        public async Task <IEnumerable <Candle> > FetchCandlesAsync(string symbol, TimePeriod range, TimePeriod interval)
        {
            var rootObject = await FetchDataAsync(symbol, range, interval);

            return(CreateCandles(rootObject));
        }
Exemple #4
0
        public async Task <IEnumerable <decimal> > CalculateTrAsync(string symbol)
        {
            var candles = await _dataProvider.FetchCandlesAsync(symbol, TimePeriod.InYears(5), TimePeriod.InWeeks(1));

            var calculator = new TrCalculator();

            return(calculator.Calculate(candles));
        }
Exemple #5
0
        public async Task <RootObject> FetchDataAsync(string symbol, TimePeriod range, TimePeriod interval)
        {
            var converter   = new TimePeriodToYahooTimeConverter();
            var rangeStr    = converter.Convert(range);
            var intervalStr = converter.Convert(interval);

            var client  = new RestClient(_yahooUrl);
            var request = new RestRequest($"v7/finance/chart/{symbol}?range={rangeStr}&interval={intervalStr}");

            Console.Error.WriteLine(client.BuildUri(request));

            var taskCompletion = new TaskCompletionSource <IRestResponse>();
            var handle         = client.ExecuteAsync(request, r => taskCompletion.SetResult(r));

            var response = await taskCompletion.Task;

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new Exception(response.ErrorMessage);
            }

            var rootObject = JsonConvert.DeserializeObject <RootObject>(response.Content);

            if (!rootObject.chart.result.Any())
            {
                Console.WriteLine($"Symbol {symbol} does not exist");
            }

            return(rootObject);
        }