aspirant 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 01.04.2011
					
					
			
					 
					 
					
	
			Mikhail Sukhov Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader.  В методе OnNewDataFromPosition нужно находить уже существующую бумагу, а известен только IsinId.  Создавать еще один Dictionary, или все таки не использовать составной идентификатор.  Кстати, такая же проблема будет встречаться в других потоках.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					aspirant 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 01.04.2011
					
					
			
					 
					 
					
	
			skuvv Сделайте плиз OnNewDataFromPosition, у меня не получается [confused]   Пока сделал заглушку, чтобы код компилился.  Есть вопрос к Михаилу + не знаю, что делать внутри лямбды Func<Portfolio, Security, Position> createPosition.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					skuvv 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			aspirant Mikhail Sukhov Отредактировал. Кое что поменял. Например, идентификатор Плазы лучше засунуть по внутрь. Чтобы можно было без проблем его менять. Сейчас идентификатор составной из кода и класса для единообразия с остальными ITrader.  В методе OnNewDataFromPosition нужно находить уже существующую бумагу, а известен только IsinId.  Создавать еще один Dictionary, или все таки не использовать составной идентификатор.  Кстати, такая же проблема будет встречаться в других потоках.  Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			skuvv  Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
  Сначала опишу проблему с идентификаторами Плазы. Если сейчас взять за основу IsinId и записывать его в Security.Id, то для таких инструментов не будет работать ни Гидра, ни тестирование на истории, так как S# использует единую систему именования Code@Class. Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					aspirant 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			Mikhail Sukhov Мне нравится второй вариант.  Тогда конструктор PlazaListener должен быть internal.  Правлю?
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					aspirant 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			Mikhail Sukhov skuvv  Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
  S# использует единую систему именования Code@Class. Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.  Насчет поэтапности - сделаем.  Вопрос остается с IsinId.  Посмотри еще раз реализацию OnNewDataFromPosition.  Из потока приходит запись с IsinId бумаги.  Ее класс (opt или fut) я не знаю.  Именно поэтому я написал: Кодbase.GetSecurity(CreateSecurityId(plazaId.ToString(), "InvalidClass")), // TODO Поменять  Я могу найти бумагу, например, так: Кодvar sec = this.Securities.Where(x => x.ExtensionInfo["IsinId"].ToString() == "123456");  Но эту будет перебор списка, а не поиск по словарю.  Или можно сделать по-другому?
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					aspirant 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			Mikhail Sukhov И каждому члену PlazaTableRegistry внутри класса PlazaTrader будет соответствовать открытая переменная типа PlazaListener  Добавил все переменные.  Пока создаются со всеми колонками в методе CreateUserListeners(). Теперь: ты предлагаешь, чтобы при запуске PlazaTrader парсил файлы-схемы в заданной папке и создавал переменные PlazaListener с наборами колоннок, заданными пользователем.  Вопрос: в каком месте пользователь будет задавать эти колоннки?
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			aspirant Теперь: ты предлагаешь, чтобы при запуске PlazaTrader парсил файлы-схемы в заданной папке и создавал переменные PlazaListener с наборами колоннок, заданными пользователем.  Не PlazaListener, а PlazaTable, который передается в PlazaListener. aspirant Вопрос: в каком месте пользователь будет задавать эти колоннки?  У себя в коде. До Connect, я так понимаю (после подключение ведь нельзя уже править метаданные?)
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			aspirant  Но эту будет перебор списка, а не поиск по словарю.  Или можно сделать по-другому?
 
  Вопрос уже содержит ответ.[smile] 
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					aspirant 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 02.04.2011
					
					
			
					 
					 
					
	
			Mikhail Sukhov skuvv  Тут однозначно надо вначале формировать список инструментов, а потом плясать от него, те общий start делать внутри метода по этапам, например дождаться OnStreamDataEnd от инструментов и запустить остальные потоки данных
  Поэтому, мне кажется, что будет правильный вариант skuvv дождаться информации об инструменте, и только затем формировать производную информацию.  Залил исправление.  Кстати, дожидаться, похоже, нужно не OnStreamDataEnd, а OnPlazaStreamStateChanged, где state == TDataStreamState.DS_STATE_ONLINE.  Может быть это из-за того, что сегодня выходной, но по потокам FORTS_FUTCOMMON_REPL\common и FORTS_OPTCOMMON_REPL\common, OnStreamDataEnd я так и не дождался.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |