﻿<?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">4.2.2.1 График</title>
  <id>~/topic/4263/4_2_2_1-grafik/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-12T03:06:04Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=topic&amp;id=4263" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/posts/m/29089/</id>
    <title type="text">Прошу ответить на вопрос . вот еще одна ветка на ту же тему http://stocksharp.com/forum/4278/Kak-v-S...</title>
    <published>2014-01-16T09:40:13Z</published>
    <updated>2016-08-16T00:16:23Z</updated>
    <author>
      <name>longtrades</name>
      <uri>https://stocksharp.ru/users/6094/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Прошу ответить на вопрос .&lt;br /&gt; вот еще одна ветка на ту же тему &lt;a href="http://stocksharp.com/forum/4278/Kak-v-SciChart-vstavit--ghorizontal-nyi-ScrollBar/" title="http://stocksharp.com/forum/4278/Kak-v-SciChart-vstavit--ghorizontal-nyi-ScrollBar/"&gt;http://stocksharp.com/fo...orizontal-nyi-ScrollBar/&lt;/a&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29024/</id>
    <title type="text">Пробовал по разному, сначала оси X, Y, просто свечи отрисовал. Потом добавил ось Y, получилось одна ...</title>
    <published>2014-01-13T16:08:18Z</published>
    <updated>2016-08-16T00:16:18Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.ru/users/6502/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Пробовал по разному, сначала оси X, Y, просто свечи отрисовал. Потом добавил ось Y, получилось одна ось X и 2 оси Y, ортисовал свечи и график объема относительно общей оси X, и разных осей Y. В варианте, что приложен, там создано 2 оси X и 2 оси Y, но это я уже неудачно пытался добавить &amp;quot;Отображение объема в виде профиля&amp;quot;, как у вас написано в &lt;a href="http://www.stocksharp.com/forum/4139/S--API-4-2/. " title="http://www.stocksharp.com/forum/4139/S--API-4-2/. "&gt;http://www.stocksharp.com/forum/4139/S--API-4-2/. &lt;/a&gt;Но во всех случаях масштабирование работает не так как хотелось бы. Попробовал еще на SampleCandles ничего не менял, проблема та же. Приложенный проект дает вот такую картинку.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29091/</id>
    <title type="text">Проблема изучается, как что-то прояснится, сразу ответим.</title>
    <published>2014-01-16T12:45:22Z</published>
    <updated>2014-01-16T12:45:22Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.ru/users/5990/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Проблема изучается, как что-то прояснится, сразу ответим.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29018/</id>
    <title type="text">Какие оси при этом есть на графике?</title>
    <published>2014-01-13T15:02:59Z</published>
    <updated>2014-01-13T15:02:59Z</updated>
    <author>
      <name>esper</name>
      <uri>https://stocksharp.ru/users/5990/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Какие оси при этом есть на графике?</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.ru/posts/m/29009/</id>
    <title type="text">Решил перевести свой тестер на 4.2.2.1 до этого сидел на 4.1.19. И наткнулся на проблемы прорисовки ...</title>
    <published>2014-01-13T09:58:27Z</published>
    <updated>2014-01-13T09:58:27Z</updated>
    <author>
      <name>Иван З.</name>
      <uri>https://stocksharp.ru/users/6502/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <content type="html">Решил перевести свой тестер на 4.2.2.1 до этого сидел на 4.1.19. И наткнулся на проблемы прорисовки графика. Может логика так изменилась, и я сообразить не могу. Либо баг.&lt;br /&gt;Свечи на график выводит, сделки тоже выводит(порадовало что теперь не надо разницу во времени настраивать, за что отдельное спасибо), вторая ось Y тоже работает.&lt;br /&gt;Не работает следующее &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
CandleChart.IsAutoScroll = true;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Выдает 2 свечки, крутишь колесо мыши ноль реакции. Жмешь двойным щелчком, выдает те что успел нарисовать, крутишь колесо мыши начинает масштабировать, увеличивает, уменьшает. Но увеличив до нужного масштаба прокрутить график нельзя, на 4.1.19 можно было захватить кнопкой мыши влево вправо прокрутить. Еще на 4.1.19 можно было колесом мыши уменьшить масштаб до того момента когда на графике видишь все свечи, да еще кусок пустого места который потихоньку заполняется вновь поступившими свечами. А сейчас даже если знаешь, что есть новые свечи, то прокруткой колеса мыши их не достать, только двойным щелчком. По поводу IsAutoScroll можно сделать вот так &lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;
main.XAxises[0].AutoRange = true;&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Но тогда график заполняется свечами, и никакое масштабирование не работает. В итоге на графике все свечи и ни чего не видно. &lt;br /&gt;&lt;br /&gt;Еще пробовал Отображение объема в виде профиля. Не понял как график вывести. Подскажите как?&lt;br /&gt;&lt;br /&gt;Обрезал как мог SampleHistoryTesting и на нем экспериментировал. Вот код, если что не так делал подскажите.&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_4d215b9b685e417c97863fd9f2b73086');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_4d215b9b685e417c97863fd9f2b73086' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Код&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

