Я пользуюсь нижеприведенным вариантом для получения подвыборки строк из таблицы, в данном примере из таблицы orders.
В строке if matchItem(item.flags, item.class_code, item.sec_code) then я дополнительно проверяю, что полученная заявка соответствует изначальному фильтру на случай, если таблица orders будет изменена и в нее будут добавлены новые заявки в произвольном порядке.
Два вопроса:
1) Необходима ли повторная проверка или можно полагаться, что а) строки не удаляются, б) новые заявки помещаются в конец таблицы и в) порядок строк не меняется в течение торгового дня? Если так, применима ли такая модель ко всем таблицам в Quik (строки никогда не удаляются, новые добавляются в конец, порядок строк зафиксирован).
2) По ходу биржевого дня количество строк в таблице постоянно увеличивается и доходит до 20000, в результате постоянного изменения лимитных заявок по цене (снять старую, выставить новую по другой цене). При этом активных заявок только несколько сотен. При каком размере таблицы имеет смысл задуматься о производительности функции find_active_orders и как ее можно было ускорить для случая когда практически все заявки неактивные?
| Код |
|---|
function find_active_orders(class_code, sec_code)
function matchItem(_flags, _class_code, _sec_code)
return bit.band(_flags, 0x1) ~= 0
and _class_code == class_code
and _sec_code == sec_code
end
local indexes = SearchItems("orders", 0, getNumberOf("orders")-1, matchItem, "flags,class_code,sec_code")
if indexes == nil then return {} end
local res = {}
for i=1, #indexes do
local item = getItem("orders", indexes[i])
if matchItem(item.flags, item.class_code, item.sec_code) then
res[#res+1] = item
end
end
return res
end |
В строке if matchItem(item.flags, item.class_code, item.sec_code) then я дополнительно проверяю, что полученная заявка соответствует изначальному фильтру на случай, если таблица orders будет изменена и в нее будут добавлены новые заявки в произвольном порядке.
Два вопроса:
1) Необходима ли повторная проверка или можно полагаться, что а) строки не удаляются, б) новые заявки помещаются в конец таблицы и в) порядок строк не меняется в течение торгового дня? Если так, применима ли такая модель ко всем таблицам в Quik (строки никогда не удаляются, новые добавляются в конец, порядок строк зафиксирован).
2) По ходу биржевого дня количество строк в таблице постоянно увеличивается и доходит до 20000, в результате постоянного изменения лимитных заявок по цене (снять старую, выставить новую по другой цене). При этом активных заявок только несколько сотен. При каком размере таблицы имеет смысл задуматься о производительности функции find_active_orders и как ее можно было ускорить для случая когда практически все заявки неактивные?