← Zurück

4.1 Проблема с ReRegisterOrder

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (10)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Alexander
Alexander

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

FiNick
FiNick Autor

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

Alexander
Alexander

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

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

Цитата из доки:

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

FiNick
FiNick Autor

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

Цитата из доки:

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

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

Alexander
Alexander

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

Цитата из доки:

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

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

В доке есть: BaseTrader.ReRegisterOrder

Maxim
Maxim

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

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

Maxim
Maxim

Вопрос разработчикам: есть ли планы реализовать в 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
Mikhail Sukhov

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

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

Maxim
Maxim

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

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

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

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

FlashPlayer
FlashPlayer

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