﻿<?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">Урок 2. Не могу получить стакан (BlackWood/Fusion)</title>
  <id>~/topic/4284/urok-2_-ne-mogu-poluchit-stakan-(blackwoodfusion)/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-30T05:40:54Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=4284" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/29132/</id>
    <title type="text">Добрый день. Иван, уже подписался, помимо этого момента, есть ещё вопросы с реализацией через Блекву...</title>
    <published>2014-01-18T13:02:04Z</published>
    <updated>2014-01-18T13:02:04Z</updated>
    <author>
      <name>SlashHammer</name>
      <uri>https://stocksharp.com/users/50360/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Добрый день. Иван, уже подписался, помимо этого момента, есть ещё вопросы с реализацией через Блеквуд.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29127/</id>
    <title type="text">SlashHammer, Думаю лучше провести консультацию, чтобы дать исчерпывающие ответы.</title>
    <published>2014-01-18T03:40:49Z</published>
    <updated>2014-01-18T03:40:49Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.com/users/26984/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">SlashHammer, Думаю лучше провести консультацию, чтобы дать исчерпывающие ответы.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29106/</id>
    <title type="text">Всем привет, прошу сильно не пинать, только месяц как учу C# и неделю S#. Пытаюсь получить стакан ка...</title>
    <published>2014-01-16T22:16:48Z</published>
    <updated>2014-01-17T12:32:32Z</updated>
    <author>
      <name>SlashHammer</name>
      <uri>https://stocksharp.com/users/50360/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Всем привет, прошу сильно не пинать, только месяц как учу C# и неделю S#.&lt;br /&gt;Пытаюсь получить стакан  как в уроке №2, но через коннектор BlackWood.&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

_timer = ThreadingHelper.Timer(()=&amp;gt;this.GuiAsync(() =&amp;gt;
{
    Quotes.Clear();
    MarketDepth marketDepth = ConnectorInterFace.SafeConnection.Trader.GetMarketDepth(selectedSecurity);
    Debug.WriteLine(&amp;quot;СТАКАН &amp;quot;+marketDepth.Security.Code +&amp;quot; Котировок в стакане: &amp;quot;+marketDepth.Count);
    //Quotes.AddRange(marketDepth.Select(q=&amp;gt;new QuoteSample(q)));
}))
    .Interval(TimeSpan.FromSeconds(1));
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Предварительно зарегистрировав и подписавшись:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

ConnectorInterFace.SafeConnection.Trader.RegisterMarketDepth(ConnectorInterFace.SelectedSecurity);

ConnectorInterFace.SafeConnection.Trader.MarketDepthsChanged += (l2S) =&amp;gt;
{
    foreach (var l2 in l2S)
       Debug.WriteLine(&amp;quot;Стакан: &amp;quot; + l2.Security.Code + &amp;quot; изменился!&amp;quot;);
};
ConnectorInterFace.SafeConnection.Trader.NewMarketDepths += l2S =&amp;gt;  
{
    foreach (var l2 in l2S)
       Debug.WriteLine(&amp;quot;Новый стакан по&amp;quot; + l2.Security.Code);
};
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Но в полученом стакане заполнено только свойство Security, никаких котировок и объёмов нет. В дебаг ничего не пишется (кроме &amp;quot;СТАКАН SPY Котировок в стакане 0&amp;quot;). Подскажите, на что ещё надо подписатся, или зарегистрировать чтобы получить этот стакан?&lt;br /&gt;P.S. С раскомментированной строкой создания объекта QuoteSample и отправкой его в ЛистБокс через Quotes тоже ничего не получается.&lt;br /&gt;Спасибо.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29114/</id>
    <title type="text">Немного упрощу вопрос. Написал консольный вариант получения стакана. Что в коде не так, да и вопросы...</title>
    <published>2014-01-17T10:21:08Z</published>
    <updated>2014-01-17T10:21:08Z</updated>
    <author>
      <name>SlashHammer</name>
      <uri>https://stocksharp.com/users/50360/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Немного упрощу вопрос. Написал консольный вариант получения стакана. Что в коде не так, да и вопросы некоторые в комментариях нуждаются в ответах.&lt;br /&gt;Код:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using StockSharp.Blackwood;
using StockSharp.BusinessEntities;

