Top.Mail.Ru

Как получать значения индикаторов в скрипте на LUA?

Как получать значения индикаторов в скрипте на LUA?

Юный программист задал мне вопрос, есть ли возможность получать значения технических индикаторов в скрипте, написанном для QUIK. Я подумал, что эта информация может быть интересна и другим участникам сети БАЗАР.

В скриптах на Lua для терминала QUIK такая техническая возможность реализована. Это одна из самых востребованных функций языка QLua.  Для этого используется встроенная функция getIndicatorData.


Как работает getIndicatorData

Функция позволяет обратиться к любому индикатору, который запущен на графике, и получить массив его значений. Эти данные можно присвоить переменным, обработать, сравнить и использовать для принятия торговых решений.


Синтаксис функции:

values, name = getIndicatorData(param_name, line, source)

Аргументы:

param_name (строка): Обязательный параметр. Это уникальное имя (идентификатор) индикатора, к которому вы хотите обратиться.

line (число): Номер линии индикатора (если у индикатора несколько линий, например, у MACD их три). Если линия одна, обычно используется 1.

source (строка): Источник данных. source (строка).

Источником данных может быть "Chart", "Current", "All".

Чаще всего используется "Chart". Значения индикатора будут получены с того графика, на котором запущен скрипт.


Что возвращает функция:

values - основной результат. Функция возвращает таблицу (массив) Lua, содержащую числовые значения индикатора для каждого бара на графике.

Name - строковое имя индикатора.


Пошаговый алгоритм использования

Чтобы получить значения индикатора в скрипте, нужно выполнить следующие действия.

Шаг 1. Узнать имя индикатора (param_name)

Самый важный этап. Вы должны знать точное имя, под которым индикатор зарегистрирован в терминале.

Запустите нужный индикатор на графике.

В меню графика выберите «Редактировать индикатор...».

В открывшемся окне найдите поле «Имя (для использования в QLUA)». Скопируйте это значение. Оно и будет вашим param_name.

Шаг 2. Написать код в скрипте

В вашем скрипте вы вызываете функцию getIndicatorData, присваивая результат переменной.


Пример кода

Предположим, на графике с фьючерсом Si у вас запущен индикатор Hull Moving Average (HMA). Вы узнали, что его имя для QLua — "HMA_12" (где 12 — период).

Вот как будет выглядеть код для получения его значений:

-- Период расчета (например, последние 10 баров)

local bars_to_check = 10

-- Уникальное имя индикатора на графике

local indicator_name = "HMA_12"

-- Номер линии индикатора (у HMA линия одна)

local line_number = 1

-- Вызываем функцию для получения данных

local hma_values, indicator_full_name = getIndicatorData(indicator_name, line_number, "Chart")

-- Проверяем, успешно ли получены данные

if hma_values ~= nil then

    message("Данные индикатора '" .. indicator_full_name .. "' успешно получены.", 1);

-- Присваиваем значения последних баров переменным

    local current_hma = hma_values[0] -- Значение на текущем (нулевом) баре

    local previous_hma = hma_values[1] -- Значение на предыдущем баре.

    -- Выводим значения в журнал сообщений QUIK

    message("Текущее значение HMA: " .. current_hma, 1)

    message("Предыдущее значение HMA: " .. previous_hma, 1)

    -- Простое условие: если HMA растет, выводим сообщение

    if current_hma > previous_hma then

        message("Тренд восходящий!", 1)

    else

        message("Тренд нисходящий или флэт.", 1)

    end

else

    message("Ошибка: не удалось получить данные индикатора. Проверьте его имя.", 4)

end

Важные нюансы

1. Индексация массива. В QLua, как и во многих других языках программирования, индексация массива значений начинается с 0 values[0] — это текущее (последнее) значение на графике, values[1] — предыдущее, и так далее.

2. Синхронизация. Скрипт получает данные только с того графика (таймфрейма и инструмента), на котором он запущен.

3. Производительность. Частый вызов getIndicatorData в цикле может замедлять работу терминала. Используйте его разумно. Например, запускайте его только один раз на каждом баре. О том, как это сделать, будет мой следующий пост.

Не пропустите!

 

0 / 2000
Ваш комментарий
Тебя ждёт миллион инвесторов
Регистрируйся бесплатно, чтобы учиться у лучших, следить за инсайтами и повторять успешные стратегии
Мы используем файлы cookie, чтобы улучшить ваш опыт на нашем сайте
Нажимая «Принять», вы соглашаетесь на использование файлов cookie в соответствии с Политикой конфиденциальности. Можно самостоятельно управлять cookie через настройки браузера: их можно удалить или настроить их использование в будущем.
Как получать значения индикаторов в скрипте на LUA | Базар