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);
        }
Пример #2
0
 public MarketDataView(MarketDataViewModel viewModel)
 {
     InitializeComponent();
     _viewModel       = viewModel;
     this.DataContext = _viewModel;
 }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }