Добрый день. Иногда в событии NewMyTrades приходят сделки, у которых значение в ордере Id равно нулю.
В исходниках плазы нашел вот это место, касающееся МоихСделок:
if (orderTransactionId != 0)
{
AddMyTrade(security, 0, orderTransactionId, trade);
}
Это баг или фича?
Comentários (15)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Воспроизвести возможно?
Навряд ли. Большую часть времени все нормально. Из 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 будет проставлен в заявке. Ситуацию понял.