﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">Не отвечает приложение при отрисовке заявок и сделок</title>
  <id>~/topic/11073/ne-otvechaet-prilozhenie-pri-otrisovke-zayavok-i-sdelok/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-06-10T08:59:18Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=11073" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/48659/</id>
    <title type="text">Добрый день Наш график позволяет рисовать с высокой производительностью свечные данные и индикаторы....</title>
    <published>2019-10-14T12:46:19Z</published>
    <updated>2019-10-14T12:46:19Z</updated>
    <author>
      <name>Support</name>
      <uri>https://stocksharp.com/users/97869/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день&lt;/p&gt;
&lt;p&gt;Наш график позволяет рисовать с высокой производительностью свечные данные и индикаторы. Вы можете попробовать переделать сделки на индикатор, указав свой вариант отрисовки.&lt;/p&gt;
</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/48617/</id>
    <title type="text">Добрый день. При тестировании на исторических данных генерируется много заявок и сделок которые отри...</title>
    <published>2019-10-10T16:51:41Z</published>
    <updated>2019-10-10T16:51:41Z</updated>
    <author>
      <name>Константин</name>
      <uri>https://stocksharp.com/users/98279/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;p&gt;Добрый день. При тестировании на исторических данных генерируется много заявок и сделок которые отрисовываются на графике. Спустя примерно 5-10 секунд после запуска приложение зависает. Если отключить отрисовку заявок и сделок то работает нормально. Использую историю за 1 год, минутные свечи. Есть ли способ оптимизировать работу отрисовки?
Код:
Xaml:&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;Window x:Class=&amp;quot;test.MainWindow&amp;quot;
        xmlns=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;
        xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;
        xmlns:d=&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;
        xmlns:mc=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;
        xmlns:local=&amp;quot;clr-namespace:test&amp;quot;
        xmlns:charting=&amp;quot;http://schemas.stocksharp.com/xaml&amp;quot;
        mc:Ignorable=&amp;quot;d&amp;quot;
        Title=&amp;quot;MainWindow&amp;quot; Height=&amp;quot;450&amp;quot; Width=&amp;quot;800&amp;quot;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;Grid.RowDefinitions&amp;gt;
            &amp;lt;RowDefinition/&amp;gt;
            &amp;lt;RowDefinition Height=&amp;quot;Auto&amp;quot;/&amp;gt;
        &amp;lt;/Grid.RowDefinitions&amp;gt;
        &amp;lt;charting:Chart Name=&amp;quot;Chart&amp;quot; /&amp;gt;
        &amp;lt;Button Content=&amp;quot;Старт&amp;quot; Click=&amp;quot;ButtonBase_OnClick&amp;quot; Grid.Row=&amp;quot;1&amp;quot; Margin=&amp;quot;5&amp;quot;&amp;gt;&amp;lt;/Button&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;C#&lt;/p&gt;
&lt;div class="spoiler"&gt;
&lt;pre&gt;&lt;code&gt;using System;
using System.Linq;
using System.Windows;
using Ecng.Common;
using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Messages;
using StockSharp.Xaml.Charting;
using System.Collections.Generic;
using MoreLinq;
using StockSharp.Algo.Storages;
using StockSharp.Algo.Testing;
namespace test
{
    /// &amp;lt;summary&amp;gt;
    /// Логика взаимодействия для MainWindow.xaml
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window
    {
        private HistoryEmulationConnector _historyEmulationConnector;
        private StorageRegistry _storageRegistry;
        public List&amp;lt;Security&amp;gt; Securities;
        private Str Str;
        public MainWindow()
        {
            InitializeComponent();
            Securities=new List&amp;lt;Security&amp;gt;();
            Str = new Str(Chart);
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            _storageRegistry = new StorageRegistry { DefaultDrive = new LocalMarketDataDrive(@&amp;quot;...&amp;quot;) };//todo Установить путь к истории

            _storageRegistry.DefaultDrive.AvailableSecurities.ForEach(sId =&amp;gt;
            {
                Securities.Add(new Security()
                {
                    Id = sId.SecurityCode + &amp;quot;@&amp;quot; + sId.BoardCode,
                    Code = sId.SecurityCode,
                    Type = sId.SecurityType,
                    Board = ExchangeBoard.Micex,
                    PriceStep = 0.01m
                });
            });

            var portfolio = new Portfolio { Name = &amp;quot;test account&amp;quot;, BeginValue = 1000000 };
            _historyEmulationConnector = new HistoryEmulationConnector(Securities, new[] { portfolio })
            {
                HistoryMessageAdapter =
                {
                    StorageRegistry = _storageRegistry,
                    StartDate = new DateTime(2018, 1, 1, 0, 0, 0),
                    StopDate = new DateTime(2019, 9, 20, 0, 0, 0),
                },
            };

            Str.Security = Securities[0];//todo Установить инструмент из истории
            Str.Portfolio = portfolio;
            Str.Connector = _historyEmulationConnector;
            Str.Volume = 1;

            _historyEmulationConnector.Connected += () =&amp;gt; { Str.Start(); _historyEmulationConnector.Start(); };
            _historyEmulationConnector.Connect();
        }
    }





    class Str : Strategy
    {
        private SimpleMovingAverage LongSma { get; set; }
        private SimpleMovingAverage ShortSma { get; set; }
        private CandleSeries CandleSeries { get; set; }
        private ChartCandleElement ChartCandleElement { get; set; }
        private ChartIndicatorElement LongElement { get; set; }
        public ChartIndicatorElement ShortElement { get; set; }
        private ChartOrderElement _chartOrderElement;
        private ChartTradeElement _chartTradeElement;
        private bool _isShortLessPrev;
        private Chart Chart { get; set; }
        public Str(Chart chart)
        {
            Chart = chart;
            LongSma = new SimpleMovingAverage(){Length = 8};
            ShortSma = new SimpleMovingAverage(){Length = 4};
            _chartOrderElement = new ChartOrderElement(){Title = &amp;quot;Ордеры&amp;quot;};
            _chartTradeElement = new ChartTradeElement(){Title = &amp;quot;Сделки&amp;quot;};
            ChartCandleElement = new ChartCandleElement(){Title = &amp;quot;Свечи&amp;quot;};
            LongElement = new ChartIndicatorElement(){Title = LongSma.ToString()};
            ShortElement = new ChartIndicatorElement(){Title = ShortSma.ToString()};
            Chart.Areas.Add(new ChartArea() { Elements = { ChartCandleElement, LongElement, ShortElement, _chartTradeElement, _chartOrderElement } });

            NewMyTrade += trade =&amp;gt;
            {
                var chartDrawData = new ChartDrawData();
                var chartDrawDataItem = chartDrawData.Group(trade.Trade.Time);
                chartDrawDataItem.Add(_chartTradeElement, trade);
                Chart.Draw(chartDrawData);
            };
            OrderRegistered += order =&amp;gt;
            {
                var chartDrawData = new ChartDrawData();
                var chartDrawDataItem = chartDrawData.Group(order.Time);
                chartDrawDataItem.Add(_chartOrderElement, order);
                Chart.Draw(chartDrawData);

            };
        }

        protected override void OnStarted()
        {
            CandleSeries = new CandleSeries(typeof(TimeFrameCandle), Security, TimeSpan.FromMinutes(1));
            ((Connector) Connector).CandleSeriesProcessing += CandleManager_Processing;
            if (!((Connector)Connector).SubscribedCandleSeries.Contains(CandleSeries))
                ((Connector)Connector).SubscribeCandles(CandleSeries);
            base.OnStarted();
        }

        private void CandleManager_Processing(CandleSeries candleSeries, Candle candle)
        {
            if (candle.State != CandleStates.Finished) return;
            var ls = LongSma.Process(candle);
            var ss = ShortSma.Process(candle);

            if (LongSma.IsFormed &amp;amp;&amp;amp; LongSma.IsFormed)
            {
                var isShortLessCurrent = ShortSma.GetCurrentValue() &amp;lt; LongSma.GetCurrentValue();

                if (isShortLessCurrent != _isShortLessPrev)
                {
                        var order = new Order()
                        {
                            Type = OrderTypes.Limit,
                            Direction = isShortLessCurrent ? Sides.Sell : Sides.Buy,
                            Price = candle.ClosePrice,
                            Portfolio = Portfolio,
                            Volume = Position != 0 ? Volume * 2 : Volume,
                            Security = Security
                        };
                        RegisterOrder(order);
                }
                _isShortLessPrev = isShortLessCurrent;
            }
            var chartDrawData = new ChartDrawData();
            var chartDrawDataItem = chartDrawData.Group(candle.OpenTime);
            chartDrawDataItem.Add(ChartCandleElement, candle);
            chartDrawDataItem.Add(ShortElement, ss);
            chartDrawDataItem.Add(LongElement, ls);
            Chart.Draw(chartDrawData);
        }

    }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>