void SetStockChartBindingData(CompanyTradingData ctd)
        {
            TradingDataViewModel tdvm = null;

            if (stockChartBindingData.Count > 0)
            {
                tdvm = new TradingDataViewModel(stockChartBindingData[stockChartBindingData.Count - 1].TradingData);
            }
            else
            {
                tdvm = new TradingDataViewModel();
            }
            highestPrice = Math.Max(highestPrice, ctd.High);
            lowestPrice  = Math.Min(lowestPrice, ctd.Low);
            tdvm.Volume  = Math.Round((ctd.Volume / 1000000), 2);
            tdvm.Close   = ctd.Close;
            tdvm.Low     = lowestPrice;
            tdvm.High    = highestPrice;
            tdvm.Price   = ctd.Price;
            if (stockChartBindingData.Count > 0)
            {
                stockChartBindingData[stockChartBindingData.Count - 1] = tdvm;
            }
            else
            {
                stockChartBindingData.Add(tdvm);
            }
        }
        void UpdateVolumeDynamicsAsyncCompleted(CompanyStockData[] cd)
        {
            foreach (CompanyStockData companynStockData in cd)
            {
                try {
                    if (companynStockData.Data.Length == 0)
                    {
                        continue;
                    }
                    DateTime                    current = dates[currentDate];
                    CompanyTradingData          ctd     = GetCompanyTradingData(companynStockData.Data[0], current);
                    CompanyTradingDataViewModel vm      = watchLisBindingData.Where(c => c.CompanyName == companynStockData.CompanyName).Select(c => c).FirstOrDefault();
                    if (vm == null)
                    {
                        continue;
                    }
                    IList <TradingDataViewModel> volDyn = vm.VolumeDynamics as IList <TradingDataViewModel>;

                    if (vm.VolumeDynamics == null || ((IList)vm.VolumeDynamics).Count == 0)
                    {
                        return;
                    }
                    if (tickCount == 2)
                    {
                        ctd.Volume = Math.Round((ctd.Volume / 1000000), 2);
                        volDyn.Add(new TradingDataViewModel(ctd));
                    }
                    if (tickCount != 2)
                    {
                        TradingDataViewModel tdvm = new TradingDataViewModel(volDyn[volDyn.Count - 1].TradingData);
                        tdvm.Volume = Math.Round((ctd.Volume / 1000000), 2);
                        tdvm.Close  = ctd.Close;
                        tdvm.Low    = lowestPrice;
                        tdvm.High   = highestPrice;
                        tdvm.Price  = ctd.Price;
                        volDyn[volDyn.Count - 1] = tdvm;
                    }
                }
                catch {
                    currentDate++;
                    UpdateStockChartBindingDataAsync();
                }
            }
            TryEndUpdateBindingData();
        }
        void CreateChartBindingData(List <CompanyData> newStockChartData)
        {
            TryResetCurrentDate();
            int      index     = 0;
            DateTime firstDate = newStockChartData[0].Data.Date;
            DateTime startDate = new DateTime(firstDate.Year, firstDate.Month, 1);

            foreach (CompanyData candleData in newStockChartData)
            {
                CompanyTradingData ctd = new CompanyTradingData(candleData.Data, "");
                ctd.Close  = candleData.ClosePrice;
                ctd.Volume = Math.Round(((double)ctd.Volume / 1000000), 2);
                ctd.Low    = lowestPrice = candleData.LowPrice;
                ctd.High   = highestPrice = candleData.HighPrice;
                TradingDataViewModel viewModel = new TradingDataViewModel(ctd)
                {
                    Date = startDate
                };
                if (stockChartBindingData.Count < candlesCount)
                {
                    stockChartBindingData.Add(viewModel);
                }
                else
                {
                    stockChartBindingData[index] = viewModel;
                }
                startDate = UpdateDate(startDate, true);
                index++;
            }
            DateTime search = UpdateDate(startDate, false);

            while (true)
            {
                int dateIndex = dates.IndexOf(search);
                if (dateIndex != -1)
                {
                    currentDate = dateIndex;
                    break;
                }
                search = search.AddDays(-1);
            }
        }