Меню Рубрики

Как написать робота на языке луа

Как написать робота на языке луа

Тема сегодняшней публикации — скриптовый язык QLUA. QLUA — мощнейший инструмент для написания торговых роботов. И сегодня мы обсудим его плюсы и минусы. Посмотрим как написать простой индикатор и первого робота на нём. В начале своего пути долго выбирал среду разработки, искал эффективное и в тоже время простое решение для написания торговых роботов и советников. Этот путь занял несколько лет, и что я только не перепробовал в то время. Excel, Metastock, TsLab. Но в итоге остановился на QLua, справедливо решив, что это то, что мне нужно.

1) Почему стоит выбрать QLua.

2) Немного истории и о преимуществах QLua в сравнении с предшественником QPile.

3) Написание индикаторов на QLua.

4) Написание робота на QLua под Quik

5) Заключение

1. Почему стоит выбрать QLua.

Постараюсь коротенько описать плюсы и минусы. Начать стоит с того, что в рамках РФ самый распространенный терминал для торговли акциями и фьючерсами является Quik. Если отталкиваться от того, что наш терминал Quik, то выбор будет между: программами для тестирования, языками высокого уровня и встроенными языками в терминал Qlua , QPile.

Если сравнивать с системами, где алгоритм выстраивается путем построения блок-схем, то преимуществом Qlua является отсутствие платы за использование торговой системы как в TsLab и нет необходимости в использовании доп. «прокладок» как Wealth-lab. В системах построения из блоков таких как: TsLab, Wealth-lab и т.д. проблематично выстраивать сложные системы, а для уменьшения количества блоков и получения доп. функций требуется знание высокоуровневых языков типа: C#, Pascal для написания кубиков вручную.

Если рассматривать написание роботов на таких языках как: C#, Delphi , то здесь однозначным минусом является сложность написания кода и его размер для создания простейшего робота. Скриптовые же язык QLua или Qpile позволяют реализовать идею в более короткие сроки.

Сценарный язык (язык сценариев, жарг. скриптовый язык, от англ. scripting language) — высокоуровневый язык сценариев (англ. script) — кратких описаний действий, выполняемых системой. Сценарий — это программа, имеющая дело с готовыми программными компонентами, что очень сильно упрощает написание кода торгового робота. То есть для получения данных по значению закрытия свечи достаточно написать строчку кода типа: ds:C(20) все, и мы получаем значение закрытия двадцатой свечи инструмента. Нет необходимости писать «километры» кода. При этом доступен весь функционал как в полноценном языке программирования.

Из минусов можно отметить, что 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.

Индикатор на QLua представляет из себя файл с расширением *.lua или *.luac и визуально ничем не отличается от робота. Исключением является его месторасположение. Для того чтобы Quik увидел индикатор его надо разместить в папке LuaIndicators. Папка LuaIndicators должна храниться в корне папки Квика , если ее там нет , то ее надо создать. Для того чтобы быстро открыть папку Квика надо нажать на его ярлык на рабочем столе правой кнопкой мыши и выбрать «Расположение файла».

И так перейдем к созданию индикатора. Для этого нам понадобится любой текстовый редактор типа Notepade.

Индикатор на QLua для Quik состоит из трех основных частей.

Первая часть это объявление и заполнение глобального массива Settings , который содержит в себе переменные параметров индикатора, тип линии для отображения, толщину, цвет. В массиве Settings располагаются пользовательские переменные для изменения параметров индикатора из пользовательского интерфейса Квика.

Вторая часть это функция Init , она запускается один раз при инициализации индикатора. Возвращает количество линий индикатора.

Третья часть функция OnCalculate(index) получает на вход номер свечи. Она запускается интерпретатором столько раз сколько свечей на графике и возвращает численное значение индикатора. Если линий несколько в индикаторе , то несколько численных значений. Для удобства понимания кода там будут комментарии. Для комментирования строки в QLua используется «—». Все содержимое после двух дефисов интерпретатором кода на QLua не воспринимается.

