Честно говоря, не знаю, что Вам сказать, мне нужно как-то время выкроить, чтобы начать создавать этот курс, а я сейчас проект большой делаю, по завершении которого, навыки программирования не понадобятся для создания скриптов на QLua. Будет нужно только понимание алгоритмов и умение их создавать из блоков, т.е. будет конструктор роботов из функциональных, визуальных блоков, только в отличии от существующих решений в результате будут получатся не роботы, которые могут работать только на определенной платформе, а обычные скрипты QLua, которые можно будет запускать в терминале QUIK. Но первым этапом я сделаю и запущу именно редактор кода с полной поддержкой QLua синтаксиса, с подсказками, автозавершением кода и т.п. И если Вы захотите уже на этом этапе начать использовать проект, то навыки программирования все-таки понадобятся 🙂
Вобще, по моему мнению, на сайте есть вся информация, чтобы писать скрипты на QLua. Подскажите с чего именно Вы бы хотели начать обучение? С самых азов программирования, типа, что такое переменные, арифметические операции, операторы сравнения, условные операторы, циклы и функции ?
-
Хотелось бы конечно с самых азов. Но для начала желательно было бы узнать от знающего что, куда и в чем. Если не сложно, можно написать пост, в котором конкретно расписано по пунктам где писать код скрипта, синтаксис и т.д.???
п.с. Может я конечно слеповат (прошу прощения сразу). Если есть что то похожее, то тыкните лицом в это как говориться.-
🙂 в меню (слева) пункт «Инструменты»:
для работы Вам понадопиться терминал QUIK с демо-доступом, чтобы не тестировать скрипты на реальных деньгах:
https://quikluacsharp.ru/instruments/demo-dostup-quik-dlya-testirovaniya-skriptov-i-robotov-na-qlua-lua/
чтобы писать скрипты Вам нужен редактор кода, для этого хорошо подойдет Notepad++:
https://quikluacsharp.ru/instruments/instrumenty-dlya-razrabotki-torgovyh/О том, что такое переменные, арифметические операции, операторы сравнения, условные операторы, циклы и функции на данном сайте нет информации, т.к. эта информация касается всех языков программирования, а сайт о QLua.
Если у Вас есть базовые знания программирования, то информацию о том, из чего состоит скрипт QLua Вы можете найти здесь:
https://quikluacsharp.ru/qlua-osnovy/baza-skripta-v-qlua/
здесь о том, как запустить скрипт в терминале QUIK:
https://quikluacsharp.ru/quik-qlua/kak-zapustit-qlua-lua-skript-v-terminale-quik/со всеми особенностями синтакса QLua можно ознакомиться в разделе меню «QLua(Lua) основы»
и, вобще, все пункты меню названы по принципу связи, т.е., например, в пункте «QUIK + QLua(Lua)» находится информация о взаимосвязях скрипта QLua и терминала QUIK.
-
Спасибо за подсказку, буду изучать.
-
-
Во всех статьях есть примеры использования всего, о чем там написано, с комментариями.
Т.е. пользоваться данным сайтом удобно «от задачи», а не наоборот, сначала попытаться изучить всю информацию на сайте, а потом думать что же теперь со всем этим делать 🙂Особого внимания заслуживает раздел «QLua(Lua основы)» -> «ФУНКЦИИ ОБРАТНОГО ВЫЗОВА, ВСТРОЕННЫЕ В QLUA», т.к. вся работа с терминалом строится на них, в данном разделе так же есть описания и примеры использования.
Т.е. что я хочу сказать, попробуйте начать с того, что поставьте себе какую-то простую задачу, для начала, и попробуйте ее решить, с помощью информации на данном сайте, т.к. сайт построен для практического применения, а не для того, чтобы утопить всех в куче теории.
Если что-то будет не получаться, задавайте вопросы, я Вас быстрее в нужное русло направлю.
-
Решил еще пример использования сайта привести 🙂
Например, стоит у Вас задача: «Как в скрипте получить данные с графика», вы рассуждайте следующим образом:
Между какими элементами взаимосвязь? С одной стороны скрипт QLua (данные нужно получить в него), с другой стороны терминал QUIK (данные нужно получить из него, т.к. график в нем), значит первоначальный раздел меню «QUIK + QLua(Lua)», открываете его, и видите в нем пункт «Обмен данными», открываете его и видите в нем решение Вашей задачи, пункт: «ПОЛУЧЕНИЕ В QLUA(LUA) ДАННЫХ ИЗ ГРАФИКОВ И ИНДИКАТОРОВ»Или, например, Вы на знаете как в QLua работать с массивами, Вы снова рассуждаете, массивы это что? Чисто скрипт, т.к. массивы не имеют никакого отношения к терминалу, значит раскрываете раздел меню «QLua(Lua) основы» и ищите там в названии пунктов слово «массив», находите пункт «ПЕРЕМЕННЫЕ, МАССИВЫ И ФУНКЦИИ В QLUA (LUA)»
Можете еще вот этот комментарий прочитать https://quikluacsharp.ru/quik-qlua/skript-vyvodit-v-tablitsu-qlua-balans-pokupok-prodazh-poslednih-5-ti-1-minutnyh-svechej/#comment-861 , я в нем одной девушке как раз основы некоторые рассказывал, надеюсь поможет.
-
спасибо
-
Всегда пожалуйста, обращайтесь
-
-
-
Если робот остался в длинной позиции, указываем L_Pos = true, а S_Pos = false и наоборот, если в короткой позиции, то указываем S_Pos = true, L_Pos = false. Если без позиции, указываем false, false. Эти действия удобно делать, просто комментируя не нужные строки кода.
И так, наш робот автоматически отслеживает заданные параметры. При выполнении условия на вход в позицию, робот отправляет транзакцию на сервер брокера. Далее он ожидает ответа, что транзакция принята брокером, если транзакция принята брокером, то далее, робот ожидает ответа от биржи, что заявка выставлена в торговую систему. После получения ответа от биржи, что заявка выставлена, робот записывает текущую позицию в соответствующую переменную и далее начинает отслеживать, выход из текущей позиции и возможность входа в противоположную позицию. Наш робот не отслеживает, исполнена заявка или нет, в этом нет необходимости, поскольку используются рыночные приказы, если биржа ответила, что заявка принята, это значит, она уже исполнена. В случае, если на каком-либо этапе выставления заявки что-то пойдет не так, например, транзакция не принята брокером или заявка не выставлена в торговую систему биржи, то робот сообщит нам об этом, выведя на экран текстовое сообщение, также наш робот может отправить на email сообщения об ошибке.
Давайте поясню понятие Транзакция. Транзакция — это процесс отправки заявки на биржу. В момент транзакции отслеживается корректность параметров заявки, и проверяются доступные лимиты по объемам заявки. При отправке транзакции могут возникать два вида ошибок на двух разных этапах. Первый этап, на котором могут возникать ошибки, это в момент вызова функции sendTransaction – эта функция отправляет транзакцию на сервер брокера. На этом этапе, ошибки отслеживаются терминалом QUIK, и все они связаны с корректностью составленной таблицы с параметрами заявки. Какие это могут быть ошибки, например, не указали, объем заявки или не указан торговый счет, т.е. это ошибки в коде скрипта. Второй этап, на котором могут возникнуть ошибки, из-за которых заявка не будет выставлена на бирже, это этап проверки параметров заявки в торговой системе. Этот этап наступает после того как терминал QUIK принял Вашу транзакцию и отправил ее дальше. Тут могут возникнуть ошибки следующего характера. Например, превышен допустимый объем заявки или указана цена, которая выше или ниже максимально возможной цены или заявка выставляется в момент отсутствия торгов.
Ошибки первого этапа возникают только во время первичных, тестовых торгов роботом. После того как скрипт отлажен, ошибок этого типа не бывает. Ошибки второго этапа могут появляться в независимости от кода скрипта, но опять же при хорошем коде, в котором исключены моменты, при которых ошибка теоретически возможна, появление ошибки второго этапа сведена к минимуму. На самом деле остается одна единственная ситуация, при которой появление ошибки второго этапа возможна – это обрыв связи с сервером в момент, когда транзакция принята терминалом QUIK, но не дошла до сервера брокера. К счастью, это исключительно редкая ситуация, я бы сказал больше — теоретическая. По транзакциям пока все, пойдем дальше.
Наш робот действует не молча, он постоянно записывает свои действия и параметры в указанные файлы. На каждой свече робот записывает текущие параметры — Дата, Время, Цена закрытия, Значение скользящей средней, Ускорение, Текущая позиция лонг – шорт. Эти данные помогают отследить возможные ошибки в направлении позиции или восстановить работу скрипта после, например, случайного закрытия терминала QUIK.
Помимо текущих параметров, записываются и результаты транзакций. Всегда есть возможность посмотреть, когда робот совершал сделки и прочитать сообщение об ошибках, если таковые будут.
Хорошо, что нам уже известно про алгоритм укорение скользящей средней? Мы подробно разобрали этот алгоритм, кода тестировали его на исторических данных. Скрипт торгового робота и скрипт тестирования очень похожи. Оба этих скрипта получают данные, тестовый скрипт считывает данные из файлов, торговый скрипт считывает данные с графиков QUIK. Далее оба скрипта выполняют одинаковые действия, рассчитывают параметры индикаторов и отслеживают условия для входа в позицию или выхода из нее. Различия, в действиях начинаются после того, как выполняются условия входа или выхода. Тестовый скрипт просто записывает данные, а торговый скрипт отправляет транзакцию на сервер QUIK. По сути, это единственное их различие. Один совершает реальные сделки, другой просто записывает данные.
Это были озвучены сходства и различия в логике работы обоих скриптов. Различия в коде скриптов более существенны, поскольку появляется необходимость обработки транзакций. Плюс в торговом скрипте должны отсутствовать логические ошибки, из-за которых скрипт может прекратить свою работу. Надежность работы торгового скрипта ставится на первое место.
Давайте перейдем к коду и рассмотрим каждую его строку. Я очень надеюсь, что Вы уже ознакомились со всеми разделами текущего Курса, в противном случае Вам будет сложнее понять, о чем идет речь.
-
April 1 2014, 23:41
- IT
- Cancel
Язык луа предоставляет достаточно широкие возможности для создания инфраструктуры торговых алгоритмов. Большой плюс Луа его интегрированность непосредственно в торговый терминал квик, что снижает риск обрыва потока данных из квика в стороннюю оболочку, снижение времени на передачу данных, его обработку и передачу торговых сигналов обратно в квик. Кроме этого, луа позволяет создать собственный интерфейс внутри квика, отслеживать исполнение (полное и частичное) ордеров, возможность встраивать элементы ММ.
Документация по Луа, как им то невооборазимым образом разбросана по разным документам. Разумеется пользоваться скриптами будет небольшое кол-во пользователей, тем не менее, документацию по языку все же можно было собрать в одном месте.
Итак, синтаксис языка и его описание
Если с синтаксисом языка все понятно, двигаем дальше.
Проверим, готов ли наш квик к обработке скриптов на луа.
Работу QLua обеспечивает файл qlua.dll, который должен находиться в одной папке с файлами рабочего места QUIK, например, C:Program FilesQUIK. Если файла нет, пробуем обновить квик или скачиваем dll с сайта quik.ru
Программирование
Скрипт пишется непосредственно в текстовом файле и сохраняется с расширением .lua
Возможно 3 подхода к написанию скриптов:
1. Скрипт пишется в текстовом файле и при его запуске выполняется 1 раз. Удобен для выполнения каких то разовых операций.
2. Можно написать в Lua-скрипте функцию с предопределенным именем и всю логику работы робота (или вычислительного скрипта) поместить в эту функцию. Функция main выполняется в отдельном потоке, т.е. она не мешает работе основного функционала терминала QUIK, наличие функции позволяет выполнять периодически приостанавливать скрипт и возобновлять его работу. Если зациклить main() и вставить sleep(), то получаем полную эмуляцию подхода, использующегося при программировании на встроенном QPILE: периодический расчет чего-либо через заданный интервал времени.
3. В QLUA доступна событийная модель программирования.
При выборе такого подхода получаем весьма гибкую среду выполнения пользовательских скриптов внутри QUIK, позволяющую мгновенно получать интересующие события от терминала, производя нужную нам обработку этих событий. Для того, чтобы обработать то или иное событие, необходимо просто прописать в своем скрипте функцию с предопределенным названием. Все доступные функции обработки событий есть в документации по QLUA. Поддерживаются самые различные события совершение на бирже очередной сделки, выставление новой заявки пользователем (или скриптом), изменение стакана котировок и т.д. Схематически принцип выполнения скриптов внутри терминала можно изобразить следующим образом:
Скрипт LUA в QUIK может содержать несколько функций с предопределенными названиями, являющимися обработчиками событий (таких как новая сделка, изменение лимитов, изменение котировок и т.д.).
Выполнение скрипта происходит после пожатия на кнопку «Запустить» в диалоге «Таблицы -> Lua -> Доступные скрипты», и всегда начинается с обработки тела скрипта вне каких-либо функций (на схеме обозначено [BODY]) и вызова обработчика с именем Init() (если он есть). После того, как функция Init() завершится, происходит создание отдельного потока приложения QUIK, и в этом потоке начинает выполняться функция main(), которая обязательно должна быть. Скрипт считается работающим до тех пор, пока выполняется функция main. Как только она завершится — прекращается и выполнение скрипта, т.е. вызов из него обработчиков событий. Обратите внимание, что все функции обработки событий, в отличие от функции main(), выполняются в рамках основного потока терминала QUIK, а значит время их работы должно быть сравнительно небольшим, иначе будут заметны «подвисания» в работе терминала.
Начать программирование можно с такого кода:
is_run = true
function main()
while is_run do
sleep(1000) — приостановка (1000 = на 1 секунду)
robot()
end
end
function robot() —тело робота
— здесь ваш код
end —конец тела робота
function OnStop(stop_flag)
is_run=false
stop_flag=1
end
Описание функций находятся здесь в файле «Интерпетатор языка луа» или в веб-версии здесь.
К сожалению, описание функций не полное и когда вы дойдете то программирования отправки транзакций (функция «sendtransaction()» ) то обнаружите что параметры нужно искать в другом месте, а именно в «Руководстве пользователя квик» в разделе 6 «Работа с другми приложениями», правда удобно?)) Я потратил несколько минут на поиски.
В остальном язык сильно проще и приятнее QPILE.
Примеры работающего робота, торгующего в спреде здесь. Его принцип работы и описание в предыдущем посте.
текст частично взят отсюда
В данной статье мы уже подошли вплотную к тому, чтобы создать свой первый скрипт для торгового терминала QUIK. И начнем создавать скрипт, а не индикатор, потому что для начала скрипт будет проще для понимания.
Итак, чтобы у нас находилось все в одном месте, а не раскиданы все файлы по компьютеру, создадим специальную папку для будущих скриптов и для удобства разместим ее прямо в папке с Квиком.
Как и где создаем каталоги и файлы
Открываем папку программы QUIK и прямо в ней создаем свою новую папку. Назвать ее можно как угодно, но желательно название задавать латинскими буквами, например «LuaScripts». В этой папке и будут храниться все созданные нами скрипты для КВИК на языке QLUA.
Заходим в нашу созданную папку «LuaScripts» и в этой папке создаем простой текстовый документ. ПКМ — правой кнопкой мыши в свободном пространстве и выбираем пункт «Текстовый документ».
Затем переименовываем этот файл и пишем любое название латинскими буквами, например пусть будет «Script_N1», а также меняем расширение на нужное нам .lua, в итоге у нас получается файл «Script_N1.lua». Но хочу предупредить, что чаще всего расширения не видно у файлов, поэтому если Вы все сделаете как написал выше, то виндоус по умолчанию все равно добавит расширение .txt, поэтому можно открыть либо в проводнике, либо в «тотал командоре» либо включить отображение расширений файлов в свойствах папки, либо создать файл прямо в программе NotePad++.
Если хотим создать через НотПад. То вверху в меню данной программы нажимаем вкладку «Синтаксисы», выбираем пункт «L» и в открывшейся области выбираем «Lua».
Далее в меню NotePad нажимаем кнопку «Файл» — «Сохранить как».
В открывшемся новом окне находите папку с Квиком и открываете созданную папку «Lua scripts». Внизу в этом же окне задаете имя файла «Script_N1» и еще чуть ниже выбираете тип файла LUA. Затем нажимаете «Сохранить».
Все, файл нашего будущего скрипта создали, осталось дело за малым, написать в него код на языке LUA! Как мы уже знаем, что есть инструкция в КВИКе о том, как создается скрипт, называется этот файл с инструкцией QLUA.chm, располагается в папке с Квиком.
Напишем простейший код для примера
function main() message("Запущен мой скрипт"); end
И сохраним сделанные нами изменения в файл путем нажатия на кнопку в меню
Переходим к запуску скрипта «Script_N1.lua»
Хоть и очень просто, но все же уже первый скрипт написан! Давайте запустим его в QUIK.
Для этого Открываем терминал КВИК, в меню выбираем пункт «Сервисы» — «LUA скрипты…».
В появившемся окне «Доступные скрипты» справа нажимаем на кнопку «Добавить». Находим свой скрипт «Script_N1.lua» в папке «Lua scripts» и жмем «Открыть».
У нас открывается наш скрипт. Теперь, чтобы его запустить, выделяем строку с нашим скриптом «Script_N1.lua» и справа в окне нажимаем кнопку «Запустить».
После этого у нас появляется окно сообщений в КВИК вот такое!
В окне какие-то каракули 🙂 Но давайте это устраним. В NotePad в редакторе скрипта в меню находим раздел «Кодировки» и далее выбираем «Преобразовать в ANSI».
Еще раз сохраняем наш скрипт. Возвращаемся в КВИК и в окне «Доступные скрипты» жмем кнопку «Запустить».
Теперь выходит окно с понятным сообщением!
Для того, чтобы постоянно в создаваемых в NotePad файлах не проводить преобразование в ANSI, можно сразу один раз в настройках указать кодировку нового документа.
Для этого в меню «Опции» — «Настройки». В появившемся окне выбираем из списка «Новый документ» и справа настраиваем следующее: «Кодировка — ANSI», «Формат Конца Строк — Windows (CR LF).
На этом пока завершим наши действия на сегодня, не все сразу, но многое мы уже познали, много интересного еще нас ждет впереди!