Добрый день. Иногда в событии NewMyTrades приходят сделки, у которых значение в ордере Id равно нулю.
В исходниках плазы нашел вот это место, касающееся МоихСделок:
if (orderTransactionId != 0)
{
AddMyTrade(security, 0, orderTransactionId, trade);
}
Это баг или фича?
Комментарии (15)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Воспроизвести возможно?
Навряд ли. Большую часть времени все нормально. Из 1400 сделок 30 имеют ордер ноль. Как воспроизвестись не знаю.
А как идет проверка?
Все сделки в SQL записываю. В них нахожу сделки с нулевым ордером.
Понятно... Надо конечно упрощать проверку. Потому что ошибка может быть вовсе не в стокшарпе.
Немного не понял, какую проверку упрощать? Данные льются в SQL при поступлении. Я ничего не проверяю.
Насчет «ошибки не в стокшарпе», возможно. Но при этом параллельно эти же сделки заливаются через Квик в другой SQL. И в другом SQL данные нормальные. Это, конечно, не подтверждает баг в стокшарпе.
Ну и плюс «AddMyTrade(security, 0, orderTransactionId, trade);» Возможно в этом месте что-то происходит не так? Постфактум не присваивается номер?
Работает ли корректно метод «AddMyTrade(security, 0, orderTransactionId, trade);»? Может быть до моего случая ни у кого не возникала ситуация, когда сделка приходит раньше ордера? Может быть этот метод в StockSharp.Algo.BaseTrader работает неверно?
Зачем при добавлении своей сделки в методе «PlazaTrader.OnTradeInserted(PlazaRecord record)» использовать метод «AddMyTrade(security, 0, orderTransactionId, trade);» с параметром заявки равным нулю?
Ведь таблица «deal» потока «FORTS_FUTTRADE_REPL» содержит поля «id_ord_sell» или «id_ord_buy» которые и есть номер заявки, для данной сделки.
AddMyTrade работает именно так, как нужно.
А на второй вопрос есть ответ? :)
Как ты по сделке определишь по какому именно ордеру она прошла - по ord_sell или по ord_buy? Они оба != 0
http://stocksharp.com/posts/m/21301/ И на первый, и на второй, и на третий.
В этот момент известен orderTransactionId. Зная его можно найти заявку, которую мы отправляли и посмотреть ее направление. Зная направление, можно понять, какой наш orderid (ord_sell или по ord_buy).
OrderId придёт по изменению ордера, а не по событию новых моих сделок.
Это нормальная ситуация - у тебя сделка пришла раньше ордера. При этом объект ордер определён - ссылочная связанность есть. По событию OrderChanged или NewOrder можно будет получить этот же ордер с уже проставленным Id.
C какой целью по событию получения своих сделок знать Order.Id? Есть Order.TransactionId, который характеризует ордер.
Миша, Саша, спасибо за ответы.
Это оказался не баг, а фича. Не смотря на то, что информация о OrderId имеется на момент прихода новой сделки, событие NewMyTrades не гарантирует, что OrderId будет проставлен в заявке. Ситуацию понял.