Здравствуйте. Возможно ли написать скрипт на Lua, который бы создавал таблицу со значениями индикатора ATR.
Заголовками столбцов были бы даты(30 последних торговых сессий), заголовки строк — короткое наименование ТОП-20 фьючерсов по обороту.
Нужно, чтобы в ячейках таблицы были значения ATR за n-ный день в таком-то фьючерсе.
Спасибо.



function main()
local Trades = {}
local comission = 0
SearchItems('trades', 0, getNumberOf('trades')-1,
function (class_code, trade_num, flags, exchange_comission)
if class_code == 'SPBFUT' or class_code == 'SPBOPT' then -- Учитываем только сделки на срочной секции
comission = comission + exchange_comission
local t = {flags & 0x4, exchange_comission}
if Trades[class_code] then
Trades[class_code][trade_num] = t
else
Trades[class_code] = {[trade_num] = t}
end
end
return false
end,
'class_code,trade_num,flags,exchange_comission')
local total = 0
local maker = 0
local taker = 0
local comission2 = 0
SearchItems('all_trades', 0, getNumberOf('all_trades')-1,
function (class_code, trade_num, flags, sec_code)
if Trades[class_code] then
local t = Trades[class_code][trade_num]
if t then
total = total + 1
if flags & 0x1 ~= 0 then
if t[1] == 0 then
maker = maker + 1
else
taker = taker + 1
comission2 = comission2 + t[2]
end
elseif flags & 0x2 ~= 0 then
if t[1] == 0 then
taker = taker + 1
comission2 = comission2 + t[2]
else
maker = maker + 1
end
else
comission2 = comission2 + t[2]
end
end
end
return false
end,
'class_code,trade_num,flags,sec_code')
message(string.format('total: %u\nmaker: %u\ntaker: %u\n\ncomission\nсейчас: %.2f\nскальпинг: %.2f\nстанет: %.2f', total, maker, taker, comission, comission / 2, comission2 * 3))
endfunction main
-- пример работы функции. Приостановка на клиринг
local ServerTime = getInfoParam("SERVERTIME")
local tTime = {"14:00:00","14:05:00"} -- время начала/окончания неторгового периода
local result = diffTime(tTime[1], tTime[2])
if ServerTime>=tTime[1] and ServerTime<=tTime[2] then
message("Приостановка работы скрипта на ".. tostring(result).." сек.")
sleep(result*1000) -- время приостановки в секундах. Время в Quik в миллисек., поэтому * 1000
end
end
function diffTime(time1, time2)
-- возвращает разницу в секундах между time2-time1; либо 0, если time1 > time2
-- time1 = "14:00:00"
-- time2 = "14:05:00"
-- result = diffTime(time1, time2) -- = 300 секунд
local dt1 = {}
local dt2 = {}
local dTime1 = 0
local dTime2 = 0
local result = 0
dt1.hour,dt1.min,dt1.sec = string.match(time1,"(%d*):(%d*):(%d*)")
for key,value in pairs(dt1) do
dt1[key] = tonumber(value)
end
dt2.hour,dt2.min,dt2.sec = string.match(time2,"(%d*):(%d*):(%d*)")
for key,value in pairs(dt2) do
dt2[key] = tonumber(value)
end
--часы*3600 + минуты*60 + секунды.
dTime1 = dt1.hour*3600 + dt1.min*60 + dt1.sec
dTime2 = dt2.hour*3600 + dt2.min*60 + dt2.sec
result = dTime2 - dTime1
if result <= 0 then
return 0
else
return result
end
end