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