4.1 Проблема с ReRegisterOrder
Atom
28.05.2012


Помните у нас неправильно работал ReRegisterOrder? Так вот, я поставил версию 4.1 (в которой вроде чинили багу), и не понял как этим пользоваться.
Собственно, вопрос: как послать команду на перерегистрацию так, чтобы биржа сама выставила обьем новой заявки (равный остатку по старой заявке)?
Напомню, что мы не знаем остаток по заявке в произвольный момент времени, только биржа точно знает этот остаток.

Теги:


Спасибо:


Alexander

Фотография
Дата: 29.05.2012
Ответить


regime == 3 сейчас никак не используется и не задаётся.
именно он вам нужен?
Спасибо:

FiNick

Фотография
Дата: 29.05.2012
Ответить


По-моему мне нужен regime == 0, посмотрите ссылку http://forum.rts.ru/viewtopic.asp?t=17354
Спасибо:

Alexander

Фотография
Дата: 29.05.2012
Ответить


FiNick Перейти
По-моему мне нужен regime == 0, посмотрите ссылку http://forum.rts.ru/viewtopic.asp?t=17354


Режим 0 задаётся если задать нулевой объём у новой заявки.

Цитата из доки:
Цитата:
Если объём не задан, меняется только цена.
Спасибо:

FiNick

Фотография
Дата: 29.05.2012
Ответить


Alexander Mukhanchikov Перейти

Режим 0 задаётся если задать нулевой объём у новой заявки.

Цитата из доки:
Цитата:
Если объём не задан, меняется только цена.


А вот это то что нужно, спасибо!
Кстати, перед тем, как писать на форум, я просматривал доки на этот вопрос. В разделе "Управление заявками -> Замена заявок" этого нет. В описании самого метода ReRegisterOrder тоже нет.
Спасибо:

Alexander

Фотография
Дата: 29.05.2012
Ответить


FiNick Перейти
Alexander Mukhanchikov Перейти

Режим 0 задаётся если задать нулевой объём у новой заявки.

Цитата из доки:
Цитата:
Если объём не задан, меняется только цена.


А вот это то что нужно, спасибо!
Кстати, перед тем, как писать на форум, я просматривал доки на этот вопрос. В разделе "Управление заявками -> Замена заявок" этого нет. В описании самого метода ReRegisterOrder тоже нет.


В доке есть:
BaseTrader.ReRegisterOrder
Спасибо:

Maxim

Фотография
Дата: 24.02.2013
Ответить


FiNick скорей всего имел ввиду вот это место доки
http://stocksharp.com/do...r_OnReRegisterOrder.htm

Здесь про нулевой объем ничего не сказано.
Спасибо:

Maxim

Фотография
Дата: 24.02.2013
Ответить


Вопрос разработчикам:
есть ли планы реализовать в PlazaTrader, а также в BaseTrader возможность задавать тип смены заявок?

Например, столкнулся с необходимостью делать в Плазе замену с режимом regime == 3.
А он не сделан.

Пока прикрутил костыли к текущей открытой версии.
Буду рад, если кто укажет на ошибки.
Пока не тестировал.
Возможно после тестов обнаружатся ошибки.


Добавил PlazaReRegisterRegime.cs

Код


/// <summary>
/// Режим замены заявок в Плазе-2
/// </summary>
public enum PlazaReRegisterRegime
{
	/// <summary>
	/// 0 Не менять объёмы заявок
	/// </summary>
	SetVolumeFromOldOrderBalance,

	/// <summary>
	/// 1 Изменить объёмы заявок
	/// </summary>
	SetVolumeFromNewOrderVolume,

	/// <summary>
	/// 2 Снять старые заявки, в случае, если указанные новые объёмы совпадают с текущими объёмами в торговой системе – поставить заявки с новыми ценами
	/// </summary>
	ReRegisterIfOldOrderBalanceAndNewOrderVolumeEquel,

	/// <summary>
	/// 3 Изменить объемы заявок с учетом сведенной части
	/// </summary>
	SetVolumeFromNewOrderVolumeMinusMatchingVolume
}



В PlazaTrader.cs добавил:
Код


void encodeRegime(Order order, PlazaReRegisterRegime regime)
{
	if (regime == PlazaReRegisterRegime.SetVolumeFromOldOrderBalance)
		order.Volume = 0;
	else if (regime == PlazaReRegisterRegime.SetVolumeFromNewOrderVolume)
		order.Balance = -1;
	else if (regime == PlazaReRegisterRegime.ReRegisterIfOldOrderBalanceAndNewOrderVolumeEquel)
		order.Balance = -2;
	else if (regime == PlazaReRegisterRegime.SetVolumeFromNewOrderVolumeMinusMatchingVolume)
		order.Balance = -3;       
}

PlazaReRegisterRegime decodeRegime(Order order)
{
	if (order.Volume == 0)
		return PlazaReRegisterRegime.SetVolumeFromOldOrderBalance;
	else if (order.Balance == -1)
		return PlazaReRegisterRegime.SetVolumeFromNewOrderVolume;
	else if (order.Balance == -2)
		return PlazaReRegisterRegime.ReRegisterIfOldOrderBalanceAndNewOrderVolumeEquel;
	else if (order.Balance == -3)
		return PlazaReRegisterRegime.SetVolumeFromNewOrderVolumeMinusMatchingVolume;
	else
		return PlazaReRegisterRegime.SetVolumeFromNewOrderVolume;        
}

