public void CreatingMarketDataViewModel_ShouldBeSuccessful(string symbol, decimal lastPrice, decimal closingPrice) { // arrange var marketData = new MarketData { Symbol = symbol, LastPrice = lastPrice, ClosingPrice = closingPrice }; // act var vm = new MarketDataViewModel(marketData); // assert vm.Symbol.ShouldBe(symbol); vm.LastPrice.ShouldBe(lastPrice); vm.ClosingPrice.ShouldBe(closingPrice); }
public MarketDataView(MarketDataViewModel viewModel) { InitializeComponent(); _viewModel = viewModel; this.DataContext = _viewModel; }
public async Task <JsonResult> GetAllMarketData(string startDate, string Type, string selectedCode) { startDate = BluSignalComman.DateTime9MonthBack; MarketDataViewModel vm = new MarketDataViewModel(); //var types = new[] { "daily", "weekly", "monthly", "quarterly", "yearly" }; var result = string.Empty; try { if (!string.IsNullOrEmpty(selectedCode) && selectedCode.IndexOf("-") != -1) { var codeArray = selectedCode.Split('-'); vm.Name = codeArray[0].Trim(); vm.Code = codeArray[1].Trim(); } else { vm.Code = selectedCode; } var dddd = GetNameFromSymbol(vm.Code); if (dddd != null) { vm.SymbolNameData = Convert.ToString(dddd.Data); } vm.LastTradingDay = "02 Feb 2017"; using (WebClient client = new WebClient()) { var apiUrl = string.Empty; /**DAILY DATA**/ apiUrl = string.Format("http://marketdata.websol.barchart.com/getHistory.json?key=" + apiKey + "&symbol={0}&type=daily&startDate={1}", vm.Code, startDate); result = await client.DownloadStringTaskAsync(new System.Uri(apiUrl)); if (!string.IsNullOrEmpty(result)) { result = result.Replace("//", ""); vm.MarketDataDaily = result; var data = JsonConvert.DeserializeObject <Data>(result); if (data != null && data.results != null && data.results.Any()) { int lastDays = 90; var maxRexord = data.results.OrderByDescending(a => a.tradingDay).Take(lastDays).Sum(x => Convert.ToSingle(x.volume)); if (maxRexord > 0) { vm.AverageVolumn = Convert.ToString(Math.Round((maxRexord / lastDays), 0)); } } vm.ClosingPrice = string.Empty; } /**DAILY DATA**/ /**Weekly DATA**/ apiUrl = string.Format("http://marketdata.websol.barchart.com/getHistory.json?key=" + apiKey + "&symbol={0}&type=weekly&startDate={1}", vm.Code, startDate); result = await client.DownloadStringTaskAsync(new System.Uri(apiUrl)); if (!string.IsNullOrEmpty(result)) { result = result.Replace("//", ""); vm.MarketDataWeekly = result; } /**Weekly DATA**/ /**Monthly DATA**/ apiUrl = string.Format("http://marketdata.websol.barchart.com/getHistory.json?key=" + apiKey + "&symbol={0}&type=monthly&startDate={1}", vm.Code, startDate); result = await client.DownloadStringTaskAsync(new System.Uri(apiUrl)); if (!string.IsNullOrEmpty(result)) { result = result.Replace("//", ""); vm.MarketDataMonthly = result; var data = JsonConvert.DeserializeObject <Data>(result); if (data != null && data.results != null && data.results.Any()) { var maxRexord = data.results.OrderByDescending(a => a.timestamp).First(); if (maxRexord != null) { vm.ClosingPrice = maxRexord.close; } } } /**Monthly DATA**/ /**Quarterly DATA**/ apiUrl = string.Format("http://marketdata.websol.barchart.com/getHistory.json?key=" + apiKey + "&symbol={0}&type=quarterly&startDate={1}", vm.Code, startDate); result = await client.DownloadStringTaskAsync(new System.Uri(apiUrl)); if (!string.IsNullOrEmpty(result)) { result = result.Replace("//", ""); vm.MarketDataQuartely = result; } /**Quarterly DATA**/ /**Yearly DATA**/ apiUrl = string.Format("http://marketdata.websol.barchart.com/getHistory.json?key=" + apiKey + "&symbol={0}&type=yearly&startDate={1}", vm.Code, startDate); result = await client.DownloadStringTaskAsync(new System.Uri(apiUrl)); if (!string.IsNullOrEmpty(result)) { result = result.Replace("//", ""); vm.MarketDataYearly = result; } /**Yearly DATA**/ var chartJsonData = Helpers.GetJsonResponse <List <resultsData> >(result, "result"); var ChartData = new List <ChartDataModel>(); ChartData.AddRange(chartJsonData.ToList().Select(item => new ChartDataModel() { symbol = item.symbol, close = Convert.ToDecimal(item.close), high = Convert.ToDecimal(item.high), low = Convert.ToDecimal(item.low), open = Convert.ToDecimal(item.open), TradingDayTimeStamp = Convert.ToDateTime(item.tradingDay).ToString("yyyyMMddHHmmssfff"), })); vm.ChartData = ChartData; } } catch (WebException ex) //if server is off it will throw exeception and here we need notify user { throw ex; } return(Json(vm, JsonRequestBehavior.AllowGet)); }
public async Task <IActionResult> MarketData(string assetPair) { var data = await _database.HashGetAllAsync(RedisService.GetMarketDataKey(assetPair)); var marketSlice = data?.ToMarketSlice() ?? new MarketSlice { AssetPairId = assetPair }; var nowDate = DateTime.UtcNow; var now = nowDate.ToUnixTime(); var from = (nowDate - _marketDataInterval).ToUnixTime(); var baseVolumesDataTask = _database.SortedSetRangeByScoreAsync(RedisService.GetMarketDataBaseVolumeKey(assetPair), from, now); var quoteVolumesDataTask = _database.SortedSetRangeByScoreAsync(RedisService.GetMarketDataQuoteVolumeKey(assetPair), from, now); var pricesTask = _database.SortedSetRangeByScoreAsync(RedisService.GetMarketDataPriceKey(assetPair), from, now); await Task.WhenAll(baseVolumesDataTask, quoteVolumesDataTask, pricesTask); var prices = pricesTask.Result .Where(x => x.HasValue) .Select(x => RedisExtensions.DeserializeWithDate <decimal>(x)).ToList(); var baseVolumes = baseVolumesDataTask.Result .Where(x => x.HasValue) .Select(x => RedisExtensions.DeserializeWithDate <decimal>(x)).ToList(); decimal baseVolume = baseVolumes.Sum(x => x.data); var quoteVolumes = quoteVolumesDataTask.Result .Where(x => x.HasValue) .Select(x => RedisExtensions.DeserializeWithDate <decimal>(x)).ToList(); decimal quoteVolume = quoteVolumes.Sum(x => x.data); var pricesList = prices.Select(x => x.data).ToList(); decimal high = pricesList.Any() ? pricesList.Max() : 0; decimal low = pricesList.Any() ? pricesList.Min() : 0; if (pricesList.Any()) { decimal price = pricesList[0]; if (price > 0) { decimal priceChange = (decimal.Parse(marketSlice.LastPrice, CultureInfo.InvariantCulture) - price) / price; marketSlice.PriceChange = priceChange.ToString(CultureInfo.InvariantCulture); } } if (high > 0) { marketSlice.High = high.ToString(CultureInfo.InvariantCulture); } if (low > 0) { marketSlice.Low = low.ToString(CultureInfo.InvariantCulture); } marketSlice.VolumeBase = baseVolume.ToString(CultureInfo.InvariantCulture); marketSlice.VolumeQuote = quoteVolume.ToString(CultureInfo.InvariantCulture); var model = new MarketDataViewModel { From = nowDate - _marketDataInterval, To = nowDate, Slice = marketSlice, BaseVolumes = baseVolumes, QuoteVolumes = quoteVolumes, PriceValues = prices }; return(View(model)); }