Здесь мы описали массив настроек, ввели название индикатора, параметры описали параметры двух линий индикатора Именно эти параметры будут доступны в пользовательском индикаторе для изменения при загрузке индикатора на Qlua в Quik

  • (1)Название индикатора
  • (2)Установка значения для переменной period
  • (3)Установка цвета по умолчанию для линии High
  • (4)Название линии индикатора , которое мы прописали в ячейке «line» нашего листа настроек
  • (5)Тип линии который мы установили для использования по умолчанию Type =TYPE_LINE
  • (6)Толщина линии индикатора Width = 1

Создаем в редакторе файл с расширением lua записываем в него код и сохраняем его в папке LuaIndicators , после этого у нас появится новый индикатор и его можно будет добавить к себе на график как стандартный индикатор Quik (1)

4. Написание робота на QLua под Quik

Написание торгового робота на QLua ведется в обычном текстовом редакторе, так же как и для написания индикатора. Отличие будет в структуре кода и в том, что располагать робот можно в любом удобном для вас месте на компьютере. В роботе является обязательной только одна функция main.

И так приступим. Напишем робота с простым алгоритмом. Рассчитаем внутри робота скользящую среднюю и будем принимать решение о покупке/продаже одного лота по инструменту исходя из количества в клиентском портфеле при закрытии прошлого бара ниже/выше среднего значения посчитанного по закрытию минутных баров инструмента. То есть при пересечении close бара средней снизу вверх проверим количество контрактов в портфеле по инструменту, и если оно меньше одного , то докупим разницу до одного контракта в лонг. Обратная ситуация при пересечении close закрытого бара среднего значения сверху вниз. Отправим транзакцию для получения одного лота в шорт по клиентскому портфелю.

После редактирования кода сохраняем его в удобном для вас месте с расширением lua. Для запуска робота надо зайти в Сервисы ->Lua скрипты

  • (1)Добавляем скрипт из сохраненнго места
  • (2)Проверяем его появление в таблице запущенных скриптов, после запуска появится зеленая стрелка индицирующая работу скрипта
  • (3)Запускаем его в работу
  • (4)Проверяем в поле отсутствие ошибок при работе

5. Заключение

Подводя итоги хочется сказать, что если используется для торговли терминал Quik, то одним из самых простых способов написания автоматизированных торговых систем является скриптовый язык QLua. И надеюсь, сегодня Вы в этом сами убедились.

В рамках торгового робота написанного как пример выше, мы получили готовую механическую торговую систему в сто строк кода. Что является очень хорошим результатом.

Для написания индикаторов в Квик, Qlua является единственно возможным вариантом.

В общем — торгуйте алгоритмами. Используйте хорошие технологии!

Источник статьи: http://o-s-a.net/posts/qlua.html

Основы КВИК (QUIK) и языка QLUA

В данной статье начнем рассматривать такую интересную тему как написание скриптов на языке программирования QLUA. Существует язык программирования LUA, а если в названии указан символ Q, то значит, этот язык относится к торговому терминалу QUIK. Пользователи еще говорят, что это Квик_Луа (QUIK LUA). Но суть остается одна, это встроенный язык программирования для КВИК.

Если вы только начинаете изучение разных платформ и языков программирования для написания скриптов для них, торговых роботов или индикаторов, то Вам должно быть интересно узнать подробнее о языке QLUA.

Приступим с самого интересного момента, а с чего надо начать все это осваивать? Все сталкиваются с таким вопросом и начинают копать тонну информации по разным источникам, чтобы разобраться что же это такое и из чего все состоит. Мы же Вам попытаемся немного помочь и ускорить процесс ознакомления с QLUA.

На языке LUA можно запрограммировать скрипты для торговли в терминале КВИК, все возможные индикаторы и торговые роботы, это все понятно, но как и где это делать, в каком редакторе необходимо все это программировать?

Где будем создавать код LUA?


