Сделал в итоге по другому, через массив и даже работает ).
Если коротко - получаем данные на инструмент через CreateDataSource, заносим оттуда номер свечи в массив, обновляем через SetUpdateCallback и дополняем массив , берем 2 крайних значения индекса из массива, разделяем их и сравниваем между собой, если новый индекс не равен прошлому = новый бар вуаля....
Дайнное действо получается из-за того, что CreateDataSource сыпет индексы с гораздо большей скоростью, чем появляется минутный бар, соответственно получаем много одинаковых номеров одной и той-же свечи.
Рабочий код по определению нового бара ниже. Пожелания и комментарии приветствуются. Но мне бы хотелось туда еще добавить, время запуска данной процедуры проверки, если робот на М5, то секунд за 30 до окончания времени было бы хорошо стартануть, хотя может и так не будет сильно грузиться память, надо посмотреть.
stopped = false
function OnStop()
stopped = true
return 5000
end
class_code = "QJSIM"
sec_code = "SBER"
interval = INTERVAL_M1
data = {}
function cb(index)
local t = ds:Size(index)
table.insert(data, tostring(index))
end
function string:split(delimiter)
local result = { }
local from = 1
local delim_from, delim_to = string.find( self, delimiter, from )
while delim_from do
table.insert( result, string.sub( self, from , delim_from-1 ) )
from = delim_to + 1
delim_from, delim_to = string.find( self, delimiter, from )
end
table.insert( result, string.sub( self, from ) )
return result
end
function main()
ds=CreateDataSource(class_code,sec_code,interval)
ds:SetUpdateCallback(cb)
while stopped == false do
rows = #data
if rows > 1 then -- проверяем что массив не пустой
list = table.concat(data, ',', #data - 1, #data) -- забираем из таблицы 2 последних индекса
res = list:split(",") -- разделяем 2 индекса и сравниваем между собой
candle_last_index = res[2] -- новый индекс нового бара
candle_index_1 = res[1] -- прошлый индекс перед новым баром
if candle_last_index ~= candle_index_1 then
new_candle = true
else
new_candle = false
end
end
message('rows = '..tostring(rows)..
'\n candle_index-1 = '..tostring(candle_index_1)..
'\n candle_last_index = '..tostring(candle_last_index)..
'\n new_candle = '..tostring(new_candle))
sleep(300)
end
end