ds1 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "last") ds2 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1) ds3 = CreateDataSource("SPBFUT", "RIU3", INTERVAL_M1, "bid")
Параметр | Тип | Описание |
---|---|---|
INTERVAL_TICK | - | Тиковые данные |
INTERVAL_M1 | - | 1 минута |
INTERVAL_M2 | - | 2 минуты |
INTERVAL_M3 | - | 3 минуты |
INTERVAL_M4 | - | 4 минуты |
INTERVAL_M5 | - | 5 минут |
INTERVAL_M6 | - | 6 минут |
INTERVAL_M10 | - | 10 минут |
INTERVAL_M15 | - | 15 минут |
INTERVAL_M20 | - | 20 минут |
INTERVAL_M30 | - | 30 минут |
INTERVAL_H1 | - | 1 час |
INTERVAL_H2 | - | 2 часа |
INTERVAL_H4 | - | 4 часа |
INTERVAL_D1 | - | 1 день |
INTERVAL_W1 | - | 1 неделя |
INTERVAL_MN1 | - | 1 месяц |
Параметр | Тип | Описание |
---|---|---|
SetUpdateCallback | function | Позволяет задать пользователю функцию обратного вызова для обработки изменившихся свечек |
O | function | Получить значение Open для указанной свечи |
H | function | Получить значение High для указанной свечи |
L | function | Получить значение Low для указанной свечи |
C | function | Получить значение Close для указанной свечи |
V | function | Получить значение Volume для указанной свечи |
T | function | Получить значение Time для указанной свечи |
Size | function | Возвращает текущий размер (количество свечек в источнике данных) |
Close | function | Удаляет источник данных, отписывается от получения данных |
SetEmptyCallback | function | Позволяет получать данные с сервера без указания функции обратного вызова |
-- Пример получения первой свечи текущего дня function main() -- Создаем таблицу со всеми свечами нужного интервала, класса и кода ds, error_desc = CreateDataSource("QJSIM", "SBER", INTERVAL_H1) -- Ограничиваем количество попыток (времени) ожидания получения данных от сервера local try_count = 0 -- Ждем пока не получим данные от сервера, -- либо пока не закончится время ожидания (количество попыток) while ds:Size() == 0 and try_count < 1000 do sleep(100) try_count = try_count + 1 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 first_candle_index = nil -- Цикл пока не нашли первую свечу дня либо не проверили -- максимальное количество свечей while first_candle_index == nil and current_candle > ds:Size() - max_candles do -- Если день текущей свечи не совпадает с текущим днем if tonumber(ds:T(current_candle).day) ~= today_day then -- Тогда индекс искомой свечи first_candle_index = current_candle - 1 message("Найден индекс: " .. tostring(first_candle_index)) end current_candle = current_candle - 1 end -- Если индекс был найден if first_candle_index ~= nil then message("Первая свеча дня:") message(" индекс: " .. tostring(current_candle)) message(" время: " .. tostring(ds:T(current_candle).hour) .. ":" .. tostring(ds:T(current_candle).min) .. ":" .. tostring(ds:T(current_candle).sec)) message("Последняя свеча предыдущего дня:") message(" индекс: " .. tostring(current_candle - 1)) message(" время: " .. tostring(ds:T(current_candle - 1).hour) .. ":" .. tostring(ds:T(current_candle - 1).min) .. ":" .. tostring(ds:T(current_candle - 1).sec)) -- Если индекс найти не удалось else message("Первая свеча дня не найдена. Не достаточно свечей для поиска (" .. tostring(ds:Size()) .. ").") message("Самая дальняя свеча:") message(" индекс: " .. tostring(1)) message(" время: " .. tostring(ds:T(1).hour) .. ":" .. tostring(ds:T(1).min) .. ":" .. tostring(ds:T(1).sec)) end end
-- Пример получения минимума, максимума за определенный период времени, текущей сессии function main() -- Создаем таблицу со всеми свечами нужного класса и кода ds, error_desc = CreateDataSource("QJSIM", "SBER", INTERVAL_M1) -- Ограничиваем количество попыток (времени) ожидания получения данных от сервера 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 tonumber(ds:T(current_candle).day) ~= today_day then break end -- Если текущая свеча в нашем интервале if time_to_number(ds:T(current_candle)) >= start_time and time_to_number(ds:T(current_candle)) <= end_time then 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 end current_candle = current_candle - 1 end message("Максимум:\n" .. " Индекс: " .. tostring(max_candle_index) .. " Цена: " .. tostring(ds:H(max_candle_index)) .. " Время: " .. to_human_time(ds:T(max_candle_index)) ) message("Минимум:\n" .. " Индекс: " .. tostring(min_candle_index) .. " Цена: " .. tostring(ds:L(min_candle_index)) .. " Время: " .. 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