Все скрипты или индикаторы, написанные на LUA представляют собой простой текстовый файл, просто имеет другое специальное расширение. Из этого становится ясно, что написать индикатор/скрипт возможно даже в простом текстовом редакторе, например в программе Блокнот, что есть у всех по умолчанию в Виндоуз. Запускаем текстовый редактор, пишем в нем код скрипта, далее сохраняем файл. Вот в принципе и все, наш скрипт для применения в торговой платформе КВИК готов. Как видите, оказывается очень просто. Да, все просто, но не очень удобно, т.к. текст в блокноте не имеет никакого обозначения, просто сплошной текст без разделений, если вы программировали, то поймете о чем речь идет. Именно поэтому обычно программисты используют подобие блокнота — это программа Notepad++. Повторюсь, что можно код писать в любом редакторе, но, на наш взгляд, программа Notepad++ очень удобна для программировании на LUA. В Notepad++ есть подсветка синтаксиса Lua и это очень большое преимущество в удобстве написания Lua кода.

Что лучше создать Скрипт или Индикатор?

И вот, когда мы поняли, где мы будем создавать наши творения для терминала КВИК, у нас возникает еще один вопрос, а что лучше написать Скрипт или может Индикатор?! Да, выбирать особо не приходится, но необходимо четко понимать в чем отличия между скриптом и индикатором. Тут можно не вдаваться в глубокие подробности структуры того и другого, а можно рассуждать как простой пользователь, если нужно просто видеть нужную информацию на графике в виде линий, точек и прочих обозначений, то значит нужен Индикатора. Если, что-то другое нужно, то значит скрипт. Да, это очень поверхностные различия, но для общего понимания хватит! Далее, когда вы углубитесь в данную тему и начнете понимать из чего состоит структура скрипта, а из чего структура индикатора, то сами легко сможете понять, что нужно сделать, чтобы осуществить задуманную идею.

Заключение

Мы начали с малого, подготовились к написанию кода на LUA и разобрались, что писать код будем в текстовом редакторе Notepad+, а также знаем, что нам выбрать для реализации индикатор или скрипт. Да, пока не коснулись самого кода LUA и структуры, но постараемся сделать цикл статей, чтобы это все постепенно разобрать и понять. Это был Первый и очень важный шаг к изучению языка QLUA. А тем самым даже на этой стадии мы помогли сэкономить Вам немного немало несколько часов рабочего времени!

Продолжение следует, следите за серией статей по языку программирования QLUA для торгового терминала КВИК.

Не откладывайте свой шанс заработать на бирже уже сегодня!

Источник статьи: http://daytradingschool.ru/osnovy-kvik-quik-i-yazyka-qlua/

Qlua для чайников. Часть 1

Многие хотели бы научиться писать биржевых роботов или хотя бы автоматизировать некоторые свои биржевые операции, но пугаются самого процесса программирования, считая его чем-то сложным. Эта статья написана для того, что бы помочь тем, кто только начинает программировать. Вы сами увидите, что на самом деле тут все просто.
Прежде чем приступить к уроку, хочу сказать пару слов о языке программирования qlua, который мы будем изучать. На сегодняшний день этот язык – самый удобный и доступный способ что-либо автоматизировать для начинающих программистов. Язык qlua гораздо лучше и удобнее его предшественника – qpile, он содержит больше возможностей, и роботов, написанных на нем, можно сделать гораздо боле гибкими. Что особо радует, так это, например, наличие так называемых CALLBACK функций (функций обратного вызова), благодаря которым появилась возможность легко писать роботов, реагирующих на разные события: изменение статуса заявки, приход сделки и т. д. (см. статью robostroy.ru/community/article.aspx?id=765).

Итак, начнем. Для начала мы просто возьмем и создадим программу, которая просто выведет на экран сообщение «Hello, World!». Очень многие начинали именно с этого. Вот текст этой очень и очень простой программы:

message(«Hello, World!»,1)

Текст программы можно набрать в блокноте:

Но лучше, конечно, воспользоваться специализированной программой типа «Notepad++», там есть даже подсветка синтаксиса:

Обратите внимание, что сохранять файл нужно обязательно с расширением lua.
Итак, программа набрана, запускаем ее. Для этого идем в меню «Таблицы» -> «Lua» -> «Доступные скрипты».

У нас откроется вот такое окошко:

Жмем кнопочку добавить, выбираем там наш файл:

