Лимитированные заявки с одинаковым ID транзакции
Atom Ответить
24.10.2012


Проблема, которую встречаю и в 4.1.5, и в 4.1.4:
Когда стоп-заявка (выставленная указанным ниже кодом) срабатывает, то в списке лимитных заявок появляются две заявки с одинаковым ID транзакции. Первая из этих лимитных заявок эта та, которая является связанной со стоп-заявкой. При срабатывании стоп-заявки эта лимитная заявка отменяется, и выставляется вторая лимитная заявка с таким же ID транзакции.
Код

		Order
			orStopOrder = new Order
				{
					Type = OrderTypes.Conditional,
					Volume = iVolume,
					Price = dcPrice,
					Portfolio = prtPortfolio,
					Security = secSecurity,
					Direction = dcStopLoss < dcTakeProfit ? OrderDirections.Sell : OrderDirections.Buy,
					Comment = "Placed by TradingTrainer",
					ExpiryDate = DateTime.MaxValue,
					StopCondition = new QuikStopCondition
					{
						Type = QuikStopConditionTypes.LinkedOrder,						
						LinkedOrderPrice = dcTakeProfit,
						LinkedOrderCancel = false,
						StopPrice = dcStopLoss,
						ActiveTime = null,
					},
				};
		m_StockSharpTrader.RegisterOrder(orStopOrder);


Вот пример:

Теги:


Спасибо:




8 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.10.2012
Ответить


alexxys Перейти
Проблема, которую встречаю и в 4.1.5, и в 4.1.4:
Когда стоп-заявка (выставленная указанным ниже кодом) срабатывает, то в списке лимитных заявок появляются две заявки с одинаковым ID транзакции. Первая из этих лимитных заявок эта та, которая является связанной со стоп-заявкой. При срабатывании стоп-заявки эта лимитная заявка отменяется, и выставляется вторая лимитная заявка с таким же ID транзакции.


А можете прислать скрин таблица со стоп-заявками, где будет видны транзакции этих стоп-заявок, номера стоп-заявок, номера-производных и связанных.

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

alexxys

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


Mikhail Sukhov Перейти
А можете прислать скрин таблица со стоп-заявками, где будет видны транзакции этих стоп-заявок, номера стоп-заявок, номера-производных и связанных.

Прикрепляю скрин.

Mikhail Sukhov Перейти

Связанная лимитная заявка - это что? Я в теории Квика уже не особо сильно силен.

В Квике есть тип стоп-заявки "Со связанной заявкой" (QuikStopConditionTypes.LinkedOrder). Такая стоп-заявка создаётся в паре с лимитированной (я немного неправильно её назвал лимитной) заявкой. Такая лимитированная заявка называется "Связанная заявка".
StopOrders.PNG 47 KB (0)
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.10.2012
Ответить


alexxys Перейти
В Квике есть тип стоп-заявки "Со связанной заявкой" (QuikStopConditionTypes.LinkedOrder). Такая стоп-заявка создаётся в паре с лимитированной (я немного неправильно её назвал лимитной) заявкой. Такая лимитированная заявка называется "Связанная заявка".


Что она как-то привязывается к стоп-заявке это я понял из описания. Мне схема интересна работы. Кто ее создает? Почему она отменяется? Кто ее отменяет?
Спасибо:

alexxys

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


Mikhail Sukhov Перейти
Кто ее создает? Почему она отменяется? Кто ее отменяет?

Создает и отменяет её сам Квик (или сервер Квика). Отменяется она автоматически, потому что родительская стоп-заявка сработала.
Если же сработает эта связанная лимитированная заявка, то автоматически отменится родительская стоп-заявка.

Вот описание из справки:
Цитата:
«Со связанной заявкой» – это две заявки по одному и тому же инструменту, одинаковые по направленности и объему. Первая заявка типа «Стоп-лимит», вторая – лимитированная заявка. При исполнении одной из заявок вторая снимается. Этот тип поручений также называют «O.C.O.» (one cancel other, «одна заявка отменяет другую»).
НАЗНАЧЕНИЕ: Данный тип заявки предназначен для закрытия позиции. Стоп-заявка используется для фиксации убытков, а лимитированная заявка – для фиксирования прибыли. Преимуществом связанной заявки является то, что для исполнения лимитированной и стоп-заявки лимиты блокируются однократно, и при закрытии позиции в одну сторону связанная с ней заявка автоматически снимается.


Примечания:
При исполнении стоп-заявки, связанная лимитированная заявка снимается полностью.
Данный тип заявки действителен только до конца текущей торговой сессии. На Срочном рынке FORTS cтоп-заявка действительна также до конца текущей торговой сессии, а связанная с ней лимитированная заявка, выставленная в вечернюю сессию, остается в торговой системе FORTS и может быть исполнена на следующий торговый день.
При частичном исполнении связанной заявки стоп-заявка может либо (а) сниматься полностью, либо (б) уменьшаться на величину исполненной части связанной заявки, в зависимости от выбранных условий в заявке.


Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 24.10.2012
Ответить


alexxys Перейти

Создает и отменяет её сам Квик (или сервер Квика). Отменяется она автоматически, потому что родительская стоп-заявка сработала.
Если же сработает эта связанная лимитированная заявка, то автоматически отменится родительская стоп-заявка.


Тогда не совсем понятно, причем тут S#, если и связанную и производную заявки генерирует Квик, и он им проставляет свои номера.
Спасибо:

alexxys

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


Да, действительно именно в проставлении ID S# ни при чем, но S#, похоже, виноват немного в другом.
Как выяснилось ID транзакции вполне может дублироваться, и причем уникальность ID имеет смысл только при импорте транзакций из .tri-файла. Разъяснения:
http://www.quik.ru/forum/qpile/50909/
http://quik.ru/forum/import/79096/79126/
Т.е. получается, что Квик поступает вполне корректно, когда проставляет одинаковые ID.
Но, во-первых, S# ругается на заявки с одинаковыми ID. Пример из ProcessDataError для заявок со скриншота:
Код
System.ArgumentException: Order с номером '9256451101' дублируется в полученном DDE пакете.
Parameter name: item

Во-вторых: сделка, созданная по второй заявке с дублирующимся ID транзакции, не поступает в программу. Т.е., если я правильно понимаю, S# игнорирует такие сделки именно из-за дублирующегося ID в заявках.

Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 25.10.2012
Ответить


Можете привести минимально рабочий код, который воспроизводит ошибку?
Спасибо:

alexxys

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


Пока готовил пример, вроде бы, научился бороться с пропаданием сделок, и, вроде, S# в этом был не виноват. Но нужно еще тестировать.

А вот чтобы получить ArgumentException в ProcessDataError, можно запустить пример из папки Samples\Quik\Sample и создать в нем стоп-заявку со связанной заявкой. Если стоп-заявка исполнится, то в итоге получится две лимитированные заявки с одинаковым ID транзакции. Если запускать пример под отладчиком, то в окне Output должно появиться исключение ArgumentException.

Единственное, что я поменял в проекте этого примера, это изменил строку Trader.StartExport(); в файле MainWindow.xaml.cs на такую строку:
Код
			Trader.StartExport(new List<DdeTable>(){
				Trader.SecuritiesTable,
				Trader.DerivativePortfoliosTable, Trader.OrdersTable,
				Trader.MyTradesTable,
				Trader.DerivativePositionsTable,
				Trader.StopOrdersTable
			});


Я использую Квик 6.3.2.2 от Финама.
Автор топика
Спасибо:


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

loading
clippy