Добрый день! Вот такой код:
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 происходит инициализация чарта заново. Весь день ломаю голову. Почему так происходит? Подскажите пожалуйста. Во вложении проект.
Комментарии (0)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Пока нет комментариев. Будьте первым!