using StockSharp.Algo.Indicators;
using StockSharp.Algo.Indicators.Misc;
using System;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using System.Collections.Generic;

using Ecng.Xaml;
using Ecng.Collections;

using StockSharp.Algo;
using StockSharp.Algo.Candles;
using StockSharp.Algo.Storages;
using StockSharp.Algo.Testing;
using StockSharp.Algo.Indicators.Trend;
using StockSharp.BusinessEntities;
using StockSharp.Xaml.Charting;
using StockSharp.Xaml.Charting.IndicatorPainters;

namespace SampleHistoryTesting
{
    public partial class MainWindow
    {
        private ChartCandleElement _candlesElem;
        private ChartTradeElement _tradeElement;    
        private ChartIndicatorElement _volumeElement;
        private ChartIndicatorElement el; 
        private readonly ChartArea main;
        private DateTime _startEmulationTime;
        public MainWindow()
        {
            InitializeComponent();
            main = new ChartArea()
            {
                YAxises =
                {
                    new ChartAxis
                    {
                        Id = &amp;quot;Y2&amp;quot;,
                        AxisType = ChartAxisType.Numeric,
                        AxisAlignment = ChartAxisAlignment.Left,
                        Group = &amp;quot;G1&amp;quot;,
                        AutoRange = true,
                    }
                },
                XAxises =
                {
                    new ChartAxis
                    {
                        Id = &amp;quot;X2&amp;quot;,
                        Group = &amp;quot;G1&amp;quot;,
                        AutoRange = true,
                        AxisType = ChartAxisType.Numeric,
                        AxisAlignment = ChartAxisAlignment.Top,
                        FlipCoordinates = true,
                        DrawMajorGridLines = false,
                        DrawMajorTicks = false,
                        DrawMinorGridLines = false,
                        DrawMinorTicks = false,
                        DrwaLables = false
                    }
                },
                
            };
            CandleChart.Areas.Add(main);
            _candlesElem = new ChartCandleElement();
            _tradeElement = new ChartTradeElement();
            _volumeElement = new ChartIndicatorElement
            {
                Color = Colors.DarkRed,
                IsLegend = true,
                Indicator = new VolumeIndicator(),
                Title = &amp;quot;Volume&amp;quot;,
                YAxisId = &amp;quot;Y2&amp;quot;,
            };
            el = new ChartIndicatorElement
            {
                Color = Colors.Red,
                IsLegend = true,
                Indicator = new VolumeProfileIndicator {UseTotalVolume = true, Step = 5, },
                Title = &amp;quot;VolumeProfile&amp;quot;,
                DrawStyle = ChartIndicatorDrawStyles.StackedBar,
                StrokeThickness = 3,
                IndicatorPainter = new VolumeProfilePainter(),
                YAxisId = &amp;quot;Y2&amp;quot;,
                XAxisId = &amp;quot;X2&amp;quot;,
            };

            CandleChart.IsAutoScroll = true;
            main.XAxises[0].AutoRange = true;

            main.Elements.Add(_candlesElem);
            main.Elements.Add(_tradeElement);
            main.Elements.Add(_volumeElement);
            main.Elements.Add(el);
        }


