Серьезный трабл с ассинхронным режимом
Михаил, у меня сложилось ощущение что ассинхронный режим работает
иногда некорректно. поппытаюсь сейчас объяснить. Я пишу арбитражера,
сут ье го работы - выставить заявку при появлении определенного
сигнала и дальше 2 варианта - либо по исполнении ее выброзить еще одну
заявку, либо , если сигнал ушел - снять первую заявку.
Это преамбула. (бага на версии 2.0.1, т.к. с 2.1 у меня известные вам
траблы)
Амбула - т.к. режим асинхронный, когда уходит сигнал, успевает пройти
запрос на снятие раз 15, прежде чем заявка снимется и поменяет статус
на Canceled, у меня как только заявка становится Canceled или Matched
срабатывает ветка в коде, кторая проверяет Volume-Blance и на эту
разницу выкидывает вторую заявку (если Canceled), либо (если Matched)
выкидывают вторую заявку на Volume первой.И у меня складывается
ощущения, что в какой то момент сбивается или нарушается (не знаю как
скзаать) процесс обновления полей в экземпляре заявки. Как эт
овыглядит (в прилагаемом скрине, я далее для удобства буду давать
только послдение 4 цифры номера заявки)
Сработал сигнал, выставилась заявка 6984, сигнал ушел, я отправляю
trader.CancelOrder(order) до тех пор пока order.State != Canceled. как
только Canceled, делаю order = null и дальше слушать сигнал.В логах
так и написано - заявка стала Canceled, Balance = 2
Сигнал срабатывает второй раз, выставялю снвоа заявку order = new
Order () .... (перменная та же самая),
trader.RegisterOrder(order). Высталяется заявка (номер у нее 8248)
Что происходит далее - на бирже заявка исполняется, но сигнал уходит.
Робот честно пытается ее отменить до тех пор, пока статус у нее
Active. как только статус заявки меняется на Исполнена(в квике), робот
видит изменение статуса, но! в логах пишет мне что заявка Canceled, и
Balance у нее 2. (то есть данные из заявки 6984). ну и соответсвенно
не выкидаывает правую часть. и другая бага (наверно изза тгого, что
уходит 10-15 запросов на снятие заявки до тех пора пока она станет
Canceled - были случаи ,когда аявки часто тсавилис снимались, что
например идут заявки 1,2,3,4,5,6 , они выставляются- снимают, но
по логам заявка под номером например 4 вообще не снималась.То есть
робот ее не снимал.Может быть это изза тго, что между первым запросом
на снятие и реальным изменением ее статуса на Canceled на сервер
уходит штук 15 транзакций на снятие?
скрин списка заявок - файл 07.07.png