SmartQuant Discussion
http://www.smartquant.com/forums/

[Openquant2014] Работа с Order
http://www.smartquant.com/forums/viewtopic.php?f=65&t=10891
Page 1 of 1

Author:  zyko [ Tue Feb 03, 2015 7:36 pm ]
Post subject:  [Openquant2014] Работа с Order

Добрый день!
Как изменилась работа с Order в ОК2014?
Что позволяют сделать свойства-списки Commands и Messages? Создать очередь команд?
Например, в старом фреймворке я кешировал команду Cancel или Replace, если заявка находилась в pending-статусе - может, этот момент в новом фреймворке заявка взяла на себя?

Author:  Dr. Anton Fokin [ Wed Feb 04, 2015 11:32 am ]
Post subject:  Re: [Openquant2014] Работа с Order

Добрый день,

Order это такой контейнер, который хранит списки сообщений и показывает текущее состояние дел как результат потока этих сообщений. Сама по себе заявка ничего не делает и вообще говоря является вещью виртуальной и сделанной ради удобства / привычки. Провайдеры получают из фреймворка ExecutionCommand и посылают во фреймворк ExecutionReport. Соответственно любую заявку можно восстановить из потока/списка ExecutionMessage.

Идея сделать некую очередь ExecutionCommand, чтобы автоматически отменять заявку, которая ушла, но еще не принята брокером, достаточно интересная. Но мне кажется, что это все же более относится к стратегии исполнения заявки. Хотя можно подумать и обсудить.

Антон

Author:  zyko [ Wed Feb 04, 2015 2:02 pm ]
Post subject:  Re: [Openquant2014] Работа с Order

Про контейнер понял, но всё-таки заявка имеет логику контроля команд (например, нельзя сделать два раза Send - вылетает эксепшн).
Или попробовал Send после Cancel - заявка не попала в OrderManager ОК2014, но появилась в роутере (видимо, недочёт - надо или везде, или нигде).

Если говорить про очередь команд, то из практики она нужна в двух случаях:
- отправка Replace/Cancel, когда не хочется пропускать никаких quote/trade, а заявка ещё PendingNew/PendingReplace
- пользовательская команда Cancel, подаваемая в произвольный момент времени.

В старом фреймворке пришлось городить буфер на 1-2 команды и контролировать его своими флагами.

Author:  Dr. Anton Fokin [ Wed Feb 04, 2015 2:30 pm ]
Post subject:  Re: [Openquant2014] Работа с Order

На самом деле у заявки нет метода сенд, он есть у ордер менеджера, и какой-то базовый контроль происходит там. При этом насколько я вижу контроль совсем базовый в данный момент. То есть нельзя послать второй раз посланную заявку и на этом все.

Развернутый контроль в любом случае будет происходить на стороне провайдера и заканселить непринятую заявку вам все равно не дадут.

Author:  Dr. Anton Fokin [ Wed Feb 04, 2015 2:40 pm ]
Post subject:  Re: [Openquant2014] Работа с Order

А кстати, как вы сделали сенд после кансел?

Там сейчас стоит такое

public void Send(Order order)
{
if (order.status != OrderStatus.NotSent)
{
throw new ApplicationException("Can not send order that has been already sent " + order);
}

Author:  zyko [ Thu Feb 05, 2015 2:12 pm ]
Post subject:  Re: [Openquant2014] Работа с Order

Прямо так и сделал (баловался):

Order myOrder = new Order(...);
Cancel(myOrder);
Send(myOrder);

Заявка появилась в роутере и не появилась в ОК.

Author:  Dr. Anton Fokin [ Thu Feb 05, 2015 9:50 pm ]
Post subject:  Re: [Openquant2014] Работа с Order

Поправили это дело в коде. Теперь будут кидаться ошибки такого плана.

Code:
            if (order.status == OrderStatus.NotSent)
            {
                throw new ApplicationException("Can not cancel order that is not sent " + order);
            }

            if (order.IsDone)
            {
                throw new ApplicationException("Can not cancel order that is already done " + order);
            }

Page 1 of 1 All times are UTC + 3 hours
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/