Урок по написанию робота на lua для quik: Курсы Lua — Курсы Lua, создание торговых роботов для терминала QUIK. – Научиться создавать роботов в Квике на LUA

Открытый Универсальный Робот – Немного о Qlua и как запускать робота в квике

Подумал, что многие не знают, как подступиться к языку Qlua и запустить робота в квике. А между тем, это настолько просто, что даже не требует ничего кроме квика, виндусовского блокнота и знаний самого Qlua.

Qlua – это скриптовый язык поддерживаемый квиком, в основе язык lua 5.1 (в моем квике версия такая).

Скрипты, написанные на Qlua – это обычные текстовые файлы, которые имеют расширение «.lua». То есть можно сделать файл в обычном блокноте и после сохранения поменять в нем расширение с «.txt» на «.lua». Если внутрь этого файла записать инструкции кода на языке Qlua, то квик будет выполнять их.

Для удобства написания инструкций кода лучше пользоваться не виндусовым стандартным блокнотом, а например Notepad++, который можно скачать официально и бесплатно здесь https://notepad-plus-plus.org/download/v6.9.1.html. Он позволяет включить подсветку синтаксиса различных языков программирования, в том числе и lua, что очень помогает при написании кода.

В Notepad++ в «Опции -> Настройки» можно выбрать русский язык, а в «Опции -> Определение стиля» установить для lua понравившийся стиль отображения. Я для «Язык -> lua» ставлю стиль «Выбрать стиль -> Bespin» и еще в окошке «Стиль» для последних трех «FUNC» переопределяю цвет, иначе они с фоном сливаются.

Для запуска скрипта в квике достаточно в окно «Таблицы -> Lua -> Доступные скрипты» добавить один или несколько скриптов и используя находящиеся там кнопки запуска и останавки управлять выполнением. Если при выполнении будут обнаружены ошибки, то сообщение о них будет показано с коротким описанием и номером строки.

Сайты, где можно посмотреть примеры и почитать теорию.

Официальная документация по языку LUA в QUIK и примеры http://www.arqatech.com/ru/support/files/ (архив в самом низу страницы).

Статейка http://vasraskolbas.livejournal.com/87417.html

Статейка https://zserge.wordpress.com/2012/02/23/lua-за-60-минут/

Форум https://quik2dde.ru/viewtopic.php?id=16

Блог http://www.bot4sale.ru

Блог http://quikluacsharp.ru

Справочник http://www.lua.ru/doc/

Справочник http://www.user.su/lua/

Это все что требуется для написания роботов на qlua – все бесплатно – было бы желание ))) Ну а я продолжаю разработку своего открытого универсального робота http://smart-lab.ru/blog/325075.php .

ПС
У кого есть еще интересные материалы, связанные с qlua — делитесь!

Торговый робот на Lua для QUIK.

