Простого решения нет, но первая мысль, которая приходит в голову следующая:
Предположим, что Вы выставили заявку на покупку (bid) по классу SPBFUT инструмент RIZ6, по цене 123.45 (my_order_price) с количеством 10 (my_order_qty)
Код |
---|
is_run = true
_bid = {}
function OnQuote(class, sec)
if class =="SPBFUT" and sec == "RIZ6" then
ql2_bid = getQuoteLevel2(class, sec).bid
table.insert(_bid, ql2_bid)
end
end
function OnStop(signal)
is_run = false
end
function main()
while is_run do
if #_bid == 1 then
for k,q in ipairs(_bid[1]) do
if q.price == my_order_price and q.quantity == my_order_qty then
message(string.format("Моя заявка %i в очереди", k))
elseif q.price == my_order_price and q.quantity > my_order_qty then
message(string.format("Моя заявка %i в очереди, но так же по данной цене еще %i лотов не моей заявки", k, q.quantity - my_order_qty))
end
end
_bid = {}
end
sleep(100)
end
end
|
Код не проверял, это просто пример логики решения задачи, ее можно расширять, с учетом, что заявка может быть не только на покупку, а так же заявка может исполниться, т.е. нужно вводить проверку, что заявка еще активна, + нужно учесть, что некоторые рынки транслируют не полный стакан, например, 10x10 и Ваша заявка может выйти за эти границы и не отображаться в стакане, тогда уже точно не узнать какая она в очереди, но точно можно будет утверждать, что она больше 10. Также если торговля по инструменту оживленная, OnQuote() может сработать очень часто, и тогда в таблице _bid будет не одна запись, и в этом случае их придется обрабатывать все в цикле. Аналогично, можно реализовать проверку очередности при срабатывании OnOrder(), т.е. в тот момент, когда Ваша заявка только выставилась.