esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 21.12.2012
					
					
			
					 
					 
					
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					NewMan 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 22.12.2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			Вопрос не касается транзакционности при работе с заявками. Речь идет о том, что библиотека имеет текущую (свежую) информацию о заявке, но передает ее в стратегию (польэователю) значительно позже. Рассмотрим выдержку из лог-файла:
   1. 19:36:25.742|       |Strategy1  |Регистрация новой заявки на Buy с ценой 152080 и объемом 1.  2. 19:36:25.743|       |PlazaTrader|RegisterOrder: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0   3. 19:36:25.959|       |PlazaTrader|New order: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0   4. 19:36:25.964|       |Strategy1  |<WhenRegistered> AddInfoLog: Order=9914079/1519181401, State=Active, Balance=1  5. 19:36:25.964|       |Strategy1  |<WhenRegistered> AddOrderInfoLog: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0  6. 19:36:25.968|       |Strategy1  |Перегистрация заявки 9914079 с ценой 152080 на цену 152070.  7. 19:36:25.975|       |Strategy1  |Новая Buy сделка 7773983 по цене 152070 на 1 заявки 69914079.  8. 19:36:25.976|       |PlazaTrader|Order changed: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0   9. 19:36:25.978|       |PlazaTrader|Order changed: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0  10. 19:36:25.978|       |Strategy1  |Новая позиция: ABCDEFG-RIH3@RTS=1. 11. 19:36:26.002|       |Strategy1  |<WhenMatched> 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0 12. 19:36:26.002|       |Strategy1  |Заявка 9914079 больше не активна. 13. 19:36:26.111|       |PlazaTrader|OrderCancelFailed: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0                                       StockSharp.Plaza.PlazaException: Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'. 14. 19:36:26.112|       |PlazaTrader|OrderFailed: 9914081/0 Покупка Цена=152070 Объем=1 Сост=Failed Бал=1                                       StockSharp.Plaza.PlazaException: Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'. 15. 19:36:26.112|Error  |Strategy1  |Заявка 9914081 не была принята по причине StockSharp.Plaza.PlazaException:                                       Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'.. 16. 19:36:26.112|       |Strategy1  |Заявка 9914081 больше не активна. 17. 19:36:26.112|Error  |Strategy1  |Заявка 9914079 не была отменена по причине StockSharp.Plaza.PlazaException:                                       Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'..
  В 25.743сек PlazaTrader сообщает о регистрации заявки с присвоенным Id и Сост=Done Бал=0. Это информация говорит о том, что заявка исполнилась по рынку. Правило WhenRegistered было активировано в 25.964сек. В AddInfoLog используя order.State и order.Balance получаю State=Active, Balance=1. Но эти данные не соответствуют реальному состоянию заявки. В следующей строке кода AddOrderInfoLog выдает Сост=Done Бал=0, подтверждая данные PlazaTrader, сообщенные раньше на 219 милисек. В 25.968сек используя недостоверную информацию о состоянии заявки (State=Active) стратегия дает команду MoveOrder на перерегистрацию заявки 9914079/1519181401. Вместо этого нужно было выполнить AddOrder, т.к. реальное состояние заявки Сост=Done Бал=0, и все было бы ОК. В 25.975сек библиотека сообщает о новой сделке по этой заявке и в 26.002сек активируется WhenMatched, но заявка на перерегистрацию уже улетела. Активация произошла через 259милисек после сообщения PlazaTrader о регистрации заявки с Сост=Done Бал=0. Это долго. В 26.111-26.112 библиотека сообщает об ошибках перерегистрации заявки 9914079 на 9914081 на серверах биржи. Из-за недостоверности предоставленной библиотекой информации стратегия потеряла время на выставление заранее обреченной заявки,  а сервера биржи выполнили лишнюю и ненужную работу.
  Так как все-таки получить свежие значения для order.State и order.Balance аналогичные тем, что выдает AddOrderInfoLog()?
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 22.12.2012
					
					
			
					 
					 
					
	
			Приведите минимальный код с выводом всех этих данных.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 23.12.2012
					
					
			
					 
					 
					
	
			Код более не нужен. Это баг в AddOrderInfoLog, она выводит неверные данные. Используйте пока this.AddInfoLog(), в ближайшие несколько дней будет фикс на кодеплексе.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					NewMan 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 23.12.2012
					
					
			
					 
					 
					
	
			Я думаю, баг не в AddOrderInfoLog, поскольку в 25.743сек PlazaTrader сообщает о регистрации исполненной заявки с Сост=Done Бал=0. Далее AddOrderInfoLog только подтверждает эту информацию. AddInfoLog противоречит сообщению от PlazaTrader. Если вы исправите AddOrderInfoLog, то он также будет показывать недостоверную информацию. Вот код с указанными выше правилами.
  order     .WhenRegistered()     .Do(_order =>     { 	this.AddInfoLog("<WhenRegistered> AddInfoLog:" + " Order=" +_order.TransactionId + "/" + _order.Id + ", State=" + _order.State + ", Balance=" + _order.Balance); 	this.AddOrderInfoLog(_order, "<WhenRegistered> AddOrderInfoLog:");     })     .Once()     .Apply(this);
  order     .WhenMatched()     .Do(_order =>     {         this.AddOrderInfoLog(_order, "<WhenMatched>");     })     .Once()     .Apply(this);
  Нужно, чтобы по _order.State я смог бы получить состояние заявки, соответствующее тому, что выдает PlazaTrader. Тогда я смогу делать addOrder вместо moveOrder и не будет указанных выше ошибок.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 23.12.2012
					
					
			
					 
					 
					
	
			NewMan Я думаю, баг не в AddOrderInfoLog, поскольку в 25.743сек PlazaTrader сообщает о регистрации исполненной заявки с Сост=Done Бал=0.  Вот именно здесь и ошибка, не может в данном месте заявка иметь биржевой номер.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					NewMan 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 23.12.2012
					
					
			
					 
					 
					
	
			По поводу 2. 19:36:25.743| |PlazaTrader|RegisterOrder: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0  стало понятно. библиотека заглянула в будущее и увидела ID заявки. Но в строке 3. 19:36:25.959| |PlazaTrader|New order: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0  PlazaTrader сообщает о том, что получен новый ордер, у которого Сост=Done Бал=0 Затем активируется WhenRegistered. и здесь строка 5. 19:36:25.964| |Strategy1 |<WhenRegistered> AddOrderInfoLog: 9914079/1519181401 Покупка Цена=152080 Объем=1 Сост=Done Бал=0 показывает Сост и Баланс такой же, как в 3 строке, а в строке 4. 19:36:25.964| |Strategy1 |<WhenRegistered> AddInfoLog: Order=9914079/1519181401, State=Active, Balance=1 State=Active, Balance=1, когда на самом деле Сост=Done Бал=0 Вот в чем вопрос.   
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 24.12.2012
					
					
			
					 
					 
					
	
			Залил фикс на кодеплекс.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					NewMan 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 25.12.2012
					
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
								 
							 | 
						 
					 
			
					 
					 
					
	
			После фикса:
  .................... 12:16:15.530|       |PlazaTrader|New order: 43860581/3153200118 Продажа Цена=151890 Объем=1 Сост=Active Бал=1  12:16:15.530|       |Strategy1  |<WhenRegistered>: 43860581/3153200118 Продажа Цена=151890 Объем=1 Сост=Active Бал=1 12:16:15.568|       |PlazaTrader|Order changed: 43860581/3153200118 Продажа Цена=151890 Объем=1 Сост=Active Бал=1  12:16:15.586|       |Strategy1  |Перерегистрация заявки 43860581 с ценой 151890 на цену 151920. 12:16:15.586|       |Strategy1  |Перерегистрация проскальзывания заявки 43860581 (0x22A95D) на заявку (0x5EF497). 12:16:15.619|       |Strategy1  |Новая Sell сделка 7869195 по цене 151890 на 1 заявки 43860581. 12:16:15.626|       |PlazaTrader|Order changed: 43860581/3153200118 Продажа Цена=151890 Объем=1 Сост=Done Бал=0  12:16:15.626|       |Strategy1  |Новая позиция: ABCDEFG-RIH3@RTS=1. 12:16:15.626|       |Strategy1  |<WhenMatched>: 43860581/3153200118 Продажа Цена=151890 Объем=1 Сост=Done Бал=0 12:16:15.626|       |Strategy1  |Заявка 43860581 больше не активна. 12:16:15.757|       |PlazaTrader|OrderCancelFailed: 43860581/3153200118 Продажа Цена=151890 Объем=1 Сост=Done Бал=0  StockSharp.Plaza.PlazaException: Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'. 12:16:15.757|       |PlazaTrader|OrderFailed: 43860583/0 Продажа Цена=151920 Объем=1 Сост=Failed Бал=1  StockSharp.Plaza.PlazaException: Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'. 12:16:15.757|Error  |Strategy1  |Заявка 43860583 (0x5EF497) не была принята по причине StockSharp.Plaza.PlazaException: Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'.. 12:16:15.786|Error  |PlazaTrader|System.ArgumentNullException: Значение не может быть неопределенным. Имя параметра: order    в StockSharp.Algo.Slippage.SlippageManager...    в StockSharp.Algo.Slippage.SlippageManager...    в StockSharp.Algo.Slippage.SlippageManager.RegisterFailed(OrderFail fail)    в StockSharp.Algo.Strategies.Strategy...    в StockSharp.Algo.Strategies.Strategy...    в System.Action`1.Invoke(T obj)    в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)    в Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items) 12:16:15.786|Error  |Strategy1  |Заявка 43860581 не была отменена по причине StockSharp.Plaza.PlazaException: Произошла ошибка. Код 50, описание 'Не найдена заявка для перестановки.'.. ....................
  Появились сообщения о перерегистрации проскальзывания заявок (на 15.586милисек) - раньше их не было. Стали появляться в лог-файле сообщения в десяток строк (на 15.786милисек) о System.ArgumentNullException в StockSharp.Algo.Slippage.SlippageManager и  одновременно эти сообщения дублируются в MessageBox, забивая экран. В коде стратегии нет ни одного вызова MessageBox.
  Просьба: отменить или заблокировать вывод сообщений от SlippageManager - очень мешают, да и логи забиваются ненужной информацией.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Дата: 26.12.2012
					
					
			
					 
					 
					
	
			NewMan 12:16:15.786|Error  |PlazaTrader|System.ArgumentNullException: Значение не может быть неопределенным. Имя параметра: order    в StockSharp.Algo.Slippage.SlippageManager...    в StockSharp.Algo.Slippage.SlippageManager...    в StockSharp.Algo.Slippage.SlippageManager.RegisterFailed(OrderFail fail)    в StockSharp.Algo.Strategies.Strategy...    в StockSharp.Algo.Strategies.Strategy...    в System.Action`1.Invoke(T obj)    в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)    в Ecng.ComponentModel.EventsContainer`1.Raise(IEnumerable`1 items)  Покажите полное сообщение, вместо многоточия должен быть еще текст. NewMan одновременно эти сообщения дублируются в MessageBox, забивая экран. В коде стратегии нет ни одного вызова MessageBox.  Смотрите у себя в обвязке стратегии, где у вас могут выводиться MessageBox-ы.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Спасибо:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |