private void ChartUpdateTimerOnTick(object sender, EventArgs eventArgs) { if (IsRealtime.IsChecked == true && _lastPrice != 0m) { var nextTick = (ExecutionMessage)_tradeGenerator.Process(new TimeMessage { ServerTime = _lastTime }); if (nextTick != null) { AppendTick(_security, nextTick); } _lastTime += TimeSpan.FromSeconds(10); } Tuple <TimeFrameCandle, bool>[] candlesToUpdate; lock (_updatedCandles.SyncRoot) { candlesToUpdate = _updatedCandles.OrderBy(p => p.Key).Select(p => p.Value).ToArray(); _updatedCandles.Clear(); } var lastCandle = _allCandles.LastOrDefault(); _allCandles.AddRange(candlesToUpdate.Where(c => lastCandle == null || c.Item1.OpenTime != lastCandle.OpenTime).Select(t => t.Item1)); ChartDrawData chartData = null; foreach (var tuple in candlesToUpdate) { var candle = tuple.Item1; var needToFinish = tuple.Item2; if (chartData == null) { chartData = new ChartDrawData(); } if (needToFinish) { candle.State = CandleStates.Finished; } var chartGroup = chartData.Group(candle.OpenTime); lock (candle.PriceLevels) chartGroup.Add(_candleElement, candle); foreach (var pair in _indicators.CachedPairs) { chartGroup.Add(pair.Key, pair.Value.Process(candle)); } } if (chartData != null) { Chart.Draw(chartData); } }
private void ChartUpdateTimerOnTick(object sender, EventArgs eventArgs) { if (IsRealtime.IsChecked == true && _lastPrice != 0m) { var step = PriceStep.Value ?? 10; var price = Round(_lastPrice + (decimal)((RandomGen.GetDouble() - 0.5) * 5 * step), (decimal)step); AppendTick(_security, new ExecutionMessage { ServerTime = _lastTime, TradePrice = price, Volume = RandomGen.GetInt(50) + 1 }); _lastTime += TimeSpan.FromSeconds(10); } TimeFrameCandle[] candlesToUpdate; lock (_updatedCandles.SyncRoot) { candlesToUpdate = _updatedCandles.OrderBy(p => p.Key).Select(p => p.Value).ToArray(); _updatedCandles.Clear(); } _allCandles.AddRange(candlesToUpdate); candlesToUpdate.ForEach(c => { Chart.Draw(c.OpenTime, new Dictionary <IChartElement, object> { { _candleElement1, c }, }); }); }
private void ChartUpdateTimerOnTick(object sender, EventArgs eventArgs) { if (IsRealtime.IsChecked == true && _lastPrice != 0m) { var step = _priceStep; var price = Round(_lastPrice + (decimal)((RandomGen.GetDouble() - 0.5) * 5 * (double)step), step); AppendTick(_security, new ExecutionMessage { ServerTime = _lastTime, TradePrice = price, TradeVolume = RandomGen.GetInt(50) + 1, OriginSide = Sides.Buy, }); _lastTime += TimeSpan.FromSeconds(10); } TimeFrameCandle[] candlesToUpdate; lock (_updatedCandles.SyncRoot) { candlesToUpdate = _updatedCandles.OrderBy(p => p.Key).Select(p => p.Value).ToArray(); _updatedCandles.Clear(); } var lastCandle = _allCandles.LastOrDefault(); _allCandles.AddRange(candlesToUpdate.Where(c => lastCandle == null || c.OpenTime != lastCandle.OpenTime)); var hasValue = false; var chartData = new ChartDrawData(); foreach (var candle in candlesToUpdate) { chartData.Group(candle.OpenTime).Add(_candleElement1, candle); hasValue = true; } if (hasValue) { Chart.Draw(chartData); } }
private void ChartUpdateTimerOnTick(object sender, EventArgs eventArgs) { TimeFrameCandle[] candlesToUpdate; lock (_updatedCandles.SyncRoot) { candlesToUpdate = _updatedCandles.OrderBy(p => p.Key).Select(p => p.Value).ToArray(); _updatedCandles.Clear(); } var lastCandle = _allCandles.LastOrDefault(); _allCandles.AddRange(candlesToUpdate.Where(c => lastCandle == null || c.OpenTime != lastCandle.OpenTime)); candlesToUpdate.ForEach(c => { Chart.Draw(c.OpenTime, new Dictionary <IChartElement, object> { { _candleElement, c }, }); }); }
private void ChartUpdateTimerOnTick(object sender, EventArgs eventArgs) { if (_historyLoaded && IsRealtime.IsChecked == true) { var nextTick = (ExecutionMessage)_tradeGenerator.Process(new TimeMessage { ServerTime = _lastTime }); if (nextTick != null) { if (_candleTransform.Process(nextTick)) { var candles = _candleBuilder.Process(_mdMsg, _currCandle, _candleTransform); lock (_lock) { foreach (var candle in candles) { _currCandle = candle; _updatedCandles[candle.OpenTime] = Tuple.Create(candle, candle.State == CandleStates.Finished); } } } } _lastTime += TimeSpan.FromSeconds(RandomGen.GetInt(1, 10)); } Tuple <Candle, bool>[] candlesToUpdate; lock (_updatedCandles.SyncRoot) { candlesToUpdate = _updatedCandles.OrderBy(p => p.Key).Select(p => Tuple.Create(p.Value.Item1.ToCandle(_security), p.Value.Item2)).ToArray(); _updatedCandles.Clear(); } var lastCandle = _allCandles.LastOrDefault(); _allCandles.AddRange(candlesToUpdate.Where(c => lastCandle == null || c.Item1.OpenTime != lastCandle.OpenTime).Select(t => t.Item1)); ChartDrawData chartData = null; foreach (var tuple in candlesToUpdate) { var candle = tuple.Item1; var needToFinish = tuple.Item2; if (chartData == null) { chartData = new ChartDrawData(); } if (needToFinish && candle.State != CandleStates.Finished) { candle.State = CandleStates.Finished; } var chartGroup = chartData.Group(candle.OpenTime); lock (_lock) { chartGroup.Add(_candleElement, candle); } foreach (var pair in _indicators.CachedPairs) { chartGroup.Add(pair.Key, pair.Value.Process(candle)); } } if (chartData != null) { Chart.Draw(chartData); } }