namespace GetMarketDepth
{
    class Program
    {
        static void Main(string[] args)
        {
            //Объект BlackWood для подключения и работы
            var trader = new BlackwoodTrader()
            {
                Login = &amp;quot;**********&amp;quot;,
                Password = &amp;quot;**********&amp;quot;,
                ExecutionAddress = new IPEndPoint(BlackwoodAddresses.WetBush, BlackwoodAddresses.ExecutionPort),
                MarketDataAddress = new IPEndPoint(BlackwoodAddresses.WetBush, BlackwoodAddresses.MarketDataPort),
                HistoricalDataAddress = new IPEndPoint(BlackwoodAddresses.WetBush, BlackwoodAddresses.HistoricalDataPort)
            };
            //Коллекция стаканов
            var l2List = new List&amp;lt;MarketDepth&amp;gt;(); 

            //Старт экспорта, непонятно нужен ли, зачем нужен и что делает?
            //без StartExport всё равно NewSecurities срабатывает!!!
            trader.Connected += () =&amp;gt;
            {
                Console.WriteLine(&amp;quot;Подключились!&amp;quot;);
                try
                {
                    trader.StartExport();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(&amp;quot;Ошибка экспорта \n{0}&amp;quot;,ex.Message);
                }
                
            };

            trader.ConnectionError += err =&amp;gt; Console.WriteLine(&amp;quot;Ошибка подключения \n{0}&amp;quot;, err.Message);

            //Подписываюсь на получение новых инструментов, непонятно нужно ли, главное - зачем оно вообще???
            trader.NewSecurities += secursList =&amp;gt;
            {
                foreach (var security in secursList)
                    //Зарегистрировать стаканы для первых десяти тикеров пришедших с сервера
                    if (trader.RegisteredMarketDepths.Count() &amp;lt; 10)
                    {
                        //регистрация
                        trader.RegisterMarketDepth(security);
                        Console.WriteLine(&amp;quot;Подписка на стакан, тикер: {0}&amp;quot;, security.Code);
                        //заполняю коллекцию стаканов
                        l2List.Add(trader.GetMarketDepth(security));

                    }
            };

            //Пописываюсь на изменение зарегистрированных стаканов (10шт)
            trader.MarketDepthsChanged += MDeps =&amp;gt;
            {
                foreach (var mD in MDeps)
                {
                    Console.WriteLine(&amp;quot;Стакан по {0} изменился в {1}. Латентность: {2}&amp;quot;,
                        mD.Security.Code,mD.LastChangeTime.TimeOfDay.ToString(),mD.Latency.ToString());
                    //Ищу в коллекции стаканы с тем же тикером что и стакан, вызвавший это событие
                    //и перезаписываю найденые стаканы
                    for (var i = 0; i &amp;lt; l2List.Count; i++)
                        if (l2List[i].Security.Code == mD.Security.Code)
                            l2List.Insert(i, mD);
                }
            };

            //Событие MarketDepthsChanged не происходит никогда!!!

            trader.Connect();

            Console.ReadLine();

            //Когда надоест сидеть и ждать срабатывание события MarketDepthsChanged
            //жмём ENTER и смотрим что у нас в коллекции стаканов полученной
            //методом GetMarketDepth(security)

            foreach (var l2 in l2List)
            {
                Console.WriteLine(&amp;quot;Стакан {0}, котир. в стакане: {1}, лучшая пара: {2}, время изм.: {3}&amp;quot;,
                    l2.Security.Code,l2.Count,l2.BestPair,l2.LastChangeTime.TimeOfDay);
            }

            Console.ReadLine();
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Ждал события MarketDepthsChanged минут двадцать:&lt;br /&gt;&lt;a href='http://content.screencast.com/users/SlashHammer/folders/Snagit/media/5fb42ac0-8b86-4e97-a696-215a8eb3b69d/01.17.2014-12.07.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="http://content.screencast.com/users/SlashHammer/folders/Snagit/media/5fb42ac0-8b86-4e97-a696-215a8eb3b69d/01.17.2014-12.07.png" style='max-width: 600px;' alt=""/&gt;&lt;/a&gt;&lt;br /&gt;...потом жмакнул ENTER и пронаблюдал пустые стаканы&lt;br /&gt;&lt;a href='http://content.screencast.com/users/SlashHammer/folders/Snagit/media/831b0d3e-4a05-45af-afa7-1db02d6dd837/01.17.2014-12.09.png' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'&gt;&lt;img src="http://content.screencast.com/users/SlashHammer/folders/Snagit/media/831b0d3e-4a05-45af-afa7-1db02d6dd837/01.17.2014-12.09.png" style='max-width: 600px;' alt=""/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Дополнительный вопрос(нигде об этом не сказано), какие поля у объекта Security должны быть заполнены, чтобы его можно было использовать, скажем, в методе RegisterTrades(&amp;lt;Security&amp;gt;), и каким методом потом получить остальные недостающие свойства этого объекта (Бид, Аск и т.д.)&lt;br /&gt;&lt;br /&gt;Извините за может глупые вопросы, но в таком очень скудном описании API нет ни примеров, ни даже толкового описания большинства свойств и методов. Не очень то всё это смахивает на &amp;quot;для непрограммистов&amp;quot;. [bored] </content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>