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()); }
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()); }
public async Task <IEnumerable <Candle> > FetchCandlesAsync(string symbol, TimePeriod range, TimePeriod interval) { var rootObject = await FetchDataAsync(symbol, range, interval); return(CreateCandles(rootObject)); }
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)); }
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); }