﻿<?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">whenmarketdepthchanged. StockSharp</title>
  <id>https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=whenmarketdepthchanged&amp;type=community</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-14T14:36:46Z</updated>
  <logo>https://stocksharp.ru/images/logo.png</logo>
  <link href="https://stocksharp.ru/handlers/atom.ashx?category=tag&amp;id=whenmarketdepthchanged&amp;type=community" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.ru/topic/11949/</id>
    <title type="text">WhenMarketDepthChanged() не работает при открытом стакане</title>
    <published>2020-06-17T16:49:06Z</published>
    <updated>2020-12-09T12:48:46Z</updated>
    <author>
      <name>Алексей</name>
      <uri>https://stocksharp.ru/users/99809/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="Quik" />
    <category term="WhenMarketDepthChanged" />
    <content type="html">Если в момент подписки SubscribeMarketDepth или WhenMarketDepthChanged в Квике открыт стакан по инструменту и он выделен в таблице &amp;quot;Текущие торги&amp;quot;, то событие MarketDepthChanged не приходит вообще, а событие MarketDepthReceived приходит только один раз.&lt;br /&gt;ТехПоддержка есть что сказать? &lt;br /&gt;&lt;br /&gt;S#5, Quik8&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>https://stocksharp.ru/topic/11993/</id>
    <title type="text">Как настроить HistoryEmulationConnector, чтобы изменить частоту появления QuoteChangeMessage сообщений (connector.NewMessage)</title>
    <published>2020-07-17T19:44:53Z</published>
    <updated>2020-07-17T20:46:36Z</updated>
    <author>
      <name>Дмитрий_</name>
      <uri>https://stocksharp.ru/users/62269/</uri>
      <email>info@stocksharp.ru</email>
    </author>
    <category term="WhenMarketDepthChanged" />
    <category term="QuoteChangeMessage" />
    <content type="html">Добрый день&lt;br /&gt;&lt;br /&gt;Имею исторические данные (сделки - trades.bin). Для тестирования стратегии нужен стакан, поэтому для его генерации использую connector.RegisterMarketDepth(new TrendMarketDepthGenerator(connector.GetSecurityId(security)).&lt;br /&gt;&lt;br /&gt;У HistoryEmulationConnector QuoteChangeMessage (так же правило this.Security.WhenMarketDepthChanged в стратегии) приходит раз минуту.&lt;br /&gt;Пробовал менять:&lt;br /&gt;1) &lt;br /&gt;connector  = new HistoryEmulationConnector(secProvider, new[] { portfolio })&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;HistoryMessageAdapter =&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;MarketTimeChangedInterval = TimeSpan.FromSeconds(1)&lt;br /&gt;},&lt;br /&gt;MarketTimeChangedInterval = TimeSpan.FromSeconds(1),&lt;br /&gt;}&lt;br /&gt;2) &lt;br /&gt;connector.RegisterMarketDepth(new TrendMarketDepthGenerator(connector.GetSecurityId(security))&lt;br /&gt;{&lt;br /&gt;Interval = TimeSpan.FromSeconds(1),&lt;br /&gt;GenerateDepthOnEachTrade = true&lt;br /&gt;}&lt;br /&gt;Изменение стакана всё равно происходит раз в минуту.&lt;br /&gt;&lt;br /&gt;Как настроить HistoryEmulationConnector, чтобы изменить частоту появления QuoteChangeMessage сообщений (connector.NewMessage и this.Security.WhenMarketDepthChanged в стратегии) и изменять стакан с приходом сделки (GenerateDepthOnEachTrade = true)?&lt;br /&gt;&lt;br /&gt;Код создан на основе проекта SampleHistoryTesting. &lt;a target="_blank" href="https://stocksharp.ru/file/115117/HistoryTest.zip" title="https://stocksharp.ru/file/115117/HistoryTest.zip"&gt;HistoryTest.zip&lt;/a&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_cdb1503fb66b42048caa097c5cc056e1');" title='Показать спойлер' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_cdb1503fb66b42048caa097c5cc056e1' style='display:none'&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            Console.ForegroundColor = ConsoleColor.Black;&lt;br /&gt;&lt;br /&gt;            var exchangeInfoProvider = new InMemoryExchangeInfoProvider();&lt;br /&gt;&lt;br /&gt;            var idStr = &amp;quot;SBER@TQBR&amp;quot;;&lt;br /&gt;            var id = idStr.ToSecurityId();&lt;br /&gt;            var secCode = id.SecurityCode;&lt;br /&gt;            var board = exchangeInfoProvider.GetOrCreateBoard(id.BoardCode);&lt;br /&gt;&lt;br /&gt;            var security = new Security&lt;br /&gt;            {&lt;br /&gt;                Id = &amp;quot;SBER@TQBR&amp;quot;,&lt;br /&gt;                Code = secCode,&lt;br /&gt;                Board = board,&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            var storageRegistry = new StorageRegistry&lt;br /&gt;            {&lt;br /&gt;                DefaultDrive = new LocalMarketDataDrive(@&amp;quot;H:\rep\History\MarketData&amp;quot;)&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            var startTime = (new DateTime(2020, 2, 1)).UtcKind();&lt;br /&gt;            var stopTime = (new DateTime(2020, 2, 5)).UtcKind();&lt;br /&gt;&lt;br /&gt;            var portfolio = Portfolio.CreateSimulator();&lt;br /&gt;            var secProvider = (ISecurityProvider)new CollectionSecurityProvider(new[] { security });&lt;br /&gt;&lt;br /&gt;            var connector = new HistoryEmulationConnector(secProvider, new[] { portfolio })&lt;br /&gt;            {&lt;br /&gt;                EmulationAdapter =&lt;br /&gt;                {&lt;br /&gt;                    Settings =&lt;br /&gt;                    {&lt;br /&gt;                        MatchOnTouch = false,&lt;br /&gt;                    },&lt;br /&gt;                },&lt;br /&gt;                HistoryMessageAdapter =&lt;br /&gt;                {&lt;br /&gt;                    StorageRegistry = storageRegistry,&lt;br /&gt;                    MarketTimeChangedInterval = TimeSpan.FromSeconds(1)&lt;br /&gt;                },&lt;br /&gt;                MarketTimeChangedInterval = TimeSpan.FromSeconds(1),&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            var series = new CandleSeries(typeof(TimeFrameCandle), security, TimeSpan.FromHours(1))&lt;br /&gt;            {&lt;br /&gt;                BuildCandlesMode = MarketDataBuildModes.Build,&lt;br /&gt;                BuildCandlesFrom2 = null,&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            var strategy = new SmaStrategy(series)&lt;br /&gt;            {&lt;br /&gt;                Volume = 1,&lt;br /&gt;                Portfolio = portfolio,&lt;br /&gt;                Security = security,&lt;br /&gt;                Connector = connector,&lt;br /&gt;                LogLevel = LogLevels.Info,&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            connector.HistoryMessageAdapter.StartDate = startTime;&lt;br /&gt;            connector.HistoryMessageAdapter.StopDate = stopTime;&lt;br /&gt;&lt;br /&gt;            connector.SecurityReceived += (subscr, s) =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                connector.SubscribeMarketDepth(security);&lt;br /&gt;                connector.RegisterMarketDepth(new TrendMarketDepthGenerator(connector.GetSecurityId(security))&lt;br /&gt;                {&lt;br /&gt;                    Interval = TimeSpan.FromSeconds(1),&lt;br /&gt;                    MaxAsksDepth = 10,&lt;br /&gt;                    MaxBidsDepth = 10,&lt;br /&gt;                    UseTradeVolume = true,&lt;br /&gt;                    MaxVolume = 1000,&lt;br /&gt;                    MinSpreadStepCount = 2, &lt;br /&gt;                    MaxSpreadStepCount = 5, &lt;br /&gt;                    MaxPriceStepCount = 3,&lt;br /&gt;                    GenerateDepthOnEachTrade = true&lt;br /&gt;                });&lt;br /&gt;                strategy.Start();&lt;br /&gt;                connector.Start();&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            connector.NewMessage += message =&amp;gt;&lt;br /&gt;            {&lt;br /&gt;                if (message is QuoteChangeMessage quoteMsg)&lt;br /&gt;                {&lt;br /&gt;                    Console.BackgroundColor = ConsoleColor.Cyan;&lt;br /&gt;                    Console.WriteLine(quoteMsg);&lt;br /&gt;                }&lt;br /&gt;            };&lt;br /&gt;&lt;br /&gt;            connector.Connect();&lt;br /&gt;&lt;br /&gt;            Console.ReadLine();&lt;br /&gt;        }&lt;/div&gt;</content>
  </entry>
</feed>