Блог им. orekton

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

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


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

message(«Hello, World!»,1)
Текст программы можно набрать в блокноте:
 Qlua для чайников. Часть 1
Но лучше, конечно, воспользоваться специализированной программой типа «Notepad++», там есть даже подсветка синтаксиса:
 Qlua для чайников. Часть 1
Обратите внимание, что сохранять файл нужно обязательно с расширением lua.
Итак, программа набрана, запускаем ее. Для этого идем в меню «Таблицы» -> «Lua» -> «Доступные скрипты».
 Qlua для чайников. Часть 1
У нас откроется вот такое окошко:
 Qlua для чайников. Часть 1
Жмем кнопочку добавить, выбираем там наш файл:
 Qlua для чайников. Часть 1
Он появился в списке доступных скриптов:
 Qlua для чайников. Часть 1
Выделяем его, жмем на кнопочку «Запустить» и видим результат:
 Qlua для чайников. Часть 1
Поздравляю, вы написали свою первую программу. Просто, не правда ли?
Но слышу разочарованные вздохи. Несмотря на просто изумительную простоту, наша программа абсолютно бесполезна. Ну что я могу сказать? Наберитесь терпения! Сейчас мы научится делать более сложные вещи.
Итак, давайте попробуем ввести заявку. Создаем новый скрипт (файл 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. Это код класса. Его можно посмотреть, например, в текущей таблице параметров:
Qlua для чайников. Часть 1 
В нашем случае мы используем код класса акций ЛУКОЙЛ.
Саму текущую таблицу параметров можно открыть через меню «Таблица» -> «Текущая таблица».
Qlua для чайников. Часть 1 
В этой таблице необходимо настроить колонки, которые мы хотим видеть:
Qlua для чайников. Часть 1 
Следующее поле SECCODE – это код бумаги, в данном случае код ЛУКОЙЛа, так же смотрим его в текущей таблице параметров:
 Qlua для чайников. Часть 1
Поле ACTION – это действие, которое мы производим. В нашем случае это NEW_ORDER – новая заявка.
Поле ACCOUNT – это номер брокерского счета, можно посмотреть в таблице счетов, колонка «Счет»:
Qlua для чайников. Часть 1 
Эта таблица находиться в меню «Торговля» -> «Торговые счета»:
Qlua для чайников. Часть 1 
Далее идет поле CLIENT_CODE – это код клиента, можно посмотреть в таблице «Клиентский портфель»:
Qlua для чайников. Часть 1 
Открывается данная таблица через «Лимиты» -> «Клиентский портфель»:
Qlua для чайников. Часть 1 
Поле TYPE – тип заявки. «L» — лимитированная, «M» — рыночная.
OPERATION – тип операции, «B» если покупаем, «S» если продаем.
QUANTITY – количество, как правило, в лотах. Но у разных брокеров может быть по-разному (в лотах или в штуках акций).
PRICE – цена.
TRANS_ID – идентификатор транзакции. Иногда он бывает нужен, например, в случае, описанном в одной из моих предыдущих статей: http://robostroy.ru/community/article.aspx?id=765. Но чаще всего безразлично, что вы зададите в этом поле, например, можно просто поставить единичку.
После заполнения полей переменной t мы вызываем функцию sendTransaction, она вернет нам сообщение, которое мы выведем на экран функцией message, которую мы ранее использовали для вывода сообщения “Hello, World!”. Обратите внимание, что res идет без кавычек, это переменная, а не жестко заданный текст, как в предыдущем примере.
Итак, поставим в текст программы те параметры, которые правильные для вашего случая (номер счета, код клиента, параметры бумаги, цену и количество) и запускаем скрипт. Если все правильно, то вы увидите примерно такое сообщение:
Qlua для чайников. Часть 1 
Иначе может вылезти сообщение с ошибкой. Проверьте, действительно ли выставилась заявка.
Qlua для чайников. Часть 1 
И так, мы уже научились писать скрипт, выставляющий заявки. Но опять слышу разочарованные вздохи. По-прежнему мы не написали ни одной полезной программы.  Ну что ж, для начала давайте напишем простенький скрипт, который выставит серию заявок на покупку и на продажу с шагом от заданной цены.

Полная версия саться на robostroy.ru
★145
22 комментария
Очень полезно. Как раз начал Qpile изучать. qlua тоже хорош)
Спасибо за подробные скриншоты!
avatar
а чё-нить посерьёзней qlua можно использовать?
на сях например
avatar
Спасибо! +
avatar
+ Спасибо!
avatar
Хорошая статья. Напишите в следующем выпуске что-то детальное. Например арбитраж.
avatar
Евгений, да, сделаем что-нибудь про арбитраж
avatar
Дмитрий Александрович, +1
avatar
Кто-нибудь знает как массово выгружать котировки? Скажем хай и лоу свечи в 1 минуту ро одному эмитенту?
avatar
а у Вас есть код, который закрывает по рынку все что открыто, если вариационная маржа меньше определенной суммы?
avatar
Karmanoff Fedya, задайте вопрос на первоисточнике, автор ответит
avatar
Назовите пожалуйста 10 преимуществ QLUA по сравнению с QPILE.
avatar
Sergey, преимущество одно и главное: немедленная реакция скрипт на рыночное событие.
Плюс свои индикаторы, но это отдельная тема.
avatar
Еще!!!
avatar
Дмитрий Александрович, я имел ввиду обход технических ограничений, которые quik/qlua/qpile вставляют
avatar
полудух> я имел ввиду обход технических ограничений, которые quik/qlua/qpile вставляют

о каких ограничениях речь?
avatar
iQuik.ru, сейчас не вспомню все, вот, например, можно только 1 заявку в секунду ставить.
потом, есть ли там привычные элементы высокоуровневых языков?
такие как:
массивы, ассоциативные массивы (хеши), циклы, функции, регекспы, работа с файлами и т.д.
avatar
полудух, всё перечисленное с точи зрения языка есть в QLua (плюс доп. библиотеки можно подключать)
При этом скрипт на рыночное событие реагирует мгновенно.

Плюс подключение собственных DLL на С++/Delphi
См. ссылку на несколько комментариев выше
avatar
Спасибо!!! Автор, Вы молодец! Я начала изучать MQL5. Мне кажется, что он легче и круче.
avatar
Дмитрий Александрович, quik2dde.ru/viewforum.php?id=14
avatar
Спасибо, оказалось очень полезно!
avatar

теги блога orekton

....все тэги



UPDONW
Новый дизайн