Всем привет. Я в квике и в луа новичок, но твердо решил разобраться и написать несколько скриптов. Начать решил со скрипта, который из всех торгующихся бумаг выбирает наиболее ликвидные. На данный момент пока получилось только вытащить в экранную таблицу все бумаги и их текущий оборот (VALTODAY), скрипт ниже. Теперь мне необходимо отсортировать полученную таблицу программно по полю "Оборот" от наибольшего значения к наименьшему и выбрать оттуда первые 32 бумаги (т.е. наиболее ликвидные). Как реализовать эту сортировку - ума не приложу. Читал, что нужно сделать отдельную таблицу в виде массива и его уже сортировать через table.sort, но как опросить эту экранную таблицу тоже непонятно и в хелпе ничего такого не нашел... Помогите пожалуйста )).
Код |
---|
IsRun = true
class_code="QJSIM"
function main()
t_id = AllocTable()
AddColumn(t_id, 1, "Бумага", true, QTABLE_STRING_TYPE, 20)
AddColumn(t_id, 2, "Оборот", true, QTABLE_DOUBLE_TYPE, 14)
t = CreateWindow(t_id)
local seclist = {}
local valtod = {}
local secstring = ""
local iRowInOutTable = 1
local list = {}
local val = 0
local sorttable = {}
--list = getClassesList()
--message(list)
seclist = getClassSecurities(class_code)
for SecCode in string.gmatch(seclist, "([^,]+)") do
i=1
InsertRow(t_id, i)
valtod = getParamEx(class_code, SecCode, "VALTODAY").param_value
seccode = SecCode
val = tonumber(valtod)
--message(tostring(val))
SetCell(t_id, iRowInOutTable, 1, seccode)
SetCell(t_id, iRowInOutTable, 2, tostring(math_round(val, 0) ) )
i=i+1
end
end
function math_round (num, idp)
local mult = 10^(idp or 0)
return math.floor(num * mult + 0.5) / mult
end
end
|