O, H, L, C, V, T

Функции в качестве параметра принимают индекс свечи и возвращают соответствующее значение. Время свечи возвращается с точностью до миллисекунд в виде Формат даты и времени свечи.
Open = ds:O(1)
High = ds:H(1)
Low = ds:L(1)
Close = ds:C(1)
Volume = ds:V(1)
week_day = ds:T(1).week_day
count = ds:T(1).count

Формат даты и времени свечи

Параметр Тип Описание
count NUMBER количество тиковых интервалов в секунду. Может принимать значения от «1» до «10000» включительно.
ms NUMBER Миллисекунды
sec NUMBER Секунды
min NUMBER Минуты
hour NUMBER Часы
day NUMBER День
week_day NUMBER Номер дня недели
month NUMBER Месяц
year NUMBER Год

Примеры:

  • 1
-- Пример получения первой свечи текущего дня
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