Невозможно изменить значение для свечи
Добрый день! Вот такой код:
Кодusing System;
using System.Net;
using System.Security;
using System.Windows;
using System.Windows.Media;
using Ecng.Common;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.BusinessEntities;
using StockSharp.Xaml.Charting;
using StockSharp.Quik;
using Ecng.Xaml;
using StockSharp.Messages;
using System.Linq;
namespace ShowChart
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private QuikTrader _trader;
public static CandleManager CandleManager { get; private set; }
public static CandleSeries Series { get; private set; }
public CandleSeries CandleSeries { get; private set; }
public ChartArea Area { get; set; }
public bool IsRealtiem { get; set; }
public ChartCandleElement ChartCandleElement { get; private set; }
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
_trader = new QuikTrader()
{
LuaLogin = "Quik",
LuaPassword = "Quik".To<SecureString>(),
LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),
};
CandleManager = new CandleManager(_trader);
_trader.NewSecurity += security =>
{
if (security.Id == "SBER@QJSIM")
{
CandleSeries = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromMinutes(1));
this.GuiAsync(InitCart);
}
};
_trader.Connect();
}
public void InitCart()
{
Chart.ClearAreas();
Area = new ChartArea();
var yAxis = Area.YAxises.First();
yAxis.AutoRange = true;
Chart.IsAutoScroll = true;
Chart.ShowOverview = true;
Chart.AddArea(Area);
ChartCandleElement = new ChartCandleElement()
{
DownFillColor = Brushes.DarkRed.Color,
UpFillColor = Brushes.DarkGreen.Color,
DownBorderColor = Brushes.Red.Color,
UpBorderColor = Brushes.Green.Color,
};
Chart.AddElement(Area, ChartCandleElement, CandleSeries);
}
public void DisplayNewMarketData(CandleSeries candleSeries, Candle candle)
{
IsRealtiem = candle.CloseTime + TimeSpan.FromSeconds(5) > DateTimeOffset.Now || IsRealtiem;
var chartDrawData = new ChartDrawData();
var group = chartDrawData.Group(candle.OpenTime);
group.Add(ChartCandleElement, candle);
if (IsRealtiem || candle.State == CandleStates.Finished)
Chart.Draw(chartDrawData);
}
private void StartButton_Click(object sender, RoutedEventArgs e)
{
CandleManager.Processing += DisplayNewMarketData;
CandleManager.Start(CandleSeries);
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
CandleManager.Processing -= DisplayNewMarketData;
CandleManager.Stop(CandleSeries);
InitCart();
}
}
}
Данный код рисует свечи при клике по кнопке Start и очищает чарт при клике по кнопке Stop. Если запустить отрисовку свечей кликом по кнопке Start, за тем остановить кнопкой Stop и снова запустить Start то выскакивает исключение:
Цитата:System.InvalidOperationException: "Невозможно изменить значение для свечи для даты 01/27/2018 04:05:00 +03:00 последнее добавленное значение для даты 01/27/2018 22:58:00."
В обработчике события (StopButton_Click) по кнопке Stop происходит инициализация чарта заново. Весь день ломаю голову. Почему так происходит? Подскажите пожалуйста.
Во вложении проект.