/// <summary>
/// Перерегистрировать пару заявок на бирже.
/// </summary>
/// <param name="oldOrder1">Первая заявка, которую нужно снять.</param>
/// <param name="newOrder1">Первая новая заявка, которую нужно зарегистрировать.</param>
/// <param name="oldOrder2">Вторая заявка, которую нужно снять.</param>
/// <param name="newOrder2">Вторая новая заявка, которую нужно зарегистрировать.</param>
/// <param name="regime">Режим замены заявок в Плазе-2.</param>
public void ReRegisterOrderPair(Order oldOrder1, Order newOrder1, Order oldOrder2, Order newOrder2, PlazaReRegisterRegime regime)
{
	encodeRegime(newOrder1, regime);

	encodeRegime(newOrder2, regime);

	base.ReRegisterOrderPair(oldOrder1, newOrder1, oldOrder2, newOrder2);  
}

/// <summary>
/// Перерегистрировать заявку на бирже.
/// </summary>
/// <param name="oldOrder">Заявка, которую нужно снять.</param>
/// <param name="newOrder">Новая заявка, которую нужно зарегистрировать.</param>
/// <param name="regime">Режим замены заявок в Плазе-2.</param>
public void ReRegisterOrder(Order oldOrder, Order newOrder, PlazaReRegisterRegime regime)
{
	encodeRegime(newOrder, regime);            

	base.ReRegisterOrder(oldOrder, newOrder);        
}



В PlazaTrader.cs изменил методы:
Код



/// <summary>
/// Перерегистрировать заявку на бирже.
/// </summary>
/// <param name="oldOrder">Заявка, которую нужно снять.</param>
/// <param name="newOrder">Новая заявка, которую нужно зарегистрировать.</param>
protected override void OnReRegisterOrder(Order oldOrder, Order newOrder)
{
	// Определяем режим замены заявок
	PlazaReRegisterRegime regime = decodeRegime(newOrder);           

	// Продолжаем замену. Логика из оригинальной верисии коннектора.
	InitNewOrder(newOrder);

	var transaction = _transactionManager.Factory.CreateReRegister(oldOrder, newOrder);

	transaction
		.SetMoveMode(regime)
		.SetFirstOrderId(oldOrder.Id)
		.SetFirstVolume((int)newOrder.Volume)
		.SetFirstPrice(newOrder.Price)
		.SetFirstTransactionId(newOrder.TransactionId);

	_transactionManager.SendTransaction(transaction);
}

/// <summary>
/// Перерегистрировать пару заявок на бирже.
/// </summary>
/// <param name="oldOrder1">Первая заявка, которую нужно снять.</param>
/// <param name="newOrder1">Первая новая заявка, которую нужно зарегистрировать.</param>
/// <param name="oldOrder2">Вторая заявка, которую нужно снять.</param>
/// <param name="newOrder2">Вторая новая заявка, которую нужно зарегистрировать.</param>
protected override void OnReRegisterOrderPair(Order oldOrder1, Order newOrder1, Order oldOrder2, Order newOrder2)
{
	// Определяем режим замены заявок
	PlazaReRegisterRegime regime1 = decodeRegime(newOrder1);        
	PlazaReRegisterRegime regime2 = decodeRegime(newOrder2);
	PlazaReRegisterRegime regime = regime1 == regime2 ? regime1 : PlazaReRegisterRegime.SetVolumeFromNewOrderVolume;     

	 // Продолжаем замену. Логика из оригинальной верисии коннектора.
	InitNewOrder(newOrder1);
	InitNewOrder(newOrder2);

	var transaction = _transactionManager.Factory.CreateReRegisterPair(oldOrder1, newOrder1, oldOrder2, newOrder2);

	transaction
		.SetMoveMode(regime)
		.SetFirstOrderId(oldOrder1.Id)
		.SetFirstVolume((int)newOrder1.Volume)
		.SetFirstPrice(newOrder1.Price)
		.SetFirstTransactionId(newOrder1.TransactionId)

		.SetSecondOrderId(oldOrder2.Id)
		.SetSecondVolume((int)newOrder2.Volume)
		.SetSecondPrice(newOrder2.Price)
		.SetSecondTransactionId(newOrder2.TransactionId);

	_transactionManager.SendTransaction(transaction);
}




В Transaction.cs изменил метод:
Код

/// <summary>
/// Установить режим перемещения заявок.
/// </summary>
/// <param name="regime">Тип изменения объема заявок.</param>
/// <returns>Транзакция.</returns>
public Transaction SetMoveMode(PlazaReRegisterRegime regime)
{
	CheckType(Messages.FutureReRegister, Messages.OptionReRegister);

	return SetField("regime", (Int32)regime);
}

Спасибо:

Mikhail Sukhov

Фотография
Дата: 24.02.2013
Ответить


Maxim Перейти

Например, столкнулся с необходимостью делать в Плазе замену с режимом regime == 3.
А он не сделан.


Он сделан. Котирование работает через этот режим.
Спасибо:

Maxim

Фотография
Дата: 25.02.2013
Ответить


Михаил, привет.

Ты имеешь ввиду вот это котирование?
http://stocksharp.com/do...c-bc8b-4afde645e483.htm

Не могу понять, что мне нужно использовать из этого, если надо поменять заявку с объема 100 на 120?

Или я не то понял под понятием «котирование»?
Спасибо:

FlashPlayer

Фотография
Дата: 03.04.2013
Ответить


Можно как-то развернуто написать как воспользоваться всеми 4мя режимами мува заявок? Спасибо.
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy