4.1 OrdersChanged срабатывает 2 раза
//изменение заявок
Trader.OrdersChanged += orders => this.GuiAsync(() =>
{
log("Кол-во изменивших статус заявок: " + orders.Count());
foreach (Order order in orders)
{
log(" Заявка:" + order.Id + " " + order.Security.Code + " Статус:" + order.State + "" + order.Direction + " цена:" + order.Price + " Остаток=" + order.Balance);
}
});
12:16:36.958 Кол-во изменивших статус заявок: 1 12:16:36.958 Заявка:2764620701 GZM2 Статус:DoneSell цена:16728 Остаток=1 12:16:36.963 Кол-во изменивших статус заявок: 1 12:16:36.963 Заявка:2764620701 GZM2 Статус:DoneSell цена:16728 Остаток=1 12:16:36.968 Кол-во изменивших статус заявок: 1
В 4.0.23 такого не было
Kommentare (17)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Распечатайте все поля order чтоб понять что менялось К примеру - время
Вроде ничего не менялось.
12:08:44.723 Кол-во изменивших статус заявок: 1 12:08:44.724 Заявка:2766635123 LKM2 Статус:DoneSell цена:17348 Остаток=0 снята: 00:00:00.2559983 Done 18.04.2012 12:08:44 Limit 12:08:44.724 Кол-во изменивших статус заявок: 1 12:08:44.724 Заявка:2766635123 LKM2 Статус:DoneSell цена:17348 Остаток=0 снята: 00:00:00.2559983 Done 18.04.2012 12:08:44 Limit
order.Time с мс выведите
13:14:38.095 Кол-во изменивших статус заявок: 1 13:14:38.095 Заявка:2766922764 GZM2 Статус:DoneBuy цена:16342 Остаток=0 снята: 00:00:00.3223834 Done вр:18.04.2012 13:14:37 ms:943 type:Limit 13:14:38.096 Кол-во изменивших статус заявок: 1 13:14:38.096 Заявка:2766922764 GZM2 Статус:DoneBuy цена:16342 Остаток=0 снята: 00:00:00.3223834 Done вр:18.04.2012 13:14:37 ms:943 type:Limit
4.1 последняя? Я правильно понимаю что это происходит во время сделки по заявке? order.Volume тоже 1?
Та же фигня. Событие изменения ордера приходит 2 раза, причем это уже очень давно, не только в последней версии.
UPD: Посмотрел внимательно, два раза приходит только когда ордер отменен, с интервалом 20-50мс, причем это именно события ордер изменен (а не событие отмены ордера). Странно, т.к. после того как ордер отменен по нему вроде как ничего уже придти не может
Лечили. Теперь не должно выкидываться если не меняются поля.
Заявка кидается в стакан или лимитка глубоко в стакан? Volume чему равен?
Мог измениться CancelTime. В первом случае мы его выставили по времени шлюза - когда пришёл ответ на транзакцию. Во второй раз - по времени из ордер лога, т.е. время отмены ордера на бирже, что более правильно.
Т.е. проверяйте все поля в событиях. Конкретно - CancelTime, Balance, State
Заявка лимитная по ask при покупке,bid при продаже Добавил объем, он тоже не меняется.
14:02:44.841 Кол-во изменивших статус заявок: 1 14:02:44.842 Заявка:2767137179 GZM2 Статус:DoneBuy цена:16286 Остаток=0 снята: 00:00:00.1031914 Done вр:18.04.2012 14:02:44 ms:548 type:Limit vol=1 14:02:44.842 Кол-во изменивших статус заявок: 1 14:02:44.842 Заявка:2767137179 GZM2 Статус:DoneBuy цена:16286 Остаток=0 снята: 00:00:00.1031914 Done вр:18.04.2012 14:02:44 ms:548 type:Limit vol=1
Сделал небольшой фикс, смотрите после апдейта рефов на codeplex
Еще раз подниму вопрос, т.к. не все тут ясно. Допустим приходит некий сигнал на заход в позицию. Я выставляю заявку на покупку 20-ти контрактов. Через 30мс сигнал пропадает и я должен отменить/закрыть позицию. Я ставлю заявку на отмену. Через 30мс приходит событие OrderChanged, в котором говорится что моя заявка отменена, и мой робот соответственно забывает про эту заявку и про то, что вообще какую-то позицию собирался набрать. НО! Через еще 20мс опять приходит событие OrderChanged, в котором говорится что моя заявка не просто отменена, а по ней еще успел пройти обьем 10 контрактов. Мой робот на это не реагирует, т.к. уже забыл про отмененную заявку. Вопрос! Вроде как после первого события заявка уже Done, как мне понять, что по ней еще что-то придти может?
После снятия 1 заявки биржа присылает ответ сколько лотов осталось (order.Balance). Что мы и проставляем. Поэтому можете посмотреть в событии OrderChanged на order.Balance
Да, получается что потом тоже может придти OrderChanged, даже после Done, но изменений в заявке кроме LastChangeTime не будет - Balance останется прежним. Какие предложения чтоб этого не было?
Очень странно. Мне сначало пришло что Balance == 20, а потом что Balance == 10. В обоих случаях IsCanceled == true.
Версия PlazaTrader насколько старая? Должна быть хотя бы майская.
Как вариант - если биржа присылает ответ по транзакции снятия что Balance > 1 и Balance != Volume - не посылать событие изменения заявки.
Не майская, попробую новую поставить. Просто лень было тестить, как в новой версии перерегистрация реализована, потому не обновлял.