Индикаторы на LUA для QUIK
Написал пару индикаторов на LUA для квика. Выкладываю на смартлаб для всеобщего пользования, в качестве примера использования LUA в квике для написания собственных индикаторов.
Первый индикатор VolMA — нужно добавлять на график с объемом и показывает в виде, например, линии среднее значение объема на заданное количество баров.
Второй индикатор ATR_PC — показывает в виде двух линий канал цены с учетом ATR.
Параметры индикатора: kATR — коэффициент, на который домножается значение ATR,
period1 — количество баров цены по которым усредняется значение ATR, period2 — значение баров цены по которым вычисляется PriceChannel.
Индикаторы представлены в открытом виде, можно изучать, модифицировать, писать свои.
За возможные проблемы ответственности не несу (на всякий случай :)).
Как установить: содержимое архива распаковать в папку LuaIndicators, которую нужно создать в папке установленного квика. На график добавить новый индикатор: VolMA — на график с объемом, ATR-PC — на график с ценой.
PS: залил в другое место и подправил ATR_PC — дествительно линия прыгала вниз, когда вместо данных шли нули — теперь вроде по лучше, но в указанных кусках все равно данные слегка искажаются.
PSS: в облачные сервисы пока не заливал — там регится нужно и т.д.
PSSЫ: правда че то глючат хостинги 🙁
Если можно, поставьте плюсик, т.к. рейтинг на нуле.
Как написать индикатор для quik на lua
Оглавление
1) Почему стоит выбрать QLua.
2) Немного истории и о преимуществах QLua в сравнении с предшественником QPile.
3) Написание индикаторов на QLua.
4) Написание робота на QLua под Quik
5) Заключение
1. Почему стоит выбрать QLua.
Если сравнивать с системами, где алгоритм выстраивается путем построения блок-схем, то преимуществом Qlua является отсутствие платы за использование торговой системы как в TsLab и нет необходимости в использовании доп. «прокладок» как Wealth-lab. В системах построения из блоков таких как: TsLab, Wealth-lab и т.д. проблематично выстраивать сложные системы, а для уменьшения количества блоков и получения доп. функций требуется знание высокоуровневых языков типа: C#, Pascal для написания кубиков вручную.
Из минусов можно отметить, что QLua используется только в рамках терминала Quik и данный язык не доступен для работы с другими терминалами и торговыми системами. Так же учитывая, что Quik является только терминалом и не позволяет производить тестирование торговых алгоритмов. В QLua нет простого решения для тестирования роботов, как это можно сделать в рамках таких платформ как: TsLab и Wealth-Lab.
2. Немного истории и о преимуществах QLua в сравнении с предшественником QPile.
До QLua был QPile, в общем–то он и сейчас есть. Интерпретатор скриптового языка QPile был разработан ARQA Technologies в 2002г. и развивался до 2012г., позже в терминал Quik был добавлен Lua интерпретатор. Так же есть вероятность, что компания ARQA Technologies возможно в ближайшем будущем откажется от дальнейшей поддержки QPile. Qpile как и Qlua является скриптовым языком и обладает рядом возможностей. По праву он является первым языком для написания роботов и советников для терминала Quik. Является простым для изучения и функциональным инструментом, но обладает рядом минусов.
И так, какими плюсами обладает QLua в сравнении с QPile:
— у QLua нет задержки на обработку торговой логики робота в 1сек. Это конечно не критично для среднесрочных стратегий, но для написания скальперских роботов может стать критичным.
— у QLua есть многопоточность. Реализовано это в виде основного потока торговой логики и функций обратного вызова(«колбэков»).
— есть возможность писать и подключать библиотеки на других языках, сам Lua кстати написан на Си
— появилась возможность писать пользовательские индикаторы и использовать их как стандартные.
— синтаксис языка немного похож на JavaScript и C#, отсюда удобство работы с операторами переменными и т.д.
— скрипты обычно интерпретируются, а не компилируются. QLua обладает JIT-компиляторами так как в его основе лежит язык Lua. Что позволяет прятать исходный код, в то время как у Qpile он всегда открыт. Ссылка как компилятор для скрытия исходного кода Qlua
3. Написание индикаторов на QLua.
(1) Пользовательский индикатор
Как уже упоменалось выше в рамках терминала Quik существует два скриптовых языка это: Qpile и QLua. Qpile являестя более ранним языком, который появился в Quik и на нем нельзя было писать индикаторы. Позже разработчики расширили функционал и добавили QLua, в рамках которого стало возможным писать индикаторы. В данной части статье пойдет речь о создании индикатора под Quik.
И так перейдем к созданию индикатора. Для этого нам понадобится любой текстовый редактор типа Notepade.
Индикатор на QLua для Quik состоит из трех основных частей.
Здесь мы описали массив настроек, ввели название индикатора, параметры описали параметры двух линий индикатора Именно эти параметры будут доступны в пользовательском индикаторе для изменения при загрузке индикатора на Qlua в Quik
4. Написание робота на QLua под Quik
Написание торгового робота на QLua ведется в обычном текстовом редакторе, так же как и для написания индикатора. Отличие будет в структуре кода и в том, что располагать робот можно в любом удобном для вас месте на компьютере. В роботе является обязательной только одна функция main.
5. Заключение
Подводя итоги хочется сказать, что если используется для торговли терминал Quik, то одним из самых простых способов написания автоматизированных торговых систем является скриптовый язык QLua. И надеюсь, сегодня Вы в этом сами убедились.
В рамках торгового робота написанного как пример выше, мы получили готовую механическую торговую систему в сто строк кода. Что является очень хорошим результатом.
Для написания индикаторов в Квик, Qlua является единственно возможным вариантом.
Курсы Lua. Роботы для торговли.
Курсы Lua, создание торговых роботов для торговли в QUIK.
16. Создание индикаторов технического анализа в QUIK с помощью языка Lua.
Доступ к полному Курсу на 1 день, после регистрации на сайте. Зарегистрироваться
В данном примере торгового робота рассмотрим создание собственных индикаторов технического анализа и вывод их на экран в окно графика.
Создание собственного индикатора, на примере графика скользящей средней, хорошо описано в документации к QUIK, в файле «Создание индикаторов технического анализа.pdf». Предлагаю Вам, ознакомится с ним. Скачать его можно по следующей ссылке.
Используя подход, описанный в файле «Создание индикаторов технического анализа.pdf», не получится получить доступ к двум инструментам и построить индикатор исходя из цен с двух инструментов. Ниже мы рассмотрим пример построения индикатора по двум графикам цены. Условие для скрипта торгового робота будет следующим. Нужно создать индикатор, который отображает разницу между ценой акции и ценой фьючерса, например для арбитражной торговли. В качестве инструментов возьмем акции Сбербанка и ближайший фьючерс на них SRH8.
Начнем. Создание индикаторов имеет ряд своих особенностей. Первое – это местоположение файла со скриптом торгового робота. Скрипт в обязательном порядке должен быть размещен в папке «LuaIndicators», которая в свою очередь находится в папке c программой QUIK. У меня на компьютере путь к папке выглядит следующим образом: C:\\QUIK_VTB24\\LuaIndicators. Если у Вас в папке программы QUIK нет папки «LuaIndicators», то ее необходимо сознать. Терминал QUIK считывает папку «LuaIndicators» и если находит скрипт на языке LUA, отвечающий минимально необходимым требованиям (о требованиях поговорим чуть позже), то сразу добавляет индикатор в список доступных индикаторов, список открывается, когда мы открываем окно «Добавление графика». Окно «Добавление графика» открывается из контекстного меню на графике пункт «Добавить график (индикатор)».
Еще один нюанс, если в коде индикатора допущена синтаксическая ошибка, то данный индикатор не будет отображаться в окне «Добавление графика».
Создадим новый файл для скрипта торгового робота с именем «023 График арбитраж.lua» и сохраним в папку LuaIndicators.
Перейдем к коду индикатора. Для индикатора существует, минимальный обязательный код, без которого терминал QUIK не сможет его распознать и работать с ним.
Минимальный код, на языке Lua выглядит следующим образом.
[Закрыто] Основы программирования LUA в QUIK (QLUA)
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений 2
1 Тема от admin 2012-12-18 00:43:41
Тема: Основы программирования LUA в QUIK (QLUA)
Введение
Начиная с версии 6.5 в терминале QUIK была добавлена возможность запуска пользовательских скриптов, написанных на языке Lua. В сравнении в ранее имевшимся внутренним языком QUPILE, добавление скриптов на Lua дало пользователям не только более мощный и удобный язык программирования, но и предоставило принципиально новые возможности для создания торговых роботов, в частности возможность мгновенной реакции на изменение рыночных данных за счет реализованной возможности событийного программирования. Событиями могут выступать: изменение стакана котировок, изменение параметров инструментов, совершение сделок на бирже, совершение сделок по поручениям (заявкам), поданным из терминала пользователя (вручную или из скриптов) и т.д.
Документация по Lua в QUIK и базовые примеры от ARQA: quik_lua.zip
Список изменений и нововведений в QUIK по части функциональности Lua-скриптов можно посмотреть здесь.
Виды скриптов на Lua для QUIK
Для выполнения разного рода задач терминал QUIK поддерживает следующие виды скриптов:
Lua-скрипты: в них доступна вся функциональность для написания роботов, включая возможность получения рыночных данных, параметров инструментов, задание реакции на изменение рыночных данные, выставление заявок, создание таблиц внутри интерфейса терминала QUIK с выводом в них нужной пользователю информации. Эти скрипты могут располагаться в любом месте, доступном терминалу (локальный диск, сетевой ресурс и т.д.).
Пользовательские индикаторы: это отдельный вид программ на Lua, предназначенный в первую очередь для вывода на графиках терминала индикаторов технического анализа, алгоритм которых реализуется в скриптах данного вида. Помимо этого, индикаторам доступны функции вывода меток на графиках. В большинстве случаев индикаторы для своего расчёта в качестве исходных берут данные с определённого графика, хотя имеется и возможность получения других данных (правда, на данный момент очень сложно обеспечить синхронизацию ганных на графике и внешних данных, с графиком не связаннх). В скриптах индикаторов доступен ограниченный набор внешних функций, по сравнению с Lua-скриптами.
Далее будут рассматриваться только Lua-скрипты и особенности их написания в QUIK. Создание индикаторов будет рассмотрено в отдельной теме.
Что включает в себя Lua в QUIK
В качестве интерпретатора используется Lua:
версии 5.1.5 в QUIK версий 6.x, 7.x и 8.0..8.4
версии 5.3 в QUIK версий 8.5 и более новых
Включены библиотеки: io, string, math, package, os, table. ( пруф )
Помимо этого скриптам на Lua, запущенным в терминале QUIK, доступны дополнительные функции, предназначенные для получения рыночных данных, взаимодействия с терминалом. Кроме того, пользователь может размещать в своём скрипте функции с заранее предопределёнными наименованиями (так называется callback-функции), которые позволяют реализовывать в торговых роботах реакцию на рыночные события. Ввиду такого расширения Lua в рамках терминала QUIK обычно называют QLua, подчеркивая наличие указанных дополнений. Хотелось бы отметить, что эти дополнения никак не изменяют собственно синтаксис самого языка Lua, а лишь добавляют в него некоторые функции по аналогии с функциями разных библиотек. Поэтому для изучения программирования на самом языке Lua в QUIK годится абсолютно любая книга по Lua.
Здесь не будет рассматриваться собственно программирование на самом языке Lua, считается, что читатель найдёт эту информацию самостоятельно. Ниже будет подробно рассказано о том, какие возможности для написания программ имеются именно в рамках терминала QUIK.
Как программировать на LUA в QUIK
б) Можно написать в Lua-скрипте одну единственную функцию с предопределенным именем main() и всю логику работы робота (или вычислительного скрипта) поместить в эту функцию. Функция main выполняется в отдельном потоке, т.е. она не мешает работе основного функционала терминала QUIK, наличие функции sleep() позволяет выполнять периодически приостанавливать скрипт и возобновлять его работу через какой-то промежуток времени.
Фактически, если зациклить main() и вставить sleep(), то получаем полную эмуляцию подхода, использующегося при программировании на встроенном QPILE: периодический расчет чего-либо через заданный интервал времени.
в) В QLUA доступна событийная модель программирования. Т.е. теперь нет необходимости в одной «главной» функции «выявлять» происходящие изменения и на основании анализа этих изменений выполнять какие-то действия.
С первым и вторым подходом все достаточно понятно, да и используемый для этого интерфейс весьма напоминает тот, который использовался в QPILE, так что на нем подробно останавливаться не буду.
Программирование на QLUA с использованием событий
При выборе такого подхода получаем весьма гибкую среду выполнения пользовательских скриптов внутри QUIK, позволяющую мгновенно получать интересующие события от терминала, производя нужную нам обработку этих событий.
Для того, чтобы обработать то или иное событие, необходимо просто прописать в своем скрипте функцию с предопределенным названием. Все доступные функции обработки событий есть в документации по QLUA. Поддерживаются самые различные события совершение на бирже очередной сделки, выставление новой заявки пользователем (или скриптом), изменение стакана котировок и т.д.
Схематически принцип выполнения скриптов LUA внутри терминала QUIK можно изобразить следующим образом:
Обратите внимание, что все функции обработки событий, в отличие от функции main(), выполняются в рамках основного потока терминала QUIK, а значит время их работы должно быть сравнительно небольшим, иначе будут заметны «подвисания» в работе терминала.
Создадим свой первый простой скрипт в КВИК
В данной статье мы уже подошли вплотную к тому, чтобы создать свой первый скрипт для торгового терминала QUIK. И начнем создавать скрипт, а не индикатор, потому что для начала скрипт будет проще для понимания.
Итак, чтобы у нас находилось все в одном месте, а не раскиданы все файлы по компьютеру, создадим специальную папку для будущих скриптов и для удобства разместим ее прямо в папке с Квиком.
Как и где создаем каталоги и файлы
Открываем папку программы QUIK и прямо в ней создаем свою новую папку. Назвать ее можно как угодно, но желательно название задавать латинскими буквами, например «LuaScripts». В этой папке и будут храниться все созданные нами скрипты для КВИК на языке QLUA.
Заходим в нашу созданную папку «LuaScripts» и в этой папке создаем простой текстовый документ. ПКМ — правой кнопкой мыши в свободном пространстве и выбираем пункт «Текстовый документ».
Затем переименовываем этот файл и пишем любое название латинскими буквами, например пусть будет «Script_N1», а также меняем расширение на нужное нам .lua, в итоге у нас получается файл «Script_N1.lua». Но хочу предупредить, что чаще всего расширения не видно у файлов, поэтому если Вы все сделаете как написал выше, то виндоус по умолчанию все равно добавит расширение .txt, поэтому можно открыть либо в проводнике, либо в «тотал командоре» либо включить отображение расширений файлов в свойствах папки, либо создать файл прямо в программе NotePad++.
Если хотим создать через НотПад. То вверху в меню данной программы нажимаем вкладку «Синтаксисы», выбираем пункт «L» и в открывшейся области выбираем «Lua».
Далее в меню NotePad нажимаем кнопку «Файл» — «Сохранить как».
В открывшемся новом окне находите папку с Квиком и открываете созданную папку «Lua scripts». Внизу в этом же окне задаете имя файла «Script_N1» и еще чуть ниже выбираете тип файла LUA. Затем нажимаете «Сохранить».
Все, файл нашего будущего скрипта создали, осталось дело за малым, написать в него код на языке LUA! Как мы уже знаем, что есть инструкция в КВИКе о том, как создается скрипт, называется этот файл с инструкцией QLUA.chm, располагается в папке с Квиком.
Напишем простейший код для примера
И сохраним сделанные нами изменения в файл путем нажатия на кнопку в меню
Переходим к запуску скрипта «Script_N1.lua»
Хоть и очень просто, но все же уже первый скрипт написан! Давайте запустим его в QUIK.
Для этого Открываем терминал КВИК, в меню выбираем пункт «Сервисы» — «LUA скрипты…».
В появившемся окне «Доступные скрипты» справа нажимаем на кнопку «Добавить». Находим свой скрипт «Script_N1.lua» в папке «Lua scripts» и жмем «Открыть».
У нас открывается наш скрипт. Теперь, чтобы его запустить, выделяем строку с нашим скриптом «Script_N1.lua» и справа в окне нажимаем кнопку «Запустить».
После этого у нас появляется окно сообщений в КВИК вот такое!
В окне какие-то каракули ? Но давайте это устраним. В NotePad в редакторе скрипта в меню находим раздел «Кодировки» и далее выбираем «Преобразовать в ANSI».
Еще раз сохраняем наш скрипт. Возвращаемся в КВИК и в окне «Доступные скрипты» жмем кнопку «Запустить».
Теперь выходит окно с понятным сообщением!
Для того, чтобы постоянно в создаваемых в NotePad файлах не проводить преобразование в ANSI, можно сразу один раз в настройках указать кодировку нового документа.
Для этого в меню «Опции» — «Настройки». В появившемся окне выбираем из списка «Новый документ» и справа настраиваем следующее: «Кодировка — ANSI», «Формат Конца Строк — Windows (CR LF).
На этом пока завершим наши действия на сегодня, не все сразу, но многое мы уже познали, много интересного еще нас ждет впереди!
Вы уже сейчас можете начать изучать Видео курс- роботы в TSLab и научиться самому делать любых роботов!
Также можете научиться программировать роботов на нашем Видео курсе «Роботы для QUIK на языке Lua»
Если же вам не хочется тратить время на обучение, то вы просто можете выбрать уже готовые роботы из тех, что представлены у нас ДЛЯ TSLab, ДЛЯ QUIK, ДЛЯ MT5, ДЛЯ КРИПТОВАЛЮТЫ!
Также можете посмотреть совершенно бесплатные наработки для МТ4, Квика, МТ5. Данный раздел также постоянно пополняется.
Не откладывайте свой шанс заработать на бирже уже сегодня!