Проблема, которую встречаю и в 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);
Вот пример:

Comentarios (8)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
А можете прислать скрин таблица со стоп-заявками, где будет видны транзакции этих стоп-заявок, номера стоп-заявок, номера-производных и связанных.
Связанная лимитная заявка - это что? Я в теории Квика уже не особо сильно силен.
Что она как-то привязывается к стоп-заявке это я понял из описания. Мне схема интересна работы. Кто ее создает? Почему она отменяется? Кто ее отменяет?
Вот описание из справки:
Тогда не совсем понятно, причем тут S#, если и связанную и производную заявки генерирует Квик, и он им проставляет свои номера.
Да, действительно именно в проставлении ID S# ни при чем, но S#, похоже, виноват немного в другом. Как выяснилось ID транзакции вполне может дублироваться, и причем уникальность ID имеет смысл только при импорте транзакций из .tri-файла. Разъяснения: http://www.quik.ru/forum/qpile/50909/ http://quik.ru/forum/import/79096/79126/ Т.е. получается, что Квик поступает вполне корректно, когда проставляет одинаковые ID. Но, во-первых, S# ругается на заявки с одинаковыми ID. Пример из ProcessDataError для заявок со скриншота:
Во-вторых: сделка, созданная по второй заявке с дублирующимся ID транзакции, не поступает в программу. Т.е., если я правильно понимаю, S# игнорирует такие сделки именно из-за дублирующегося ID в заявках.
Можете привести минимально рабочий код, который воспроизводит ошибку?
Пока готовил пример, вроде бы, научился бороться с пропаданием сделок, и, вроде, S# в этом был не виноват. Но нужно еще тестировать.
А вот чтобы получить ArgumentException в ProcessDataError, можно запустить пример из папки Samples\Quik\Sample и создать в нем стоп-заявку со связанной заявкой. Если стоп-заявка исполнится, то в итоге получится две лимитированные заявки с одинаковым ID транзакции. Если запускать пример под отладчиком, то в окне Output должно появиться исключение ArgumentException.
Единственное, что я поменял в проекте этого примера, это изменил строку Trader.StartExport(); в файле MainWindow.xaml.cs на такую строку:
Я использую Квик 6.3.2.2 от Финама.