private ChartItemCollection CreateCollection(string id, IEnumerable <ChartItem> chartItems, ChartItemType type, IPen pen1, IPen pen2) { CollectionId cId = new CollectionId(id); ChartItemCollection coll = CreateChartItemCollection(type, chartItems, cId, pen1, pen2); return(coll); }
public ChartItemCollection CreateCollection(ChartItemType type, IPen pen1, IPen pen2) { //if (currentStock == null) { if (type != ChartItemType.Timely && type != ChartItemType.TimelyVolumn && type != ChartItemType.TimelyAverage) { currentStock = LoadStock(shareId); } else { currentStock = LoadMinStock(shareId, type == ChartItemType.TimelyAverage); } if (Stock.IsNullOrEmpty(currentStock)) { return(null); } } CollectionId id = new CollectionId(currentStock.id, GetMarketId()); var chartItems = CreateChartItemFromStock(currentStock, type); ChartItemCollection coll = CreateChartItemCollection(type, chartItems, id, pen1, pen2); return(coll); }
private ChartItemCollection CreateChartItemCollection(ChartItemType type, IEnumerable <ChartItem> chartItems, CollectionId id, IPen pen1, IPen pen2) { ChartItemCollection coll = null; if (type == ChartItemType.Linear) { coll = new ChartItemCollection(id, chartItems, pen1, null, true); } else if (type == ChartItemType.Candle) { coll = new StockItemCollection(id, chartItems.OfType <StockItem>(), pen1, pen2, null); } else if (type == ChartItemType.Volumn) { coll = new VolumnItemCollection(id, chartItems.OfType <VolumnItem>(), pen1, pen2); } else if (type == ChartItemType.Time) { coll = new SymmetricChartItemCollection(id, chartItems, pen1, null, SymmetricCommonSettings.CNSettings2); } else if (type == ChartItemType.TimeVolumn) { coll = new SymmetricVolumnItemCollection(id, chartItems != null ? chartItems.OfType <VolumnItem>() : null, pen1, pen2, SymmetricCommonSettings.CNSettings2); } return(coll); }
private ChartItemCollection CreateCollection(string id, IEnumerable <ChartItem>[] chartItemsList, IPen[] pens) { CollectionId cId = new CollectionId(id); ChartItemCollection coll = CreateMultipleItemCollection(chartItemsList, cId, pens); return(coll); }
public void AddAssistCollection(ChartItemCollection collection) { collection.AssistTo(_mainCollection); _assistCollections.Add(collection); DrawVisuals(); }
private Point AdjustPoint(Point pt) { pt.X = ChartItemCollection.Adjust(pt.X); pt.Y = ChartItemCollection.Adjust(pt.Y); return(pt); }
private ChartItemCollection CreateCollection(string id, IEnumerable <ChartItem> chartItems, IEnumerable <ChartItem> chartItems2, ChartItemType type, IPen pen1, IPen pen2, IPen[] otherPens) { CollectionId cId = new CollectionId(id); ChartItemCollection coll = CreateSingleStockCollection(type, chartItems, chartItems2, cId, pen1, pen2, otherPens); return(coll); }
private void CreateChartView2(IEnumerable <Stock> stocks, string marketId) { ChartItemCollection main = null; foreach (var stock in stocks) { var closeList = new List <ChartItem>(); CandleData cdPre = stock.Items.FirstOrDefault(); foreach (var cd in stock.Items) { closeList.Add(new ChartItem() { Value = cd.close, Date = cd.DateTime, ValueChange = (cd.close - cdPre.close) / cdPre.close }); cdPre = cd; } IPen pen; if (main == null) { pen = raisePen; } else { pen = fallPen; } CollectionId id = new CollectionId(stock.id, marketId); ChartItemCollection coll = new ChartItemCollection(id, closeList, pen, null, true, isDynamic); if (main == null) { main = coll; price.SetMainCollection(coll); } else { price.AddAssistCollection(coll, true); } } price.YScaleDock = YScaleDock.Left; volumn.YScaleDock = YScaleDock.Left; price.AddConnection(volumn); price.ForceDraw(); }
private void CandleTrading(string id, ChartItemCollection priceColl, ChartItemCollection volumnColl, IEnumerable <ChartItemCollection> maColls, StockVolumnList svList, int mvStart = 0) { tradingTimer = new DispatcherTimer(); bool isStarted = false; int i = 0; tradingTimer.Interval = tradingPeriod; tradingTimer.Tick += async(s, e) => { var tvList = await Timeloader.GetStockItems(id); if (i == tvList.Prices.Count) { tradingTimer.Stop(); return; } var candle = tvList.Prices[i]; var volumn = tvList.Volumns[i]; if (!isStarted) { priceColl.AddLatestChartItem(candle); volumnColl.AddLatestChartItem(volumn); UpdateMACollections(maColls, svList.Prices, candle, mvStart, isStarted); isStarted = true; } else { var lastestCandle = priceColl.Items.Last() as StockItem; var lastestVolumn = volumnColl.Items.Last() as VolumnItem; candle = MergeChartItem(lastestCandle, candle); volumn = MergeChartItem(lastestVolumn, volumn); volumn.IsRaise = candle.Open <= candle.Close; priceColl.UpdateLatestChartItem(candle); volumnColl.UpdateLatestChartItem(volumn); UpdateMACollections(maColls, svList.Prices, candle, mvStart, isStarted); } price.ForceDraw(false, false); i++; }; tradingTimer.Start(); }
public void CreateCurve() { string id = "000001"; //Load chart items IList <ChartItem> chartItems = loader.GetChartItems(id); //Create collection id CollectionId collId = new CollectionId(id); //Create pen IPen pen = DrawingObjectFactory.CreatePen(Brushes.Black, 1); //Create chart item collection ChartItemCollection collection = new ChartItemCollection(collId, chartItems, pen, null); //Set main collection priceControl.SetMainCollection(collection); }
public ChartItemCollection CreateEmptyTimeCollection(ChartItemType type, IPen pen1, IPen pen2, out StockTradeDetails std) { std = null; Stock s = null; if (type == ChartItemType.Timely) { s = LoadStock(shareId); std = LoadDetailDatas(); if (Stock.IsNullOrEmpty(s)) { return(null); } } CollectionId id = new CollectionId(shareId, GetMarketId()); ChartItemCollection coll = null; switch (type) { case ChartItemType.Timely: var tColl = new SymmetricChartItemCollection(id, null, pen1, null, SymmetricCommonSettings.CNSettings2); tColl.StartValue = s.Items.Last().close; coll = tColl; break; case ChartItemType.TimelyAverage: coll = new SymmetricChartItemCollection(id, null, pen1, null, SymmetricCommonSettings.CNSettings2); break; case ChartItemType.TimelyVolumn: coll = new SymmetricVolumnItemCollection(id, null, pen1, pen2, SymmetricCommonSettings.CNSettings2); break; default: break; } return(coll); }
public IEnumerable <ChartItemCollection> CreateMVCollections() { for (int i = mvStart; i < mvStart + mvCount; i++) { var maPeriod = mvUnits[i]; var ma60 = currentStock.MA(maPeriod); List <ChartItem> mv60Items = new List <ChartItem>(ma60.Count); for (int j = 0; j < ma60.Count; j++) { mv60Items.Add(new ChartItem() { Value = ma60[j], Date = currentStock.Data[j + maPeriod - 1].DateTime }); } var id = new CollectionId(currentStock.id, GetMarketId()); ChartItemCollection collMa60 = new ChartItemCollection(id, mv60Items, DrawingObjectFactory.CreatePen(mvBrushs[i], 1), null, true, false); yield return(collMa60); } }
private void QueryTime() { ChartItemCollection timeCollection = ViewModel.CreateCollection(ChartItemType.Timely, raisePen, null); price.SetMainCollection(timeCollection); price.XScaleFormat = "HH:mm"; ChartItemCollection atimeCollection = ViewModel.CreateCollection(ChartItemType.TimelyAverage, contrastPen, null); price.AddAssistCollection(atimeCollection); ChartItemCollection volumnCollection = ViewModel.CreateCollection(ChartItemType.TimelyVolumn, raisePen, fallPen); volumn.XScaleFormat = "HH:mm"; volumn.YCursorFormat = volumn.YScaleFormat = "N0"; volumn.SetMainCollection(volumnCollection); price.AddConnection(volumn); price.ForceDraw(); }
public IEnumerable <ChartItemCollection> CreateMACollections(List <StockItem> chartItems, int mvStart = 0) { for (int i = mvStart; i < mvStart + mvCount; i++) { var maPeriod = mvUnits[i]; var maData = MA(maPeriod, chartItems); List <ChartItem> mvItems = new List <ChartItem>(maData.Count); for (int j = 0; j < maData.Count; j++) { mvItems.Add(new ChartItem() { Value = maData[j], Date = chartItems[j + maPeriod - 1].Date }); } var id = new CollectionId(maPeriod.ToString()); ChartItemCollection collMa = new ChartItemCollection(id, mvItems, DrawingObjectFactory.CreatePen(mvBrushs[i], 1), null, true, false); yield return(collMa); } }
private void CreateChartView(Stock stock, string marketId) { if (stock != null) { var closeList = stock.Items.Select(cd => new ChartItem() { Value = cd.close, Date = cd.DateTime }).ToList(); CollectionId id = new CollectionId(stock.id, marketId); ChartItemCollection coll = new ChartItemCollection(id, closeList, raisePen, null, true, isDynamic); price.SetMainCollection(coll); for (int i = mvStart; i < mvStart + mvCount; i++) { var maPeriod = mvUnits[i]; var ma60 = stock.MA(maPeriod); List <ChartItem> mv60Items = new List <ChartItem>(ma60.Count); for (int j = 0; j < ma60.Count; j++) { mv60Items.Add(new ChartItem() { Value = ma60[j], Date = stock.Data[j + maPeriod - 1].DateTime }); } id = new CollectionId(stock.id, marketId); ChartItemCollection collMa60 = new ChartItemCollection(id, mv60Items, DrawingObjectFactory.CreatePen(mvBrushs[i], 1), null, true, isDynamic); price.AddAssistCollection(collMa60); } price.ForceDraw(); } }
private void MoveCursor(Point position, bool isActive) { if (CursorColor == null) { return; } List <CurrentChartItem> currentItems = new List <CurrentChartItem>(); if (_mainCollection != null) { var itemWp = _mainCollection.LocateCurrentChartItem(position); if (itemWp != null) { var x = ChartItemCollection.Adjust(position.X); var y = ChartItemCollection.Adjust(position.Y); var v = _mainCollection.GetValueFromPosition(position.Y); CreateCursorVisual(x, y, v, isActive); currentItems.Add(new CurrentChartItem(_mainCollection.Id, itemWp.CharItem)); } } foreach (var assitCollection in _assistCollections) { var itemWp = assitCollection.LocateCurrentChartItem(position); if (itemWp != null) { currentItems.Add(new CurrentChartItem(assitCollection.Id, itemWp.CharItem)); } } if (currentItems.Any()) { RaiseCursorMovedEvent(currentItems); } }
public IEnumerable<ChartItemCollection> CreateMACollections(List<StockItem> chartItems, int mvStart = 0) { for (int i = mvStart; i < mvStart + mvCount; i++) { var maPeriod = mvUnits[i]; var maData = MA(maPeriod, chartItems); List<ChartItem> mvItems = new List<ChartItem>(maData.Count); for (int j = 0; j < maData.Count; j++) { mvItems.Add(new ChartItem() { Value = maData[j], Date = chartItems[j + maPeriod - 1].Date }); } var id = new CollectionId(maPeriod.ToString()); ChartItemCollection collMa = new ChartItemCollection(id, mvItems, DrawingObjectFactory.CreatePen(mvBrushs[i], 1), null, true, false); yield return collMa; } }
private ChartItemCollection CreateChartItemCollection(ChartItemType type, IEnumerable<ChartItem> chartItems, CollectionId id, IPen pen1, IPen pen2) { ChartItemCollection coll = null; if (type == ChartItemType.Linear) { coll = new ChartItemCollection(id, chartItems, pen1, null, true); } else if (type == ChartItemType.Candle) { coll = new StockItemCollection(id, chartItems.OfType<StockItem>(), pen1, pen2, null); } else if (type == ChartItemType.Volumn) { coll = new VolumnItemCollection(id, chartItems.OfType<VolumnItem>(), pen1, pen2); } else if (type == ChartItemType.Time) { coll = new SymmetricChartItemCollection(id, chartItems, pen1, null, SymmetricCommonSettings.CNSettings2); } else if (type == ChartItemType.TimeVolumn) { coll = new SymmetricVolumnItemCollection(id, chartItems != null ? chartItems.OfType<VolumnItem>() : null, pen1, pen2, SymmetricCommonSettings.CNSettings2); } return coll; }
private void CandleTrading(string id, ChartItemCollection priceColl, ChartItemCollection volumnColl, IEnumerable<ChartItemCollection> maColls, StockVolumnList svList, int mvStart = 0) { tradingTimer = new DispatcherTimer(); bool isStarted = false; int i = 0; tradingTimer.Interval = tradingPeriod; tradingTimer.Tick += async (s, e) => { var tvList = await Timeloader.GetStockItems(id); if (i == tvList.Prices.Count) { tradingTimer.Stop(); return; } var candle = tvList.Prices[i]; var volumn = tvList.Volumns[i]; if (!isStarted) { priceColl.AddLatestChartItem(candle); volumnColl.AddLatestChartItem(volumn); UpdateMACollections(maColls, svList.Prices, candle, mvStart, isStarted); isStarted = true; } else { var lastestCandle = priceColl.Items.Last() as StockItem; var lastestVolumn = volumnColl.Items.Last() as VolumnItem; candle = MergeChartItem(lastestCandle, candle); volumn = MergeChartItem(lastestVolumn, volumn); volumn.IsRaise = candle.Open <= candle.Close; priceColl.UpdateLatestChartItem(candle); volumnColl.UpdateLatestChartItem(volumn); UpdateMACollections(maColls, svList.Prices, candle, mvStart, isStarted); } price.ForceDraw(false, false); i++; }; tradingTimer.Start(); }
public Chart() { m_Items = new ChartItemCollection(); }
private void CreateXScaleVisual(DrawingContext drawingContext, Rect drawRect, double y, ChartItemCollection collection) { if (xScaleDock == XScaleDock.None) { return; } var face = new Typeface(scaleFontFamily); var scales = collection.GetXAxisScales(); KeyValuePair <FormattedText, Point>[] dates = new KeyValuePair <FormattedText, Point> [scales.Count]; for (int i = 0; i < scales.Count; i++) { FormattedText format = new FormattedText(scales[i].Value.ToString(timeScaleFormat), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, face, scaleFontSize, scaleColor); Point ptext = new Point(scales[i].Pos, y); if (scales[i].Pos + format.Width > drawRect.Right) { scales[i].Pos = scales[i].Pos - (drawRect.Right - (scales[i].Pos + format.Width)); } dates[i] = new KeyValuePair <FormattedText, Point>(format, ptext); } bool isOverlapped = dates.Length > 1 && (dates[0].Value.X + dates[0].Key.Width * 3 >= dates[1].Value.X); if (isOverlapped) { dates = new KeyValuePair <FormattedText, Point>[] { dates[0], dates[dates.Length - 1] }; } foreach (var date in dates) { drawingContext.DrawText(date.Key, date.Value); } }
private void CreateYScaleVisual(DrawingContext drawingContext, Rect drawRect, double x, ChartItemCollection collection) { if (YScaleDock == YScaleDock.None) { return; } Pen scalePen = new Pen(scaleColor, scaleThickness); var face = new Typeface(scaleFontFamily); var scales = collection.GetYAxisScales(); for (int i = 1; i < scales.Count - 1; i++) { Point pt1 = AdjustPoint(new Point(drawRect.Left, scales[i].Pos)); Point pt2 = AdjustPoint(new Point(drawRect.Right, scales[i].Pos)); drawingContext.DrawLine(scalePen, pt1, pt2); FormattedText format = new FormattedText(scales[i].Value.ToString(scaleNumberFormat), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, face, scaleFontSize, scaleColor); Point ptext = pt2; ptext.Y -= format.Height / 2; drawingContext.DrawText(format, ptext); } //Point pt11 = AdjustPoint(new Point(drawRect.Left, scales[scales.Count - 1].Pos)); //Point pt21 = AdjustPoint(new Point(drawRect.Right, scales[scales.Count - 1].Pos)); //drawingContext.DrawLine(scalePen, pt11, pt21); FormattedText formatTop = new FormattedText(scales[0].Value.ToString(scaleNumberFormat), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, face, scaleFontSize, scaleColor); Point ptextTop = new Point(x, drawRect.Top); drawingContext.DrawText(formatTop, ptextTop); FormattedText formatBottom = new FormattedText(scales[scales.Count - 1].Value.ToString(scaleNumberFormat), CultureInfo.CurrentCulture, FlowDirection.LeftToRight, face, scaleFontSize, scaleColor); Point ptextBottom = new Point(x, drawRect.Bottom - scaleFontSize); drawingContext.DrawText(formatBottom, ptextBottom); }
private void CreateCollectionVisual(DrawingContext drawingContext, Rect drawRect, ChartItemCollection collection) { // Create a rectangle and draw it in the DrawingContext. collection.CalculatePosition(drawRect); collection.Draw(drawingContext); }
private void CreateCandleView2(IEnumerable <Stock> stocks, string marketId) { ChartItemCollection main = null; foreach (var stock in stocks) { var closeList = new List <StockItem>(); var volList = new List <VolumnItem>(); CandleData cdPre = stock.Items.FirstOrDefault(); foreach (var cd in stock.Items) { closeList.Add(new StockItem() { Value = cd.close, Date = cd.DateTime, High = cd.high, Low = cd.low, Open = cd.open, ValueChange = (cd.close - cdPre.close) / cdPre.close }); cdPre = cd; if (main == null) { volList.Add(new VolumnItem() { Date = cd.DateTime, IsRaise = cd.open <= cd.close, Volumn = cd.amount, Turnover = cd.money }); } } IPen pen; if (main == null) { pen = raisePen; } else { pen = fallPen; } CollectionId id = new CollectionId(stock.id, marketId); if (main == null) { StockItemCollection coll = new StockItemCollection(id, closeList, pen, pen, null, isDynamic); coll.ItemStyle = StockItemStyle.Candle; main = coll; price.SetMainCollection(coll); VolumnItemCollection volColl = new VolumnItemCollection(id, volList, pen, pen, isDynamic); volumn.SetMainCollection(volColl); } else { ChartItemCollection coll = new ChartItemCollection(id, closeList, pen, null, true, isDynamic); price.AddAssistCollection(coll, true); } } price.YScaleDock = YScaleDock.InnerLeft; volumn.YScaleDock = YScaleDock.InnerLeft; price.AddConnection(volumn); price.ForceDraw(); }
public void SetMainCollection(ChartItemCollection collection) { this._mainCollection = collection; DrawVisuals(); }
private void CreateCandleView(Stock stock, string marketId) { if (stock != null) { var closeList = new List <StockItem>(); var volList = new List <VolumnItem>(); CandleData cdPre = stock.Items.FirstOrDefault(); foreach (var cd in stock.Items) { closeList.Add(new StockItem() { Value = cd.close, Date = cd.DateTime, High = cd.high, Low = cd.low, Open = cd.open, CloseChange = (cd.close - cdPre.close) / cdPre.close }); cdPre = cd; volList.Add(new VolumnItem() { Date = cd.DateTime, IsRaise = cd.open <= cd.close, Volumn = cd.amount, Turnover = cd.money }); } CollectionId id = new CollectionId(stock.id, marketId); StockItemCollection coll = new StockItemCollection(id, closeList, raisePen, fallPen, null, isDynamic); //coll.ItemStyle = StockItemStyle.Linear; price.SetMainCollection(coll); for (int i = mvStart; i < mvStart + mvCount; i++) { var maPeriod = mvUnits[i]; var ma60 = stock.MA(maPeriod); List <ChartItem> mv60Items = new List <ChartItem>(ma60.Count); for (int j = 0; j < ma60.Count; j++) { mv60Items.Add(new ChartItem() { Value = ma60[j], Date = stock.Data[j + maPeriod - 1].DateTime }); } id = new CollectionId(stock.id, marketId); ChartItemCollection collMa60 = new ChartItemCollection(id, mv60Items, DrawingObjectFactory.CreatePen(mvBrushs[i], 1), null, true); price.AddAssistCollection(collMa60); } id = new CollectionId(stock.id, marketId); VolumnItemCollection volColl = new VolumnItemCollection(id, volList, raisePen, fallPen, isDynamic); //volColl.VolumnItemStyle = VolumnItemStyle.Linear; volumn.SetMainCollection(volColl); } else { price.SetMainCollection(null); volumn.SetMainCollection(null); } price.YScaleDock = YScaleDock.Left; volumn.YScaleDock = YScaleDock.Left; price.AddConnection(volumn); price.ForceDraw(); }
public void QueryStock() { if (ViewModel.IsTime) { QueryTime(); return; } /*ViewModel.IsDynamic = true; * * StockItemCollection stockCollection = ViewModel.CreateCollection(ChartItemType.Candle, raisePen, fallPen) as StockItemCollection; * //stockCollection.ItemStyle = StockItemStyle.Linear; * ChartItemCollection volumnCollection = ViewModel.CreateCollection(ChartItemType.Volumn, raisePen, fallPen); * price.SetMainCollection(stockCollection); * * //var collections = ViewModel.CreateMVCollections(); * //foreach(var coll in collections) * //price.AddAssistCollection(coll); * * volumn.SetMainCollection(volumnCollection);*/ StockItemCollection stockCollection = ViewModel.CreateCollection(ChartItemType.Candle, raisePen, fallPen) as StockItemCollection; if (stockCollection == null) { return; } stockCollection.MaxItemXDistance = 50; //stockCollection.MinItemXDistance = 1.2; //stockCollection.ItemStyle = StockItemStyle.Linear; ChartItemCollection volumnCollection = ViewModel.CreateCollection(ChartItemType.Volumn, raisePen, fallPen); volumnCollection.MaxItemXDistance = 50; //volumnCollection.MinItemXDistance = 1.2; price.SetMainCollection(stockCollection); var statisticCollection = ViewModel.CreateStatisticCollection(contrastPen); if (statisticCollection != null) { price.AddAssistCollection(statisticCollection, true); statisticCollection.MaxItemXDistance = 50; } //statisticCollection.MinItemXDistance = 1.2; volumn.SetMainCollection(volumnCollection); /*SingleStockItemCollection ssCollection = ViewModel.CreateSingleStockCollection(raisePen, fallPen, contrastPen); * price.SetMainCollection(ssCollection); * * ChartItemCollection volumnCollection = ViewModel.CreateCollection(ChartItemType.Volumn, raisePen, fallPen); * volumn.SetMainCollection(volumnCollection);*/ /*var msc = ViewModel.CreateMultipleStatisticCollection(); * price.SetMainCollection(msc);*/ /*ChartItemCollection stockCollection = ViewModel.CreateCollection(ChartItemType.Linear, raisePen, fallPen); * stockCollection.IsSymmetric = true; * stockCollection.StartValue = 4500.0; * //stockCollection.ItemStyle = StockItemStyle.Linear; * VolumnItemCollection volumnCollection = ViewModel.CreateCollection(ChartItemType.Volumn, raisePen, fallPen) as VolumnItemCollection; * volumnCollection.IsSymmetric = true; * * price.SetMainCollection(stockCollection); * volumn.SetMainCollection(volumnCollection);*/ price.YScaleDock = YScaleDock.Right; volumn.YScaleDock = YScaleDock.Right; price.AddConnection(volumn); XRHistoryGraphics xrGraphic = new XRHistoryGraphics(); price.AddExtraDataGraphic(xrGraphic); price.ForceDraw(); }
private void QueryCandleRunning() { if (timer != null) { timer.Stop(); } StockItemCollection stockCollection = ViewModel.CreateCollection(ChartItemType.Candle, raisePen, fallPen) as StockItemCollection; stockCollection.MaxItemXDistance = 50; ChartItemCollection volumnCollection = ViewModel.CreateCollection(ChartItemType.Volumn, raisePen, fallPen); volumnCollection.MaxItemXDistance = 50; volumn.SetMainCollection(volumnCollection); price.SetMainCollection(stockCollection); price.YScaleDock = YScaleDock.Right; volumn.YScaleDock = YScaleDock.Right; price.AddConnection(volumn); price.ForceDraw(); bool isStarted = false; var std = ViewModel.LoadDetailDatas(); var tdds = std.Data; if (tdds != null && tdds.Count > 10) { timer = new DispatcherTimer(); timer.Interval = interval; int i = 0; timer.Tick += (s, e) => { if (i == tdds.Count) { timer.Stop(); return; } if (!isStarted) { var candle = ViewModel.FromTradeDetailData(tdds[i], ChartItemType.Candle) as StockItem; var volumn = ViewModel.FromTradeDetailData(tdds[i], ChartItemType.Volumn) as VolumnItem; stockCollection.AddLatestChartItem(candle); volumnCollection.AddLatestChartItem(volumn); isStarted = true; } else { var candle = ViewModel.FromTradeDetailData(tdds[i], ChartItemType.Candle) as StockItem; var volumn = ViewModel.FromTradeDetailData(tdds[i], ChartItemType.Volumn) as VolumnItem; var lastestCandle = stockCollection.Items.Last(); var lastestVolumn = volumnCollection.Items.Last(); candle = ViewModel.MergeChartItem(lastestCandle as StockItem, candle); volumn = ViewModel.MergeChartItem(lastestVolumn as VolumnItem, volumn); Debug.WriteLine(candle.Date.ToString("HH:mm:ss ") + candle + "" + volumn); stockCollection.UpdateLatestChartItem(candle); volumnCollection.UpdateLatestChartItem(volumn); } price.ForceDraw(false, false); i++; }; Thread t = new Thread(new ThreadStart(() => { Thread.Sleep(1000); timer.Start(); })); t.Start(); } }