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