orekton
orekton личный блог
18 августа 2014, 14:58

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

Многие хотели бы научиться писать биржевых роботов или хотя бы автоматизировать некоторые свои биржевые операции, но пугаются самого процесса программирования, считая его чем-то сложным. Эта статья написана для того, что бы помочь тем, кто только начинает программировать. Вы сами увидите, что на самом деле тут все просто.
Прежде чем приступить к уроку, хочу сказать пару слов о языке программирования 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
22 Комментария
  • Иван Грозный
    18 августа 2014, 15:34
    Очень полезно. Как раз начал Qpile изучать. qlua тоже хорош)
    Спасибо за подробные скриншоты!
  • полудух
    18 августа 2014, 16:07
    а чё-нить посерьёзней qlua можно использовать?
    на сях например
  • Mitro77
    18 августа 2014, 16:18
    Спасибо! +
  • Simix
    18 августа 2014, 16:25
    + Спасибо!
  • Евгений
    18 августа 2014, 16:49
    Хорошая статья. Напишите в следующем выпуске что-то детальное. Например арбитраж.
  • Иван Грозный
    18 августа 2014, 17:07
    Кто-нибудь знает как массово выгружать котировки? Скажем хай и лоу свечи в 1 минуту ро одному эмитенту?
  • Karmanoff Fedya
    18 августа 2014, 17:56
    а у Вас есть код, который закрывает по рынку все что открыто, если вариационная маржа меньше определенной суммы?
  • Seroja
    18 августа 2014, 19:12
    Назовите пожалуйста 10 преимуществ QLUA по сравнению с QPILE.
    • swerg
      18 августа 2014, 20:42
      Sergey, преимущество одно и главное: немедленная реакция скрипт на рыночное событие.
      Плюс свои индикаторы, но это отдельная тема.
  • Евгений Макеев
    18 августа 2014, 19:28
    Еще!!!
  • Lika
    18 августа 2014, 20:09
    Спасибо!!! Автор, Вы молодец! Я начала изучать MQL5. Мне кажется, что он легче и круче.
  • Евгений Вяткин
    19 августа 2014, 10:02
    Спасибо, оказалось очень полезно!

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн