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