Он появился в списке доступных скриптов:

Выделяем его, жмем на кнопочку «Запустить» и видим результат:

Поздравляю, вы написали свою первую программу. Просто, не правда ли?
Но слышу разочарованные вздохи. Несмотря на просто изумительную простоту, наша программа абсолютно бесполезна. Ну что я могу сказать? Наберитесь терпения! Сейчас мы научится делать более сложные вещи.
Итак, давайте попробуем ввести заявку. Создаем новый скрипт (файл lua) вот с таким текстом:

t = <
[«CLASSCODE»]=«TQBR»,
[«SECCODE»]=«LKOH»,
[«ACTION»]=«NEW_ORDER»,
[«ACCOUNT»]=«L01-00000F00»,
[«CLIENT_CODE»]=«52134»,
[«TYPE»]=«L»,
[«OPERATION»]=«B»,
[«QUANTITY»]=«1»,
[«PRICE»]=«1950»,
[«TRANS_ID»]=«1»
>
res=sendTransaction(t)
message(res,1)

Это программа чуть-чуть сложнее, поэтому я подробно сейчас разберу ее. Итак, сначала у нас идет строка t= <…
t – это переменная. Она хранит в себе какое-то значение (число, строку, массив, таблицу, какой либо специальный объект или ничего не хранит, если ничего ей не присваиваем). В данном примере мы переменной t присваиваем целую структуру. У этой структуры есть поля. Они указываются в квадратных скобках, после них идет знак «=» и то, чему они равны. Такие пары перечисляются через запятую. Первое поле CLASSCODE. Это код класса. Его можно посмотреть, например, в текущей таблице параметров:

В нашем случае мы используем код класса акций ЛУКОЙЛ.
Саму текущую таблицу параметров можно открыть через меню «Таблица» -> «Текущая таблица».

В этой таблице необходимо настроить колонки, которые мы хотим видеть:

Следующее поле SECCODE – это код бумаги, в данном случае код ЛУКОЙЛа, так же смотрим его в текущей таблице параметров:

Поле ACTION – это действие, которое мы производим. В нашем случае это NEW_ORDER – новая заявка.
Поле ACCOUNT – это номер брокерского счета, можно посмотреть в таблице счетов, колонка «Счет»:

Эта таблица находиться в меню «Торговля» -> «Торговые счета»:

Далее идет поле CLIENT_CODE – это код клиента, можно посмотреть в таблице «Клиентский портфель»:

Открывается данная таблица через «Лимиты» -> «Клиентский портфель»:

Поле TYPE – тип заявки. «L» — лимитированная, «M» — рыночная.
OPERATION – тип операции, «B» если покупаем, «S» если продаем.
QUANTITY – количество, как правило, в лотах. Но у разных брокеров может быть по-разному (в лотах или в штуках акций).
PRICE – цена.
TRANS_ID – идентификатор транзакции. Иногда он бывает нужен, например, в случае, описанном в одной из моих предыдущих статей: http://robostroy.ru/community/article.aspx?id=765. Но чаще всего безразлично, что вы зададите в этом поле, например, можно просто поставить единичку.
После заполнения полей переменной t мы вызываем функцию sendTransaction, она вернет нам сообщение, которое мы выведем на экран функцией message, которую мы ранее использовали для вывода сообщения “Hello, World!”. Обратите внимание, что res идет без кавычек, это переменная, а не жестко заданный текст, как в предыдущем примере.
Итак, поставим в текст программы те параметры, которые правильные для вашего случая (номер счета, код клиента, параметры бумаги, цену и количество) и запускаем скрипт. Если все правильно, то вы увидите примерно такое сообщение:

Иначе может вылезти сообщение с ошибкой. Проверьте, действительно ли выставилась заявка.

И так, мы уже научились писать скрипт, выставляющий заявки. Но опять слышу разочарованные вздохи. По-прежнему мы не написали ни одной полезной программы. Ну что ж, для начала давайте напишем простенький скрипт, который выставит серию заявок на покупку и на продажу с шагом от заданной цены.

Источник статьи: http://smart-lab.ru/blog/199387.php


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии