Некоторое время назад в Quik появился встроенный язык программирования qlua, который расширяет возможности пользователей в плане создания торговых роботов под эту платформу. Сравним возможности qlua с возможностями qpile и напишем простого робота.
Случайно узнал, что в Квике появился новый язык программирования, на котором можно писать торговых роботов – qlua. Если честно, мне никогда особо не нравился qpile по следующим причинам:
Отсутствие нормального отладчика, что делает процесс отглючивания роботов весьма и весьма муторным и трудоемким.
Непохожесть многих конструкций qpile на такие распространенные языки, как C, Pascal и их множественные диалекты. Из-за этого сам процесс программирования становиться очень неудобным и трудоемким. То, что легко написать, к примеру, на Pascal, на qpile пишется через «танцы с бубнами».
В qpile для того чтобы добавить в коллекцию элемент нужно вызвать функцию добавления в коллекцию и результат этот функции присвоить коллекции. Это неудобно и провоцирует ошибки, которые потом из-за плохого отладчика трудно находить.
Очень неудобно отсутствие локальных переменных. В свое время я находил выход из этой ситуации – если в какой-то функции надо использовать внутренние переменные, которые не должны испортить общие данные, то такую переменную обозначал префиксом, сокращенным от имени процедуры. Хотя это тоже очень неудобно. Согласитесь, это извращение, называть переменную aoI (если она внутри функции AddOrder) или robCurrentPrice (если функция называется ReadOrderBook). Но другого выхода, к сожалению, нет.
В общем, новость я воспринял с энтузиазмом, надеясь, что в новом языке исправлены эти недочеты.
Итак свое знакомство с миром qlua я начал с того, что слегка «погуглил» эту тему. И вот что узнал: qlua – это адаптирвоанный под Quik язык lua, который поддерживается новыми версиями Quik. Сам язык lua по своим возможностям и идеологии ближе всего к JavaScript, но отличается гораздо более гибким конструкциями. Скажу сразу, что это не самый лучший вариант, так как не содержит понятий класса и объекта в явном виде (лучше бы они взяли за основу C# или, на худой конец, Object Pascal). Однако это все же намного более продвинутый язык, чем пресловутый qpile.
Итак, первым делом я решил опробовать на qlua простейшего робота (учебный пример), торгующего по пересечению двух мувингов (быстрый пересекает медленный снизу вверх – покупка, сверху вниз – продажа). Полный код робота прикрепленным файлом.
Принцип работы робота следующий: в цикле вызывается тело робота:
function main()
while is_run do
sleep(2000)
robot()
end
end
Вызов происходит с задержкой, указанной в параметрах функции sleep (в миллисекундах). Это, кстати, уже фишка qlua, на qpile интервал вызова робота мы могли задать только в секундах и только в настройке портфеля, а тут этот можно делать программно и программно же менять прямо в ходе работы робота.
Оригинал статьи и код робота на qlua http://robostroy.ru/community/article.aspx?id=653
Случайно узнал, что в Квике появился новый язык программирования, на котором можно писать торговых роботов – qlua. Если честно, мне никогда особо не нравился qpile по следующим причинам:
Отсутствие нормального отладчика, что делает процесс отглючивания роботов весьма и весьма муторным и трудоемким.
Непохожесть многих конструкций qpile на такие распространенные языки, как C, Pascal и их множественные диалекты. Из-за этого сам процесс программирования становиться очень неудобным и трудоемким. То, что легко написать, к примеру, на Pascal, на qpile пишется через «танцы с бубнами».
В qpile для того чтобы добавить в коллекцию элемент нужно вызвать функцию добавления в коллекцию и результат этот функции присвоить коллекции. Это неудобно и провоцирует ошибки, которые потом из-за плохого отладчика трудно находить.
Очень неудобно отсутствие локальных переменных. В свое время я находил выход из этой ситуации – если в какой-то функции надо использовать внутренние переменные, которые не должны испортить общие данные, то такую переменную обозначал префиксом, сокращенным от имени процедуры. Хотя это тоже очень неудобно. Согласитесь, это извращение, называть переменную aoI (если она внутри функции AddOrder) или robCurrentPrice (если функция называется ReadOrderBook). Но другого выхода, к сожалению, нет.
В общем, новость я воспринял с энтузиазмом, надеясь, что в новом языке исправлены эти недочеты.
Итак свое знакомство с миром qlua я начал с того, что слегка «погуглил» эту тему. И вот что узнал: qlua – это адаптирвоанный под Quik язык lua, который поддерживается новыми версиями Quik. Сам язык lua по своим возможностям и идеологии ближе всего к JavaScript, но отличается гораздо более гибким конструкциями. Скажу сразу, что это не самый лучший вариант, так как не содержит понятий класса и объекта в явном виде (лучше бы они взяли за основу C# или, на худой конец, Object Pascal). Однако это все же намного более продвинутый язык, чем пресловутый qpile.
Итак, первым делом я решил опробовать на qlua простейшего робота (учебный пример), торгующего по пересечению двух мувингов (быстрый пересекает медленный снизу вверх – покупка, сверху вниз – продажа). Полный код робота прикрепленным файлом.
Принцип работы робота следующий: в цикле вызывается тело робота:
function main()
while is_run do
sleep(2000)
robot()
end
end
Вызов происходит с задержкой, указанной в параметрах функции sleep (в миллисекундах). Это, кстати, уже фишка qlua, на qpile интервал вызова робота мы могли задать только в секундах и только в настройке портфеля, а тут этот можно делать программно и программно же менять прямо в ходе работы робота.
Оригинал статьи и код робота на qlua http://robostroy.ru/community/article.aspx?id=653