QUIK. QLua. Индикаторы технического анализа

Материал из ТХАБ.РФ
Версия от 15:32, 28 октября 2019; Админ (обсуждение | вклад) (5. Считаем среднее)

Перейти к: навигация, поиск

1. Как устроены индикаторы в QUIK

Основой для построения всех индикаторов в QUIK является источник данных (далее ИД). Источник Данных представляет собой массив, в котором элементы являются структурами и имеют 6 полей:

1. Open;

2. High;

3. Low;

4. Close;

5. Volume;

6. Time.

Это значит, что все элементы массива в Источнике Данных представляют собой свечи. В случае тиковых данных поля с 1-го по 4-е буду иметь одно значение, и оно будет совпадать со значением параметра в этот момент времени. Источники данных могут быть интервальными графиками (тики, 1 минута, 5 минут и т.д.), рассчитанными по таблице всех сделок или по изменениям параметра торгуемого инструмента.

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

Индикатор не может выступать источником данных для другого индикатора.

2. Минимальный код индикатора

ВАЖНО!! Кодировка д.б. Windows-1251 !!

Пример 1 (ex1.lua)

Settings =
{
    Name = "Пример Графика"
} 
function Init() 
    return 1 
end
function OnCalculate(index) 
    return nil
end


Рассмотрим подробнее, что происходит при добавлении такого индикатора на график.

При создании нового индикатора (пункт Добавить график (индикатор)… контекстного меню графика) терминал сканирует папку LuaIndicators в директории Рабочего места QUIK на наличие в ней скриптов, отвечающих следующим требованиям:

1. В скрипте определена глобальная таблица Lua с именем Settings

2. Определена функция Init()

3. Определена функция OnCalculate()

Поле Name в таблице Settings будет определять имя индикатора, с которым он будет отображаться в диалоге Добавить График.

Если скрипт не удовлетворяет перечисленным выше требованиям или содержит синтаксические ошибки языка Lua, то он не будет отображаться в этом диалоге.

Выбрав индикатор Пример Графика и нажав на кнопку «Да», мы увидим диалог настройки отображения индикатора:

  • Значение поля Settings.Name попало в подпись нового индикатора и отображается в поле Name группы «Пользовательские настройки».
  • В диалоге свойств индикатора присутствуют параметры одной линии с именем «Линия 1».
  • Функция Init вернула 1, это говорит терминалу, что индикатор будет состоять из одной линии. Так как мы не описали в коде параметры этой линии, то значения полей Color, Name, Type, Width выбираются значениями по умолчанию.

После нажатия кнопки «Сохранить» мы не увидим никаких новых линий на графике. Потому что функция OnCalculate всегда возвращает nil. Это значение говорит терминалу, что значение индикатора для указанной свечи источника данных не определено.

3 Изменяем свойства индикатора

В качестве примера рассмотрим код:

Settings=
{
    Name = "Пример Графика 2",
    period = 5, -- период линии
    line = {
             { -- свойства линии № 1
                Name = "MA", -- надпись над линией
                Color = RGB(255, 0, 0), -- цвет линии
                Type = TYPE_LINE, -- тип линии
                Width = 2 -- толщина линии
             }
          }
}
function Init()
    return 1
end
function OnCalculate(index)
    return nil
end


Здесь в таблицу Settings добавились поля period и line. Поле line является массивом таблиц с индексным доступом. Это значит, что все её элементы доступны через численные индексы – line[1], line[2] и т.д.

Наш индикатор возвращает только одну линию, поэтому и свойства описаны только для одной – линии с индексом 1.

Создание индикаторов технического анализа с помощью скриптов Lua // стр. 4 из 14

Вот как это будет выглядеть в диалоге настроек:

Все, что не относится к описанию параметров линий, попадает в группу «Пользовательские настройки». Тип параметра определяется начальным значением. Поле Name имеет строковый тип, поле period – числовой, так как в коде мы его инициализировали значением 5.

Параметры линии теперь отличаются от значений по умолчанию. Например, цвет линии определяет функция RGB(255, 0 ,0).

4. Рисуем прямую линию

Для этого будет достаточно изменить только функцию OnCalculate следующим образом:

function OnCalculate(index)
    return 100
end

5. Считаем среднее

Усложним код, посчитаем среднее значение на заданном нами интервале по ценам закрытия свечи:

Settings=
{
  Name = "Example3",
  period = 5,
  line = 
       {
         {
           Name = "MA",
           Color = RGB(255, 0, 0),
           Type = TYPE_LINE,
           Width = 2
         }
      }
 }
function Init() 
    return 1
end 
function OnCalculate(index)
    if index < Settings.period then
                                   return nil 
                               else 
                                   local sum = 0
                                   for i = index-Settings.period+1, index do
                                           sum = sum +C(i)
                                   end
                                   return sum/Settings.period 
                               end 
end

Далее

  • Индикаторы технического анализа представляют собой отдельный класс скриптов, которые удовлетворяют определенным условиям и расположены в папке LuaIndicators в каталоге терминала (например C:\Program Files\QUIK\LuaIndicators). Если папка отсутствует в каталоге, необходимо создать ее вручную.
  • Список скриптов недоступен из диалога Таблицы / LUA / Доступные скрипты.
  • При добавлении нового индикатора на график плагин qlua сканирует папку LuaIndicators, проверяет файлы с расширением lua и luac (скомпилированные скрипты lua) на соответствие следующим требованиям:
    • определена функция Init;
    • определена функция OnCalculate;
    • определена таблица Lua с именем Settings, в которой есть поле «Name».