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();  }  }  }; ... 
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
				 | 
			
			
				| 
					
				 |