Добрый день! Подскажите пожалуйста насчет поведения функции CreateDataSource.Не могу понять, почему функция выдаёт наверное значение по минимуму. Хотя по максимуму выдаётся все верно.
Код функции
Код функции
Скрытый текст |
---|
-- Пример получения минимума, максимума за определенный период времени, текущей сессии function main() -- Создаем таблицу со всеми свечами нужного класса и кода ds, error_desc = CreateDataSource("TQBR", "SBER", INTERVAL_D1) ds:SetEmptyCallback() sleep(1000) -- Ограничиваем количество попыток (времени) ожидания получения данных от сервера local try_count = 100 -- Ждем пока не получим данные от сервера, -- либо пока не закончится время ожидания (количество попыток) while ds:Size() == 0 and try_count < 1000 do sleep(100) end -- Если от сервера пришла ошибка, то выведем ее и прервем выполнение if error_desc ~= nil and error_desc ~= "" then message("Ошибка получения таблицы свечей:" .. error_desc) return 0 end -- Текущий день месяца (1 - 31) local today_day = tonumber(os.date("%d")) -- Текущая свеча (с которой начинаем поиск) local current_candle = ds:Size() -- Максимальное количество свечей для поиска -- не может быть больше чем общее количество свечей в таблице local max_candles = math.min(1000, ds:Size()) -- Индекс свечи с максимумом local max_candle_index = nil -- Индекс свечи с минимумом local min_candle_index = nil -- Время начала поиска local start_time = 100000 -- Время окончания поиска local end_time = 143600 message(to_human_time(ds:T(ds:Size()))) -- Цикл по всем свечам и поиск в нужном интервале while current_candle > ds:Size() - max_candles do -- Если это уже другая сессия -- Если текущая свеча в нашем интервале if max_candle_index == nil or ds:H(current_candle) > ds:H(max_candle_index) then max_candle_index = current_candle end if min_candle_index == nil or ds:L(min_candle_index) > ds:L(current_candle) then min_candle_index = current_candle end current_candle = current_candle - 1 end message("MAXIMUM:\n" .. " INDEX: " .. tostring(max_candle_index) .. " PRICE: " .. tostring(ds:H(max_candle_index)) .. " TIME: " .. to_human_time(ds:T(max_candle_index)) ) message("MINIMUM:\n" .. " INDEX: " .. tostring(min_candle_index) .. " PRICE: " .. tostring(ds:L(min_candle_index)) .. " TIME: " .. to_human_time(ds:T(min_candle_index)) ) end function to_human_time(time) return tostring(string.format("%02d", time.hour) .. ":" .. string.format("%02d", time.min) .. ":" .. string.format("%02d", time.sec)) end function time_to_number(time) return tonumber(string.format("%02d", time.hour) .. string.format("%02d", time.min) .. string.format("%02d", time.sec)) end |