← Zurück

общий объем по бидам

Объясните пожалуйста, как получить общий объем из стакана.

  1. нужно создать стакан? - как правильно его создать?

_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future); var stakan = MarketDepth(_lkoh); так ошибка, пробовал по разному..

  1. в консольном примере для смарт добавьте ввод ip'а, тк из-за этого я долго думал, почему он не коннектится..

Console.Write("Введите ip адрес торгового сервера: "); var ipv = Console.ReadLine();

            IPAddress ipadress = IPAddress.Parse(ipv);
            IPEndPoint ip = new IPEndPoint(ipadress, 8090);

  		using (var waitHandle = new AutoResetEvent(false))
  		{
  			// создаем шлюз к Smart-у
  			using (var trader = new SmartTrader(login, password, ip))

War dieses Thema hilfreich?

Thema teilen

Kommentare (10)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

tmt
tmt Autor

насколько я понял из примера для смарт, то стакан мы вызываем вот так

_lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future); затем мы берем лучшую пару котировок var firstMid = _lkoh.BestPair.SpreadPrice / 2;

судя по всему чтобы показать общий объем бид.. надо как то вот так..

var firstMid = _lkoh.TotalBidsVolume; ведь надо же еще что то передавать (public decimal TotalBidsVolume { get; }) но вот мне пишет

Ошибка 1 "StockSharp.BusinessEntities.Security" не содержит определения для "TotalBidsVolume" и не был найден метод расширения "TotalBidsVolume", принимающий тип "StockSharp.BusinessEntities.Security" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку) C:\Users\user\Desktop\StockSharp_4.0.14\Samples\Smart\SampleSmartConsole\Program.cs 138 46 SampleSmartConsole

подскажите пожалуйста

BigBen
BigBen

Для работы со стаканом в S# есть класс MarketDepth. У него есть свойства TotalBidsVolume (Получить общий объем по бидам) и TotalAsksVolume (Получить общий объем по офферам) - вот здесь и нужно копать.

tmt
tmt Autor

ну это понятно, но как? ведь если рассуждать отсюда http://www.stocksharp.com/doc/html/Properties_T_StockSharp_BusinessEntities_MarketDepth.htm , то BestPair тоже имеет класс MarketDepth (и я имею пример с этим BestPair, а как от него сделать TotalBidsVolume)

BigBen
BigBen

Примером, как я понимаю, является SampleSmartConsole. var firstMid = _lkoh.BestPair.SpreadPrice / 2; - здесь BestPair является свойством класса Security, экземпляр которого _lkoh имеет код = "LKOH". В данном примере класс MarketDepth не используется.

tmt
tmt Autor

а не мог бы подсказать пример где используется этот класс?

fau
fau

tmt: а не мог бы подсказать пример где используется этот класс? поиск по форуму?

BigBen
BigBen

Для SmartCOM стакан используется в примере SampleSmart.

BigBen
BigBen

Посмотри в примере для Quik http://stocksharp.com/doc/html/b6fea084-f43c-4eb7-ab63-ad3031d748a5.htm

tmt
tmt Autor

вобщем ошибок у меня больше не вылазиет. но вот программа не работает.. вся загвоздка с тем же.. добавил > private static MarketDepth _depth; и> // подписываемся на событие обновления стакана

                    trader.QuotesChanged += depths =>
                    {
                        if (_depth == null && _instrument != null)
                        {
                            _depth = depths.FirstOrDefault(d => d.Security == _instrument);

                            if (_depth != null)
                            {
                                Console.WriteLine("Стакан появился.");

                                if (_portfolio != null)
                                   waitHandle.Set();
                            }
                        }
                    };

ну и программа не идет дальше, тк depth у меня равное null остается

namespace SampleSmartConsole { using System; using System.Net; using System.Linq; using System.Threading;

using Ecng.Collections; using Ecng.Common;

using StockSharp.BusinessEntities; using StockSharp.Smart; using StockSharp.Algo;

class Program { private static Security _instrument; private static Portfolio _portfolio; private static MarketDepth _depth;

  static void Main()
  {
  	try
  	{
  		// для теста выбираем бумагу
  		const string secCode = "RIH2";

  		//Console.Write("Введите логин: ");
  		//var login = Console.ReadLine();
            var login = "ST12858";

  		//Console.Write("Введите пароль: ");
  		//var password = Console.ReadLine();
            var password = "8YDJ7E";

  		//Console.Write("Введите номер счета, через который будет выставлена заявка: ");
  		//var account = Console.ReadLine();
            var account = "ST12858-RF-01";

            IPAddress ipadress = IPAddress.Parse("95.131.26.246");
            IPEndPoint ip = new IPEndPoint(ipadress, 8090);

  		using (var waitHandle = new AutoResetEvent(false))
  		{
  			// создаем шлюз к Smart-у
  			using (var trader = new SmartTrader(login, password, ip))
  			{
  				// подписываемся на событие успешного подключения
  				// все действия необходимо производить только после подключения
  				trader.Connected += () =>
  				{
  					Console.WriteLine("Подключение было произведено успешно.");

  					// извещаем об успешном соединени
  					waitHandle.Set();
  				};

  				Console.WriteLine("Производим подключение...");

  				trader.Connect();

  				// дожидаемся события об успешном соединении
  				waitHandle.WaitOne();

  				// подписываемся на все портфели-счета
  				trader.NewPortfolios += portfolios =>
  				{
  					// необходимое условие работы в SmartCOM
  					portfolios.ForEach(trader.RegisterPortfolio);

  					if (_portfolio == null)
  					{
  						_portfolio = portfolios.FirstOrDefault(p => p.Name == account);

  						if (_portfolio != null)
  						{
  							Console.WriteLine("Портфель {0} появился.", account);

                                if (_instrument != null && _depth != null)
  								waitHandle.Set();
  						}
  					}
  				};

  				// подписываемся на событие появление инструментов
  				trader.NewSecurities += securities =>
  				{
  					if (_instrument == null)
  					{
                            // находим инструмент и присваиваем ее переменной _instrument
                            _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

  						if (_instrument != null)
  						{
  							Console.WriteLine("Инструмент появился.");

                                if (_portfolio != null && _depth != null)
  								waitHandle.Set();
  						}
  					}
  				};

                    // подписываемся на событие обновления стакана
                    trader.QuotesChanged += depths =>
                    {
                        if (_depth == null && _instrument != null)
                        {
                            _depth = depths.FirstOrDefault(d => d.Security == _instrument);

                            if (_depth != null)
                            {
                                Console.WriteLine("Стакан появился.");

                                if (_portfolio != null)
                                   waitHandle.Set();
                            }
                        }
                    };

  				// подписываемся на событие появления моих новых сделок
  				trader.NewMyTrades += myTrades =>
  				{
  					foreach (var myTrade in myTrades)
  					{
  						var trade = myTrade.Trade;
  						Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
  					}
  				};

  				Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));

  				// запускаем экспорт по инструментам и портфелям
  				trader.StartExport();

  				// дожидаемся появления портфеля и инструмента
  				waitHandle.WaitOne();

  				trader.SecuritiesChanged += securities =>
  				{
  					// если инструмент хоть раз изменился (по нему пришли актуальные данные)
  					if (securities.Contains(_instrument))
  						waitHandle.Set();
  				};

  				Console.WriteLine("Дожидаемся обновления данных по инструменту...");

  				// запускаем обновление по инструменту
  				trader.RegisterSecurity(_instrument);
  				waitHandle.WaitOne();

  				// запоминаем первоначальное значение середины спреда
                    var totb = _depth.TotalBidsVolume;
                    var tota = _depth.TotalBidsVolume;
  				if (_instrument.BestBid == null)
  					throw new Exception("Нет лучшего бида для котировки.");

                    Console.WriteLine("общий объем bid", totb);
                    Console.WriteLine("общий объем ask", tota);

  				while (true)
  				{
  					var mid = _instrument.BestPair.SpreadPrice / 2;

  					// если спред вышел за пределы нашего диапазона
                        if (totb > tota)
                        {
                            var order = new Order
                            {
                                Portfolio = _portfolio,
                                Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                                Security = _instrument,
                                Volume = 1,
                                Direction = OrderDirections.Sell,
                            };
                            trader.RegisterOrder(order);
                            Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                            break;
                        }
                        else
                        {
                            var order = new Order
                            {
                                Portfolio = _portfolio,
                                Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
                                Security = _instrument,
                                Volume = 1,
                                Direction = OrderDirections.Buy,
                            };
                            trader.RegisterOrder(order);
                            Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                            break;
                        }
  						//Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);

  					// ждем 60 секунду
  					//Thread.Sleep(60000);
  				}

  				// останавливаем экспорт
  				trader.StopExport();
  			}
  		}
  	}
  	catch (Exception ex)
  	{
  		Console.WriteLine(ex);
  	}
  }

} }

BigBen
BigBen

Ты подписался на событие обновления стакана, но не вижу, где запустил экспорт стакана. Можно сделать так:

... // подписываемся на событие появление инструментов trader.NewSecurities += securities => { if (_instrument == null) { // находим инструмент и присваиваем ее переменной _instrument _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

if (_instrument != null) { Console.WriteLine("Инструмент появился.");

<mark>trader.RegisterQuotes(_instrument); // запускаем экспорт стакана</mark>

if (_portfolio != null && _depth != null) waitHandle.Set(); } } }; ...

tmt