        private void StartBtnClick(object sender, RoutedEventArgs e)
        {
            var path = @&amp;quot;f:\History\&amp;quot;;
            var timeFrame = TimeSpan.FromMinutes(5);
            var security = new Security
            {
                //Id = &amp;quot;RIZ2@FORTS&amp;quot;, // по идентификатору инструмента будет искаться папка с историческими маркет данными
                //Code = &amp;quot;RIZ2&amp;quot;,
                Name = &amp;quot;RTS-12.12&amp;quot;,
                Id = &amp;quot;SPFB.RTS@FORTS&amp;quot;,
                Code = &amp;quot;SPFB.RTS&amp;quot;,
                Class = &amp;quot;SPFB&amp;quot;,
                
                MinStepSize = 10,
                MinStepPrice = 2,
                MinPrice = 10,
                MaxPrice = 1000000,
                MarginBuy = 10000, // задаем ГО
                MarginSell = 10000,
                ExchangeBoard = ExchangeBoard.Forts,
            };
            // тестовый портфель
            var portfolio = new Portfolio
            {
                Name = &amp;quot;test account&amp;quot;,
                BeginValue = 1000000,
            };
            // хранилище, через которое будет производиться доступ к тиковой и котировочной базе
            /*-------------- Хранилище-------------------------------------*/
            var storageRegistry = new StorageRegistry();
                // Добавление в источник свечек TimeFrameCandleBuilder источник данных в виде файлов гидры 
            ((LocalMarketDataDrive) storageRegistry.DefaultDrive).Path = path;

            var startTime = new DateTime(2013, 1, 1);
            var stopTime = new DateTime(2013, 1, 30);

            // создаем шлюз для эмуляции
            // инициализируем настройки (инструмент в истории обновляется раз в секунду)
            var trader = new HistoryEmulationTrader(new[] {security}, new[] {portfolio})
            {
                StorageRegistry = storageRegistry,
                MarketEmulator =
                {
                    Settings =
                    {
                        // использовать стаканы
                        UseMarketDepth = true,
                        // использовать свечки
                        UseCandlesTimeFrame = TimeSpan.FromMinutes(5),
                        // проверка что стаканы соответствуют сделкам. Улучшает реалистичность тестирования.
                        SyncDepthToTrades = true,
                        // сведение сделки в эмуляторе если цена коснулась нашей лимитной заявки. 
                        // Если выключено - требуется &amp;quot;прохождение цены сквозь уровень&amp;quot;
                        // (более &amp;quot;суровый&amp;quot; режим тестирования.)
                        FillOnTouch = false,
                    }
                }
            };

            ((MessageAdapter) trader.MarketDataAdapter).MarketTimeChangedInterval = timeFrame;
            trader.RegisterMarketDepth(new TrendMarketDepthGenerator(trader.GetSecurityId(security)));
            trader.Connect();
            trader.StartExport();

            var candleManager = new CandleManager(trader);
            var series = new CandleSeries(typeof (TimeFrameCandle), security, timeFrame);

            // создаем торговую стратегию, скользящие средние на 80 5-минуток и 10 5-минуток
            var strategy = new SmaStrategy(series, new SimpleMovingAverage {Length = 80},
                new SimpleMovingAverage {Length = 10})
            {
                Volume = 1,
                Portfolio = portfolio,
                Security = security,
                Trader = trader,
            };


            // копируем параметры на визуальную панель
            ParameterGrid.Parameters.Clear();
            ParameterGrid.Parameters.AddRange(strategy.StatisticManager.Parameters);

            // и подписываемся на событие изменения времени, чтобы обновить ProgressBar
            trader.MarketTimeChanged += a =&amp;gt;
            {
                var aa = a;
            };
            trader.NewMyTrades += (trade) =&amp;gt;
            {
                var t = timeFrame.GetCandleBounds(trade.Last().Trade.Time).Min;
                this.GuiAsync(() =&amp;gt;CandleChart.ProcessValues(t,new Dictionary&amp;lt;IChartElement, object&amp;gt;{{_tradeElement, trade.Last()},}));
            };
            candleManager.Processing += (send, candle) =&amp;gt;
            {
                var vol1 = new ChartIndicatorValue(_volumeElement.Indicator, candle.TotalVolume) { IsFormed = true };
                var vol2 = new VolumeProfileIndicatorValue();



                if (candle.State == CandleStates.Finished)
                {
                    this.GuiAsync(() =&amp;gt; CandleChart.ProcessValues(candle.OpenTime, new Dictionary&amp;lt;IChartElement, object&amp;gt;
                    {
                        {_candlesElem, candle},
                        {_volumeElement, vol1},
                       // {el,vol2}
                    }));
                }
            };
            candleManager.ProcessDataError += (a) =&amp;gt;
            {
                var aa = a;
            };
            candleManager.Stopped += (a) =&amp;gt;
            {
                var aa = a;
            };
            candleManager.Log += (a) =&amp;gt;
            {
                var aa = a;
            };
            trader.StateChanged += (oldState, newState) =&amp;gt;
            {
                if (trader.State == EmulationStates.Started)
                {
                    // запускаем стратегию когда эмулятор запустился
                    strategy.Start();
                    candleManager.Start(series);
                }
            };
            trader.ExportStarted += () =&amp;gt;
            {
               // strategy.Start();
               // candleManager.Start(series);
            };
            // запускаем эмуляцию
            // указываем даты начала и конца тестирования
            trader.Start(startTime, stopTime);
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Еще проект прикрепляю.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>