private void OnMouseMove(object sender, MouseEventArgs e) { if (this.currentCandles.Count == 0) { return; } Point position = e.GetPosition(this.DrawElement); double price = this.topPrice - position.Y / this.proportion; this.YLine.Y1 = position.Y; this.YCursor.Text = price.ToString("F" + this.Precision); this.YCursor.SetValue(Canvas.TopProperty, position.Y); int index = (int)(position.X / this.barWidth); if (index == this.currentCandles.Count) { --index; } if (index == this.preIndex) { return; } this.preIndex = index; Candle candle = this.currentCandles[index]; double x = (index + 0.5) * this.barWidth; this.XLine.X1 = x; this.XCursor.Text = candle.CandleTime.ToString(); this.XCursor.SetValue(Canvas.LeftProperty, x); this.InfoBlock.Text = candle.ToString(); }
private void Candles_NewCandle(Candle candle) // было раньше (по новой свечке открываем позицию) { if (candle.SecCode == secCode) { _candlesList.Insert(0, candle); if (_candlesList.Count > 2) { if (_candlesList[0].Close > _candlesList[1].Close) { // что-то делаем } } var ttt = TimeToString(candle.Datetime); Log(ttt + " " + candle.SecCode + " " + candle.ToString()); if (candle.Open == candle.Close && candle.High == candle.Close && candle.Low != candle.Close) { Log("Пришла свеча Висельник"); } if ((candle.Close - candle.Open) > 0 && (candle.Close - candle.Open) < 2 * _tool.Step && candle.High == candle.Close && candle.Low != candle.Close) { Log("Пришла свеча ... Эскимо"); } //Тег для которого будем считать количество линий string tag = "IND"; // Получаем количество линий (свечек ??) var N = _quik.Candles.GetNumCandles(tag).Result; Up = _quik.Candles.GetCandles("IND", 0, N - 2, 2).Result[0].Close; // -2 : предыдущ свеча Centr = _quik.Candles.GetCandles("IND", 1, N - 2, 2).Result[0].Close; Low = _quik.Candles.GetCandles("IND", 2, N - 2, 2).Result[0].Close; // Выводим в окно сообщений Log(tag + " " + N + " " + Up + " " + Centr + " " + Low); if (_flagRobot && InMarket()) { // запуск робота ShortStopLimit(Low); LongStopLimit(Up); } } }
private void ProcessTimerTick(ElapsedEventArgs e, CandleType candleType) { //Parallel.ForEach(ticks, (instrumentTicks) => //{ // var allTicks = instrumentTicks.Value; // int backTrackMinutes = GetMinutesToTrack(candleType); // var signalTime = e.SignalTime; // //var signalTime = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(e.SignalTime.Ticks, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")); // var lastTicks = allTicks.Where(tick => tick.Timestamp >= signalTime.AddMinutes(backTrackMinutes) && tick.Timestamp < signalTime); // if (lastTicks.Any() == false) // return; // var open = lastTicks.First().LastPrice; // var close = lastTicks.Last().LastPrice; // var high = lastTicks.Max(tick => tick.LastPrice); // var low = lastTicks.Min(tick => tick.LastPrice); // var volume = lastTicks.Last().Volume; // var candle = new Candle() // { // Open = open, // Close = close, // High = high, // Low = low, // Volume = volume, // TimeStamp = signalTime.AddMinutes(backTrackMinutes), // Instrument = lastTicks.Last().InstrumentToken, // }; // ulong netVolume = volume; // if (lastVolume > -1) // { // netVolume = (ulong)(volume - lastVolume); // } // candle.CandleVolume = netVolume; // lastVolume = (long)volume; // OnCandleReceived(candle, CandleType.Minute); // Logger.Log(candle.ToString()); //}); try { foreach (var instrument in ticks.Keys) { var allTicks = ticks[instrument]; int backTrackMinutes = GetMinutesToTrack(candleType); //var signalTime = e.SignalTime; var signalTime = TimeZoneInfo.ConvertTimeFromUtc(new DateTime(e.SignalTime.Ticks, DateTimeKind.Utc), TimeZoneInfo.FindSystemTimeZoneById("India Standard Time")); var lastTicks = allTicks.Where(tick => tick.Timestamp >= signalTime.AddMinutes(backTrackMinutes) && tick.Timestamp < signalTime); if (lastTicks.Any() == false) { return; } var open = lastTicks.First().LastPrice; var close = lastTicks.Last().LastPrice; var high = lastTicks.Max(tick => tick.LastPrice); var low = lastTicks.Min(tick => tick.LastPrice); var volume = lastTicks.Last().Volume; var candle = new Candle() { Open = open, Close = close, High = high, Low = low, Volume = volume, TimeStamp = signalTime.AddMinutes(backTrackMinutes), Instrument = lastTicks.Last().InstrumentToken, }; ulong netVolume = volume; if (lastVolume > -1) { netVolume = (ulong)(volume - lastVolume); } candle.CandleVolume = netVolume; lastVolume = (long)volume; OnCandleReceived(candle, CandleType.Minute); Logger.Log(candle.ToString()); } }catch (Exception ex) { Logger.Log($"Error in processing Tick {ex}"); } }