Alexander 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/22/2012
					
					
			
					 
					 
					
	
			FiNick Обнаружил ошибку в protected методе OnReRegisterOrder в PlazaTrader. Неправильно выставляется обьем заявки и режим. Исходники плазатрейдера у меня достаточно древние, может уже пофиксили, новых исходников в открытом доступе не нашел, чтоб проверить.  Code
		protected override void OnReRegisterOrder(Order oldOrder, Order newOrder)
		{
			InitNewOrder(newOrder);
			var transaction = _transactionManager.Factory.CreateReRegister(oldOrder, newOrder);
			transaction
				.SetMoveMode(oldOrder.Volume == newOrder.Volume)
				.SetFirstOrderId(oldOrder.Id)
				.SetFirstVolume((int)newOrder.Volume)
				.SetFirstPrice(newOrder.Price)
				.SetFirstTransactionId(newOrder.TransactionId);
			_transactionManager.SendTransaction(transaction);
		}
 текущая реализация. вроде ничего не меняли.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					FiNick 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/22/2012
					
					
			
					 
					 
					
	
			Да, не изменилось. Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов. Это происходит потому что в момент перерегистрации мой робот может еще не знать, что баланс изменился, и послать команду Reregister со старым обьемом, а к тому моменту как команда придет на биржу баланс старой заявки изменится. Эта проблема исчезает, если посылать транзакцию с regime 0, то есть в вашем коде написать SetMoveMode(true). Но тогда иногда будет получаться, что в таблице "заявки" новые заявки (отправленные с помощью ReRegister) будут иметь один обьем, а фактически по ним будет проходить другой обьем. Т.е. в regime 0 неважно какой обьем поставить новой заявке, ей на бирже все равно присвоят обьем равный остатку по старой заявке.
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					FiNick 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/23/2012
					
					
			
					 
					 
					
	
			Code
SetMoveMode(oldOrder.Volume == newOrder.Volume) 
  - так вообще не правильно. Думаю надо плазатрейдеру опцию сделать: режим перерегистрации, либо сделать у метода ReRegisterOrder параметр режим, а если не указан по умолчанию 1 ставить.  
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					esper 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/23/2012
					
					
			
					 
					 
					
	
			FiNick Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов.  Т.е. вы хотите добрать тот же объем но по другой цене? Зачем тогда изменять объем? Пусть он будет равен объему предыдущей заявки, а не балансу.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					FiNick 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/23/2012
					
					
			
					 
					 
					
	
			esper FiNick Если я ставлю некоторую заявку с обьемом например 20, а потом с коротким интервалом (500мс) перерегистрирую её с новым обьемом oldOrder.Balance, то в результате я могу набрать больше чем 20 контрактов.  Т.е. вы хотите добрать тот же объем но по другой цене? Зачем тогда изменять объем? Пусть он будет равен объему предыдущей заявки, а не балансу.  Вам не кажется нелогичным, что я выставляю один обьем, а фактически у меня уходит другой обьем. Почему бы не написать метод, где точно сказано, что ререгистриться заявка будет на остаток, и в параметрах вообще не указывать никакой обьем.  Я три дня воевал с этим ререгистром, офигевал от того как криво он работает и ошибок всяких, пока не залез в исходники и документацию по плазе.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Mikhail Sukhov 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/23/2012
					
					
			
					 
					 
					
	
			FiNick что ререгистриться заявка будет на остаток, и в параметрах вообще не указывать никакой обьем.  Это очень интересно. Согласен.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					lesser 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/23/2012
					
					
			
					 
					 
					
	
			Mikhail Sukhov FiNick что ререгистриться заявка будет на остаток, и в параметрах вообще не указывать никакой обьем.  Это очень интересно. Согласен.  Лучше когда обьем не указан тогда на остаток , а если указан то на тот что указан. Зачем делать лишние транзакции. Параметр обьема нужно сохранить .
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Alexander 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/25/2012
					
					
			
					 
					 
					
	
			FiNick Почему бы не написать метод, где точно сказано, что ререгистриться заявка будет на остаток  это фактически regime = 3 выходит Quote:SetMoveMode(oldOrder.Volume == newOrder.Volume)  почему так неверно? если oldOrder.Volume == newOrder.Volume - это regime = 0 Quote:Не менять объёмы заявок  в ином случае - regime = 1 Quote:Изменить объёмы заявок  можете более подробно расписать в какой момент у вас возникает проблема, в чём она проявляется и как вы предлагаете её фиксить?
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					FiNick 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/26/2012
					
					
			
					 
					 
					
	
			Alexander Mukhanchikov FiNick Почему бы не написать метод, где точно сказано, что ререгистриться заявка будет на остаток  это фактически regime = 3 выходит  Такс, а вот про режим 3 я не читал раньше. Это что получается, самый нужный режим у вас не реализован? Короче, странно, но эксперимент показывает, что в режиме 0 заявки ререгистрируются на остаток (то что по документации должно происходить в режиме 3). Может мы просто неправильно понимаем фразу "0 – не менять объёмы заявок", ведь по логике, кому может понадобиться режим, когда вы ставите заявку с обьемом 20, из него уходит 7, а вы переставляете эту заявку опять с тем же обьемом 20 и в итоге набираете 27?=) Тут вот эту тему перетирают, но как-то не ясно все равно. Надо еще экспериментировать.
			
			
			
			
		
  
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 | 
			
		
			
  | 
		
			
				
					Alexander 
					 
					 
					 
					 
					
					
						
						
					 
				 | 
				
					Date: 3/26/2012
					
					
			
					 
					 
					
	
			можно подробнее с цифрами объёма пример привести?
			
			
			
			
		
 
				 | 
			
			
				| 
					
				 | 
				
					
	
		| 
			Thanks:
		 | 
		
		
			 
		 | 
	 
 
				 | 
			
			
				| 
					
				 |