| tmt 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			насколько я понял из примера для смарт, то стакан мы вызываем вот так Цитата:_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 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			Для работы со стаканом в S# есть класс MarketDepth. У него есть свойства TotalBidsVolume (Получить общий объем по бидам) и TotalAsksVolume (Получить общий объем по офферам) - вот здесь и нужно копать.
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| tmt 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| BigBen 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			Примером, как я понимаю, является SampleSmartConsole.var firstMid = _lkoh.BestPair.SpreadPrice / 2; - здесь BestPair является свойством класса Security, экземпляр которого _lkoh имеет код = "LKOH".
 В данном примере класс MarketDepth не используется.
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| tmt 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			а не мог бы подсказать пример где используется этот класс? 
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| fau 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			tmt а не мог бы подсказать пример где используется этот класс?  поиск по форуму?
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| BigBen 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			Для SmartCOM стакан используется в примере SampleSmart.
			
			
			
			
		
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| BigBen 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 | 
			
				|  | 
	
		| Спасибо: |   |  | 
			
				|  | 
		
			| 
 | 
		
			
				| tmt 
 
   
 
						
						
					 | Дата: 09.01.2012 
						
							|  |  |  |   |  
 
 
	
			вобщем ошибок у меня больше не вылазиет. но вот программа не работает.. вся загвоздка с тем же.. добавил  Цитата: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 
 
   
 
						
						
					 | Дата: 09.01.2012 
 
 
	
			Ты подписался на событие обновления стакана, но не вижу, где запустил экспорт стакана.Можно сделать так:
 
 ...
 // подписываемся на событие появление инструментов
 trader.NewSecurities += securities =>
 {
 if (_instrument == null)
 {
 // находим инструмент и присваиваем ее переменной _instrument
 _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);
 
 if (_instrument != null)
 {
 Console.WriteLine("Инструмент появился.");
 
 trader.RegisterQuotes(_instrument);            // запускаем экспорт стакана
 
 if (_portfolio != null && _depth != null)
 waitHandle.Set();
 }
 }
 };
 ...
 
 | 
			
				|  |  | 
			
				|  |