4 года и 4 месяца прошло с выхода поста «Торговый робот на LUA для QUIK» (https://smart-lab.ru/blog/200767.php) про конструктор Lbot. За это время он повзрослел, лишился графического интерфейса и… превратился в младшего брата для Lbot3D. И если раньше для Lbot была пробная версия (с одним инструментом и одним лотом), то теперь, фактически, сам превратился в пробную версию для Lbot3D и, с этого дня, предоставляется в свободное пользование с полным функционалом:

Торговый робот на Lua для QUIK.

Скачать Lbot180.zip можно тут: drive.google.com/open?id=1DL9jGEBm2Uhk89PcQdlK-ObaOe2zihnx
INI-файл написан для демо-QUIK на 3 инструмента — Сбербанк, Газпром и Лукойл. Стратегия на Газпроме — безиндикаторная, на Сбербанке — на скользящих средних, на Лукойле — на пересечениях MACD.

encoding = "UTF-8"
FREQUENCY = 1000
account = NL0011100043, 10110
PositionSize = 300000
xy = 421, 0, 859, 118
;-------------------------------------------------------------------------------
[GAZP]
Security = GAZP, QJSIM, Gazp_moex
WorkSize = 3		//  рабочий объем, в штуках;
LossLimit = 100		// ограничение на убыток по стратегии
OpenSlippage = 10	// допустимое проскальзывание на сделке, в количестве минимальных шагов цены;
OpenLong =  {Close, 1} < {High, 2}	// цена 'close' предыдущей 'полной' свечи превысила 'high' предшествующего ей бара;
OpenShort = {Close, 1} > {Low, 5-2}	// цена 'close' предыдущей 'полной' свечи принизила 'low' 5-2 баров;
StopLoss = 2
TakeProfit = 3, 1, 1
EOD = 18:29:00	//закрытия позиции в указанное время.
autoBot = Y
[SBER]
Security = SBER, QJSIM, Sber_moex
WorkSize = 10
LossLimit = 100
OpenSlippage = 10
OpenLong	= {Ema1} > {Ema2}
CloseLong	= {Ema1} < {Ema2}
OpenShort	= {Ema1} < {Ema2}
CloseShort	= {Ema1} > {Ema2}
autoBot = Y
[LKOH]
WorkSize = 2
Security = LKOH, QJSIM, Lkoh_moex
LossLimit = 225
OpenSlippage = 10
OpenLong	= cross(macd_Lkoh.0, macd_Lkoh.1)
OpenShort	= cross(macd_Lkoh.1, macd_Lkoh.0)
;OpenLong =  {Close, 1} < {Low, 5-2}
;OpenShort = {Close, 1} > {High, 2}
StopLoss = 30
TakeProfit = 50, 10, 10
autoBot = Y

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

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

Обновлена программа LbotTest (также в свободном пользовании с полным функционалом) в части корректной обработки параметра EOD (ежедневное закрытие позиций в определенное время). В комплекте для тестера 17 стратегий для Сбербанка:
Торговый робот на Lua для QUIK.

[SB_A1] Стратегия на двух скользящих средних, реверсная;
[SB_A2] На двух скользящих средних, с тэйк-профитом и стоп-лоссом;
[SB_A3] Лонг/шорт на пересечениях MACD, реверсная;
[SB_A4] Лонг/шорт на пересечениях MACD, с тэйк-профитом и стоп-лоссом;
[SB_A5] входы на MACD с применением фильтра из пары скользящих средних;
[SB_A6] Лонг/шорт и выход - на фиксированных уровнях;
[SB_A7] Лонг/шорт - на фиксированных уровнях, с выходами по тэйк-профиту или стоп-лоссу;
[SB_A8] Лонг и выход - на фиксированных уровнях;
[SB_A9] Шорт и выход - на фиксированных уровнях;
[SB_AA] Лонг от нижней линии канала, продажа - по верхней, фиксированный стоп-лосс;
[SB_AB] Лонг от нижней линии канала, с фильтром на MACD, стоп-лосс на MACD;
[SB_AC] Шорт от верхней линии канала, продажа - по верхней;
[SB_AD] Шорт от верхней линии канала, с фильтром на MACD;
[SB_AE] Лонг пр прорыве верхней линии, шорт - от нижней, со стопом и трейлинг-профитом;
[SB_AF] Лонг от нижней линии канала, шорт - от верхней, со стопом и трейлинг-профитом. Только при пересечениях ценой линий канала;
[SB_AG] входы - на свечных комбинациях, стоп и тейк-профиты - в пунктах;
[SB_AX] входы - на пересечениях RSI и уровней, стоп и тейк-профиты - в процентах;

Графические пояснения:
Торговый робот на Lua для QUIK.


Торговый робот на Lua для QUIK.
Для облегчения запуска примеров имеются файлы-вкладки для QUIK: LbotTest_TQBR.tab (QUIK 7.19.0.51) и LbotTest_QJSIM.tab (QUIK 7.23.1.14)

Программы «as is», никаких гарантий и обязательств.
На вопросы отвечу с удовольствием!
Успехов в алготорговле!
С наступающим Новым Годом!
Торговый робот на Lua для QUIK.

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

28 Август 2019      Дмитрий Высоцкий      Главная страница » Блог      Просмотров:  

основы-квик

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

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

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

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

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

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

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

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

Заключение

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

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

 
 
 
 
 

Вы уже сейчас можете записаться на Видео курс и научиться самому делать зарабатывающих торговых роботов!

Можно записаться на следующий поток ОнЛайн курса, информацию по которому можно посмотреть тут:

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

Также можете посмотреть совершенно бесплатные наработки для МТ4, Квика, МТ5. Данный раздел также постоянно пополняется.

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

Читайте также:

    

1. Необходимые программы и документы для торговых роботов на Lua для QUIK. — Курсы Lua

Разработчиками терминала QUIK составлен пакет документов поясняющих взаимодействие скриптов на языке Lua и торгового терминала QUIK. Документация доступна на официальном сайте QUIK www.arqatech.com, а также в документах к данному курсу. Рассмотрим имеющиеся документы подробнее.

«Интерпретатор языка Lua.pdf» – это основной документ, содержащий команды для терминала QUIK, позволяющие скриптам на языке Lua получать доступ к данным и отправлять заявки в торговую систему. Интерпретатор языка Lua для терминала QUIK называется QLua. Определение интерпретатора QLua из документа «Интерпретатор языка Lua.pdf» стр.5:
«Интерпретатор языка Lua (QLua) – это библиотека, которая предоставляет пользователю возможность взаимодействия с Рабочим местом QUIK при помощи скриптов, созданных на языке Lua.»
Библиотекой называют сборник подпрограмм для выполнения часто встречающихся операций.

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

Язык программирования.
Язык программирования — это набор слов и символов понятный для компьютера. Все компьютерные программы написаны на определенном языке программирования. Любая компьютерная программа представляет собой текст, написанный на языке программирования, этот текст называется кодом программы. Компьютер, читая код программы, понимает какие действия ему необходимо совершить. Компьютерные программы все чаще называют приложениями.

Язык программирования Lua.
Lua — это встраиваемый язык программирования, предназначенный для встраивания в программу собственного кода. Пользователь, при помощи языка Lua, может написать сценарий поведения для определенной программы, и программа будет самостоятельно выполнять прописанные в сценарии действия. Такие сценарии называются скриптами. В нашем случае мы будем встраивать скрипт на языке Lua в торговый терминал QUIK. Интерпретатор QLua служит связкой между скриптом на языке Lua и терминалом QUIK, именно эта связка и позволяет встроить код на языке Lua в терминал QUIK.

Список данных, к которым предоставляет доступ интерпретатор QLua:

1.Данные из таблицы «Текущие торги».
2.Данные с графиков цены, объема и индикаторов.
3.Данные из стакана котировок.
4.Данные из таблиц, заявки, сделки и стоп-заявки.
5.Данные из таблицы «Клиентский портфель».
6.Информация по денежным средствам на торговых счетах.
7.Информация по бумажным лимитам.
8.Позиции по фьючерсам и ограничения по денежным лимитам.
9.Данные с графиков цены и объема торгового инструмента.
10.Данные с графиков индикаторов.

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

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

1.Рыночная заявка.
2.Лимитированная заявка.
3.Заявка типа «Стоп-лимит» (стоп-заявка).
4.Заявка типа «Тейк-профит».
5.Заявка типа «Тейк-профит и Стоп-лимит».
6.Заявка типа «Спот-цена по другой бумаге».
7.Заявка типа «Со связанной заявкой».

На протяжении всего курса мы будем обращаться к документу «Интерпретатор языка Lua.pdf», так как в нем содержится вся информация по взаимодействию скриптов на языке Lau и терминалом QUIK.Следующий документ из пакета «Документация по языку Lua в QUIK» это «Создание индикаторов технического анализа с помощью скриптов Lua.pdf» – в данном документе рассматриваются примеры создания индикаторов технического анализа. Данная инструкция была разработана специалистами компании ARQA Technologies.

Следующий документ «Использование Lua в Рабочем месте QUIK.pdf» — документ был разработан специалистами компании ARQA Technologies. Документ поясняет взаимодействие скриптов Lua и терминала QUIK также в документе представлены некоторые примеры написания скриптов на языке Lua.

В папке «examples» содержаться примеры скриптов Lua для QUIK.

Введение в QUIK (Квик) и LUA | K

В этой части мы будем с вами говорить о таком направлении как программирование на языке QLUA. Что же это за язык такой? — Обыкновенный язык программирования, каких существует множество, но с небольшой оговоркой. Вообще говоря существует язык программирования LUA, а первая буква Q в названии, говорит нам о том, что мы применяем данный язык программирования в платформе QUIK (Квик). Ещё этот язык иногда называют QuikLua, что в принципе тоже верно. Ну да ладно, как бы его не называли суть остается неизменной.

Если вы начинаете с самого начала и ещё ни разу не слышали о том как писать индикаторы или скрипты в платформе QUIK, то этот сайт как раз то что вам нужно.

 

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

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

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

Где писать код?

Индикатор или скрипт это обыкновенный текстовый документ который имеет специальное расширение. Поэтому писать мы можем используя любой текстовый редактор, даже самый простой блокнот встроенный в операционную систему Windows. Открываем блокнот, пишем необходимый код сохраняем и всё наш индикатор или скрипт готов, можем использовать его в платформе QUIK, всё просто. Просто, да неудобно. Вы видели как выглядит текст в блокноте? Сплошной черный текст на белом фоне, писать можно, читать тоже можно, но программировать просто ужасно трудно. Поэтому я вам предлагаю использовать расширенную версию блокнота, называется эта программа notepad++. Я никоим образом ни кого не заставляю использовать именно ее, можете использовать любую другую программу. Я же предпочитаю пользоваться именно notepad++.

Если Вы решили как и я использовать для написания кода программу notepad++, то рекомендую перейти в раздел «QLUA (Квик) -> Рабочее Место» изучить все статьи начиниая с первой «Редактор кода notepad++» и настроить свое рабочее место.

 

Индикатор или скрипт? Что выбрать?

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

в заключении

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

Если у вас всё готово, а главное вы сами готовы, то переходим к следующему шагу.

QLua

Тема сегодняшней публикации — скриптовый язык 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 не воспринимается.

--[[  Многострочные комментарии располагаются между символами двух дефисов и квадратных скобок  ]]--      
Settings=              
        {                          
            Name = "Channel",           -- название индикатора
            period=5,                   -- параметр индикатора                          
            line=                                     
                {                               
                    {  
                        Name = "High",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(120,90, 140)
                    },
                    {
                        Name = "Low",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(120,90,140)
                    }
                }
       }

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

  • (1)Название индикатора
  • (2)Установка значения для переменной period
  • (3)Установка цвета по умолчанию для линии High
  • (4)Название линии индикатора , которое мы прописали в ячейке «line» нашего листа настроек
  • (5)Тип линии который мы установили для использования по умолчанию Type =TYPE_LINE
  • (6)Толщина линии индикатора Width = 1
function
Init()
            return 2
end
-- выводить на график будем две линии
 
--[[
В функции OnCalculate
мы рассчитаем индикатор Price Channel – это две линии построенные по
экстремумам значений свечей за определенное количество баров. То есть первое
значение, которое будем рассчитывать это максимальное значение за period в
нашем случае он равен пяти, а второе значение, которое будет возвращать функция
это минимальное значение за period. Итак приступим к расчету.
]]--

function OnCalculate(index)
    local high=0
    local low=0
    Period = math.floor(Settings.period)

    if index<=Period then
       high=H(index)
       low=L(index)
       for i=index , 1 , -1 do
           if H(i)>high then high=H(i) end
           if low>L(i) then low=L(i) end
       end
    else
       high=H(index)
       low=L(index)
       for i=index , (index+1)-Period , -1 do
           if H(i)>high then high=H(i) end
           if low>L(i) then low=L(i) end
       end
    end
    return high , low
end

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

Ссылка для скачивания исходного кода индикатора на QLua

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

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

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

-- переменная для прырывания цикла при срабатывании функции обратного вызова OnStop

is_run = true

-- присванивание переменным начальных базовых значений торгового алгоритма

Account = "NL0011100043"     -- торговый счет
Class_Code = "QJSIM"         -- класс торгуемого инструмента
Sec_Code = "SBER"            -- код торгуемого инструмента
TF = INTERVAL_M1             -- торговый таймфрейм
g_lots = 1                   -- количество торгуемых лот

function main()
    -- подписываемся на получение данных свечей по инструменту в массив ds
    ds = CreateDataSource(Class_Code, Sec_Code, TF)
    while is_run do
          sleep(1000)            -- обрабатываем цикл с задержкой 1сек.
          ds:SetEmptyCallback()  -- обновляем данные по инструменту в массиве ds
          local serv_time=tonumber(timeformat(getInfoParam("SERVERTIME"))) -- помещене в переменную времени сервера в формате HHMMSS                  
          if isConnected()==1 and serv_time>=10000 and serv_time<235000 then -- проверка наличия соеденения с сервером и поподания в торговое окно
             -- место для размещения торговой логики
             -- расчет значения скользящей средней
             local SMA = 0
             local period = 20
             local count_candle = ds:size()
             if count_candle>20 then
                local sum = 0
                for i=0 , period-1 do                                                  
                    sum = sum + ds:C(count_candle-i)
                end
                SMA = sum / period
                local lots = get_lots()             

                -- получение количества лот в клиентском портфеле по инструменту
                if ds:C(count_candle)>SMA and lots<g_lots then
                    -- получение минимального шага цены для организации величины проскальзываня в ордере
                    local step=tonumber(getParamEx(Class_Code, Sec_Code, "SEC_PRICE_STEP").param_value)
                    local price_order = ds:C(count_candle)+(step*20)
                    -- цена для ордера будет = цена закрытия + 20-ть минимальных шагов инст.
                    send_order("B", math.abs(g_lots-lots) , price_order)
                end
                if ds:C(count_candle)<SMA and lots>(g_lots*(-1)) then
                    -- получение минимального шага цены для организации величины проскальзываня в ордере
                    local step=tonumber(getParamEx(Class_Code, Sec_Code, "SEC_PRICE_STEP").param_value)
                    local price_order = ds:C(count_candle)-(step*20)    
                    -- цена для ордера будет = цена закрытия - 20-ть минимальных шагов инст.
                    send_order("S", math.abs(g_lots+lots) , price_order)
                end
             end                  
           end
    end
end 

-- функция возвращает количество лот в клиентском портфеле по заданному инструменту
function get_lots()
    local lots = 0
    local n = getNumberOf("futures_client_holding")
    local futures_client_holding={}                    
    for i=0,n-1 do             
       futures_client_holding = getItem("futures_client_holding", i)
       if tostring(futures_client_holding["sec_code"])==Sec_Code then
          lots=tonumber(futures_client_holding["totalnet"])
       end
    end      
    return lots
end
----------------------

-- отправка транзакции
function send_order(operation, quantity, price)       
    -- получение минимального шага цены для округления цены отправляемого ордера
    local step=tonumber(getParamEx(Class_Code, Sec_Code, "SEC_PRICE_STEP").param_value)
    local trans_params = 
          {
            CLIENT_CODE = Account,
            CLASSCODE = Class_Code,
            SECCODE = Sec_Code,
            ACCOUNT = Account,
            TYPE = "L",
            TRANS_ID = tostring(1),
            OPERATION = tostring(operation),
            QUANTITY = tostring(math.abs(quantity)),
            PRICE = tostring(math.floor(tonumber(price)/step)*step),  -- округление цены при отправлении транзакции
            ACTION = "NEW_ORDER" 
          }
    local res = sendTransaction(trans_params)
    if string.len(res) ~= 0 then
        message('Error: '..res,3)
        return 0
    else
        return trans_id
    end      
end

function OnStop(stop_flag)              
     is_run=false
     stop_flag=1
     ds:Close() 
end


function timeformat(time_unf)
     local in1, in2=0,0
     local time_form=0      
     in1=string.find(time_unf,":" , 0)
     if in1~=nil and in1~=0 then
        in2=string.find(time_unf,":" , in1+1) 
        time_form=string.sub(time_unf, 0 ,in1-1)..string.sub(time_unf, in1+1 ,in2-1)..string.sub(time_unf, in2+1 ,string.len(time_unf))
     end
     return time_form
end

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



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

Ссылка для скачивания исходного кода робота на QLua

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

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

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

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

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

С чего начать самостоятельное обучение?

LogoNew
Во первых, Вам потребуются удобные среды разработки (программы, где Вы сможете писать свой код), о том, где их взять и как установить прочтите здесь. Для написания скриптов QLua Вам понадобится только Notepad++.

Во вторых, получите терминал QUIK с демо-счетом, можете получить его либо в компании Arqa (разработчик терминала) по данной ссылке, либо у практически любого брокера.

И в третьих, начинайте изучать QLua.
Рекомендую начать с раздела меню «QLua(Lua) основы», в частности со статей: «База скрипта в QLua (lua)» и «Функции обратного вызова, встроенные в QLua», остальные статьи данного раздела используйте как справочники при написании скрипта, в них практически к каждой функции есть пример кода с комментариями.

Следующим шагом переходите к разделу меню «QUIK + QLua(Lua)», в нем речь идет о том, как взаимодействует скрипт с терминалом QUIK, как обменивается данными, все так же с примерами и комментариями. Особое внимание обратите на раздел «Блоки кода», в особенности на статью в нем: «Пример простого торгового движка «Simple Engine» QLua(Lua)», разобрав код которой Вам многое станет понятнее, хоть по началу такой подход может показаться несколько сложным.

Так же не забывайте про то, что в папке с терминалом есть 2 файла справки:
QLUA.chm — в нем есть все про QLua, правда практически без примеров, но для справки подойдет.
info.chm — справка по работе с терминалом, помимо этого в нем есть нужные для QLua разделы, в частности для того, чтобы знать какие поля должны быть в массиве для отправки транзакции функцией sendTransaction(), смотрите эту информацию здесь:
«Раздел 6. Совместная работа с другими приложениями»«Импорт транзакций»«Формат .tri-файла с параметрами транзакций» и «Примеры строк, которые могут содержаться в файле»

Когда Вы уже сможете уверенно писать скрипты, которые будут совершать торговые операции, работать с таблицами, графиками, индикаторами, тогда можете переходить к следующему разделу (если QLua Вам окажется недостаточно), это пункт меню «Qlua C/C++ C#».
Первым шагом изучите статью «Коннектор DLL QUIK — QLua(Lua) — C#», затем изучите примеры из подраздела «Обмен данными». Дальше можете изучить все остальное, что есть в разделе «Qlua C/C++ C#».

В процессе изучения Вы всегда можете обратиться за помощью в комментариях под изучаемой статьей, или в разделе «ВОПРОС-ОТВЕТ».

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

Продуктивного изучения и больших профитов Вам !!! 🙂
Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *