Состояния завок
Atom
16.06.2010
Mikhail Sukhov


Хочу переделать OrderStates: слить два состояния Cancelled и Matched в одно - Done. И добавить 3 extension метода: IsCancelled IsMatched IsPartiallyFilled.

Возражения? Предложения?


Теги:


Спасибо:


Tauler

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


ай-ай, баба Яга против! это же нахрен летит ручная коррекция работы робота!

Спасибо:

Tauler

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


Зачем это - Canceled и Matched четко отражали реальное состояние заявки в квике - Снята и Исполена, это можно было анализировать и предпринимать различные действия. А Done это все испротит. А методы добавить - отличная идея, но зачем же состояния убирать?

Спасибо:

Mikhail Sukhov

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


Минусы текущего:

  1. Теряется состояние частичной реализации.
  2. В программе надо проверять на два состояния (Canceled и Matched), чтобы понять, что заявка уже закрыта.
Спасибо:

Tauler

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


а если необходима разная реакция на снятие заявки и ее исполенние? во тя сейчас делаю арбитражера, мне именно такая реакция нужна.. Состояние частичное реализации можно сделать 3 способами

а) еще один State в дополнение к Matched и Canceled - тот же OrderStates.PartialyMatched б) метод расширения или свойсво IsPartialyMatched в) тупо провреить Volume-Balance == Volume.

Еще раз повторюсь - текущие OrderStates полностью отражают реаьное состояние заявки в системе. А Done - слабая информативность, тока в любом случае придется проверить - а че именно то Done - сняли или исполнили?

А вопрос - почему имеено Вы решили слить два состояния в одно?

Спасибо:

Tauler

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


Даже наверно не нужно пункт а) - а то придется в некторых случаях 3 статуса проверять :)

Спасибо:

Mikhail Sukhov

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


Причина - отделить бизнес состояния от системных. Заявка по сути живет следующий цикл: еще не принята, принята и активна, принята и не активна. Это системные статусы, диктуемые биржей. Бизнес статусы - это ничего вообще не исполнили, исполнили хоть что-то и слаба богу, мне повезло я все исполнил.

К примеру, если использовать текущий подход, то можно получить заявку, которая PartiallyMatched и Canceled одновременно. С точки зрения человеческой логики - это абсурд. С точки зрения биржи - заявка частично исполнилась, но мы ее сняли.

Ок, давайте Ваш случай. Где будет новая концепция не удобна?

Спасибо:

Tauler

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


Арбитражер. Например робот выставляет заявку. Она а) выполняется целиком - я вижу что она матчед, кидаю правую часть б) Vol-Bal != Vol - я кидаю правую часть на vol-bal, и снимаю левую часть в) висит в стакане - трейдер это видит, РУКАИТ снимает ее, я вижу что она Canceled, вибрысываю ее из коллекции для обработки заявок вот тут то мне и надо смотреть кто Matched, кто частично исполнене, а кто Canceled. И повторюсь еще раз - состояния Matched/Canceled отражают реальное состояие заявки в торговом шлюзе.И кстати Matched/ Canceled - это самые что нинаесть бизнес состояни, а системные - этот свойство Status. кстати Вашу модель " Бизнес статусы - это ничего вообще не исполнили, исполнили хоть что-то и слаба богу, мне повезло я все исполнил." надо доплнить статусом - непонятно что произошло, но заявку сняли от греха подальше :).

в принципе,Мтхаил, можно же еще одно свойсво ввести - бизнес состояние. зачем ломать старое, которое широко используется?

Спасибо:

Mikhail Sukhov

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


Спокойствие, еще пока ничего не сломано. Поэтому и консультируюсь. Если бы сломал - уже не до консультации.

  1. order.IsMatched() будет короче, чем order.State == OrderStates.Matched
  2. А вот тут мне кажется логика хромает. Кидать надо то что осталось, и не важно, полностью исполнилось или нет.
  3. И опять неправильный на мой взгляд подход. Завтра Вы сделаете, чтобы робот сам снимал заявки по определенному условию и уже не различите, кто снимал, человек или робот. Надо коллекцию делать из тех заявок, что снимаются программно и что ручками. Если заявка снята челом, то она будет отсутствовать в той коллекции.
  4. Как плюс. Вы снимаете заявку. Вы какого статуса дожидаетесь? Если только Canceled то не правильно. Надо два. А так будет только одна проверка.
  5. Опять же, из выше приведенной логики следует, что не так важно, снята заявка или исполнилоась или активна все еще, а сколько реализована контрактов.
  6. Matched/Canceled - бизнес состояния. Я так и писал.
  7. Status - Вы его используете? Я нет.
Спасибо:

Tauler

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


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

if(order.State == OrderStates.Done && otder.IsCancel) делаем одно (выяснем сколько контрактов таки прошло и на это колво бросаем правую)

if( order.State == OrderStates.Done && otder.IsMatched)

делаем другое (бросаем правую чтобы перекрыто все контракты из левой)

if( order.State == OrderStates.Done && otder.IsPartialyMatched)

снова определяем сколько контрактов таки прошло?

а если часть заявки прошла, а потом ее сняли? какой статус будет?

Спасибо:

Mikhail Sukhov

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


Не надо так. order.IsCanceled() достаточно

order.IsMatched()

order.State == Done order.IsPartiallyMatched() = true

Спасибо:


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

loading
clippy