void UpdateWatchList(StockData[] watchListData) { int count = 0; int isRise = 0; oldWatchListData = new ObservableCollection <CompanyTradingDataViewModel>(watchLisBindingData as IEnumerable <CompanyTradingDataViewModel>); oldWatchListData = new ObservableCollection <CompanyTradingDataViewModel>(); foreach (CompanyTradingDataViewModel item in watchLisBindingData) { oldWatchListData.Add(new CompanyTradingDataViewModel(item.TradingData, item.CompanyName, item.Rise, item.TotalRise)); } watchLisBindingData.BeginUpdate(); foreach (StockData dt in watchListData) { if (companies.Count <= (dt.CompanyID)) { continue; } CompanyTradingData ctd = new CompanyTradingData(dt, companies[dt.CompanyID]); if (watchLisBindingData.Count < companies.Count) { watchLisBindingData.Add(new CompanyTradingDataViewModel(ctd, ctd.CompanyName, isRise, 1)); } else { SetWatchListBindingData(count, ctd); count++; } } watchLisBindingData.EndUpdate(); if (watchListChanged != null) { watchListChanged(this, EventArgs.Empty); } }
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); } }
LockableCollection <TradingDataViewModel> CreateVolumeDynamicsBindingData(StockData[] data) { LockableCollection <TradingDataViewModel> result = new LockableCollection <TradingDataViewModel>(); foreach (StockData currentData in data) { CompanyTradingData ctd = new CompanyTradingData(currentData, ""); ctd.Close = double.Parse(currentData.CloseP.ToString()); ctd.Volume = Math.Round(((double)ctd.Volume / 1000000), 2); ctd.Low = double.Parse(currentData.LowP.ToString()); ctd.High = double.Parse(currentData.HighP.ToString()); result.Add(new TradingDataViewModel(ctd)); } return(result); }
void SetWatchListBindingData(int index, CompanyTradingData ctd) { watchLisBindingData[index].Rise = 0; if (ctd.Price > watchLisBindingData[index].Price) { watchLisBindingData[index].TotalRise = Math.Min(0.5 + (1 - watchLisBindingData[index].Price / ctd.Price) * 10, 1.3); watchLisBindingData[index].Rise = 180; } else if (ctd.Price < watchLisBindingData[index].Price) { watchLisBindingData[index].TotalRise = Math.Min(0.5 + (1 - ctd.Price / watchLisBindingData[index].Price) * 10, 1.3); watchLisBindingData[index].Rise = -180; } watchLisBindingData[index].Assign(ctd); }
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); } }
void AddStockChart(DateTime current, CompanyTradingData ctd, int count) { if (current.DayOfWeek == DayOfWeek.Monday && countOfWeek == count) { ctd.Volume = Math.Round((ctd.Volume / 1000000), 2); stockChartBindingData.Add(new TradingDataViewModel(ctd)); highestPrice = ctd.High; lowestPrice = ctd.Low; countOfWeek = 1; return; } if (current.DayOfWeek == DayOfWeek.Monday && countOfWeek != count) { SetStockChartBindingData(ctd); countOfWeek++; return; } if (current.DayOfWeek != DayOfWeek.Monday) { SetStockChartBindingData(ctd); } }
void UpdateStockChart(StockData newChartData) { tickCount++; DateTime current = dates[currentDate]; CompanyTradingData ctd = GetCompanyTradingData(newChartData, current); switch (totalTicks) { case 5: AddStockChart(current, ctd, 1); break; case 10: AddStockChart(current, ctd, 2); break; default: AddStockChart(current, ctd, 4); break; } currentDate++; }
public void Assign(CompanyTradingData ctd) { CompanyName = ctd.CompanyName; base.Assign(ctd); }
CompanyTradingData GetCompanyTradingData(StockData newData, DateTime current) { CompanyTradingData ctd = new CompanyTradingData(newData, ""); return(ctd); }