понедельник, 26 марта 2018 г.

Робострой — Некоторые особенности создания роботов на LUA в QUIK

Lua торговые роботы


Как создать такой портфель в quik 7.14 и выше?


if a_direction=="B" then l_oper="S" l_count=a_count dir=-1 t_dir=1 p_take_profit_level=t[0].high-t[0].low p_stop_loss_level=(t[0].low-t[0].high)*2 to_log("уровень тейк профита="..tostring(p_take_profit_level)) to_log("уровень.


Максим, добрый день. Я торгую рублем. Меня очень заинтересовал Ваш скрипт. Можно его модернизировать. Можно что бы скрипт выдавал звуковой сигнал когда в стакане появляется крупная заявка в диапазоне 4 000 - 10 000 на USDTOM от спреда со стороны поку.


Давно мучаюсь, не знаю как экспортировать графика доходности в exel. Подскажите, как вы это делайте?


asvag, а зачем нужны лог-файлы вообще? Чтобы журналировать действия вашего "робота"!


Некоторые особенности создания роботов на LUA в QUIK



  • Николай Камынин

  • Технологии, quik

  • 6 февраля 2013 г.


В данной статье кратко остановлюсь на некоторых особенностях создания роботов на основе встроенного в терминал QUIK языка программирования LUA.


Появления данного встроенного языка программирования является значимым событием в развитии торгового терминала QUIK и создании на его основе торговых роботов.


Данный язык позволяет решить практически любые задачи.


Вот, например, мой вариант графического интерфеса для робота.


В текущей версии QUIK наиболее просто реализовать событийного робота.


Т е робот будет реагировать на любое изменение в таблицах QUIK.


Для этого имеются встроенные колбек функции, которые вызываются в торговом терминале при обновлении соответствующих таблиц.


Но как быть если событий нет?


В этом случае робот будет бездействовать.


При этом данное состояние может длиться бесконечно долго.


Для решения указанной проблемы удобно использовать применяемый разработчиками микропроцессорных систем метод watch-dog.


Суть данного метода состоит в том, что в систему устанавливается таймер, который создает события периодически, например, с интервалом 1 секунда.


Таким образом, реализуется работа робота при отсутствии изменений информации в торговом терминале.


Далее в колбек функциях организуется управление флагом запуска таймера.


В результате получается следующий алгоритм работы робота.


Если поступает информация в торговый терминал, то вызываемые колбек функции будут сбрасывать таймер быстрее, чем он успеет создать собственное прерывание.


Таким образом, в моменты поступления информации в QUIK таймер не работает.


Однако, если обновление информации в торговом терминале приостановится на интервал больше, чем период таймера, то таймер начнет создавать свои прерывания — события. В колбек функции таймера помещается код, который обрабатывает данную ситуацию.


Таким образом, решается проблема зависания терминала.


Я применяю watch-dog с интервалом 1 секунда. Можно от 1 мс до .


Комментарии


Интересно, какой брокер поддерживает Квик с Луа?


Идем на БКС - вер 6.03 - Луа отсутствует.


Идем в ФИНАМ - вер 6.0 - Луа отсутствует.


Т.е., пока ничего кроме демо нет.


С Луа безусловно все можно, но мы имеем дело не с ЛУА, а неким доморощенным КЛУА "с некоторыми ограничениями" - не написано какими.


Тут еще один момент. "ЛУА работает в одном потоке с терминалом" и "скрипты должны быть достаточно простыми, иначе терминал перестанет функционировать" (цитирую док по памяти. формулировки могут оттличаться, но смысл примерно такой).


В общем, говорить о каких либо роботах на КЛУА пока не приходится. КЛУА не совсем ЛУА, Демо, он и в Африке Демо.


у меня брокер -финам. Версия квика 6.4.0.196 - на картинке боевой квик.


Вы полностью ошибаетесь. Вы просто не в теме.


Если посмотрите внимательно на картинку то увидите реальный графический интерфейс на луа. Могу выложить и графики.QLUA - полноценная виртуальная машина LUA.


Можно и графику включить и сом-объекты и дополнительные потоки и подпрограммы на С++


В общем все, что душе угодно. Проверено, все работает.


Николай Камынин, возможности ЛУА я представляю. Но как быть с доками ARQA, в кот написано, в частности про исполнение скриптов КЛУА в потоке терминала? (Постараюсь потом найти и процитировать более точно.) Оч настораживает.


Про ФИНАМ, - "не виноватая я". Не ставил, в ФИНАМ-дистр-ве написано КВИК 6.0. Куда-ж его такой.


2. Полазил по форумам применения КЛУА. Получается, что полно ошибок. Часть, вроде, исправлена в КВИК 6.5.


И такой вопрос. Если ЛУА скрипты запускать из С/С++ (C#) программ, сцепятся они с функционалом КВИК?


ЗЫ Похоже, что из КЛУА (в отличии от ЛУА) скрипты из С++/С# запускать не получится. Или каким-то оч хитрым способом.


В общем, доступа из внешних программ непосредственно к терминалу как не было, так и нет.


Но, в общем, безусловно шаг вперед, но неполноценный. Не понимаю, почему просто API не раскрыть, и делай что хочешь, на любом языке. Не понимаю, зачем им было столько сил тратить на ЛУА, h-файл, и вся работа. (это к авторам Квик :)


Николай. Больше половины готовых расширений для lua? доступные в сети, не работают в варианте qlua. Из оставшихся большая часть работает с трудом. И только малый процент работает правильно.


s_mike, из Луа СОМ-объекты подключаются без каких-либо проблем. В инете полно экзэмплов. Под Квик в том числе.


Адаптеры тоже под любой разумный язык есть - С#, Паскаль, VB.NET. Для C++ адаптер не нужен.


К сожалению, в Квик-Луа есть свои ограничения. Обойти пока не получается, а м.б. и невозможно. Пока не знаю.


К сожалению, в Квик-Луа есть свои ограничения.


s_mike, Луа, по оределению, "разработан в качестве языка-расширения, для включения в программы-хозяева, написанные на C," ( http://www.lua.ru/doc/6.html )


Мне тоже этот вариант не особо нравится, но мы имеем то, что имеем. Нормального API ARQA нам, к сожалению, не дала. Приходится извращаться кто как может. :)


Ну вы опять ничего не поняли.


1) Про версии КВИК. У брокеров обычно на сайте лежит не самая свежая версия. Когда Вы ее поставите и подключитесь к реальному счету, то произойдет обновление на последнюю версию. в финаме она 6.04.196.


Кратко это так. Разработчики вызывают колбек функции при любом изменении в любой таблице QUIK. Таким образом, получается максимальная скорость реакции LUA колбек функций. И эти функции и реализуются в основном потоке КВИК. Про эту тему я уже обсуждал с разработчиками на форуме КВИК. Я бы сделал иначе. Но такое решение тоже нормальное.


Если Вам надо запустить что-то в других потоках, то вполне возможно это сделать.


можете сделать обертку для C#. Мне ,например, С# не нужен, я пишу на C++ и C, что примерно на 30% быстрее, чем C#.


Из сторонних пакетов можно подключить Матлаб, библиотеки нейронных сетей ну и т д.


Меня,например, все ( кроме ошибок) устраивает.


Николай Камынин, чего-ж тут непонятного. :) Лишняя работа по стыковке готовой программы с Квик. Благо, не к спеху. Время терпит. Но все равно придется.


Скажите, ну зачем мне таблицы в Квик? Взял бы данные из терминала и в своей программе построил бы все, что мне нужно. А уже понятно, что эти доп таблицы придется делать хошь-не хошь. :)


Сейчас работаю через полноценное API, просто жизнь заставляет для ФОРТС искать другие варианты. Потому и удивляет необходимость чесать правой ногой за левым ухом (а как это назвать иначе). И все это ради элементарного импорта данных.


2. Не являюсь клиентом ФИНАМ, а с демо все это недоступно. Сейчас нашел вариант установки Квик 6.5 через QUIK.ru. Все оказалось даже хуже ожиданий. Я полагал, что qlua.dll всего лишь библиотека функций связи с Квик, а интепретатор ЛУА стандартный. Ан нет.


Но делать все равно придется. :(


3. Про ЛУА АПИ для С++ я в курсе. Да и С++ знаком достаточно хорошо. Для моих задач задержка


50-100 мс не критична. Поэтому помесь С# и VB.NET. С# - многие вещи с указателями гораздо удобней. VB.NET - многое упрощает. Отсюда смесь.


4. Нам просто ничего не остается - ешь, что дают. Однако техническое решение совершенно безграмотное. Почему, например, не предоставить возможность пользователям писать на том языку, на котором они хотят. Я этого не понимаю. Думаю, чио к 7-8-й версии до них эта простая мысль дойдет.


ЗЫ ITInvest к Новому году публично (лично Твардовский) обещал опубликовать АПИ к их терминалу SmartX. Пока тишина. Ждемс. В понедельник попробую им позвонить-узнать.


В плане дискуссии замечу следующее.


1) Чтобы понять, сколько проблем создает использование API к серверу, предлагаю Вам попробовать TransaqConnector.


Я это уже проходил.


Вам фактически придется создать стаканы, ТТП,ТВС, т е то, что уже есть в терминале QUIK.


2) В LUA не надо делать новых таблиц.


У меня сделан интерфейс робота, котором задается и отображается торгуемый роботом и человеком портфель и все необходимые параметры управления торговлей.


Его нет ни в квике , ни в другом софте.


Поэтому его создавать надо на любом языке.


3) Немного о языках. C# - это замена бейсика плюс сборщик мусора.


Луа это почти C# (тоже сборщик мусора ) но гораздо проще, если не хотите.


4) Про проблемы переноса с C# на LUA.


Так называемые роботы, в основном это программы формирования сигнала по графику цены. Переносить такие программы на любой язык достаточно просто. Можно и не переносить, а оформить как модуль (dll).


5) Как говорят: "Не так страшен черт, как его малюют"


1. Transaq Connector. Да, согласен. Вначале оч порадовался - xml (дешифровка не проблема, в том же NET библиотеки, и сразу в БД) и все такое. Пробовать, не стал. Уже на этапе осмысления возможности применения начались большие проблемы.


2. "У меня сделан интерфейс робота, котором . " Этот пункт я что-то не понял.


3. С# это все таки ближе к С++. Указатели + выделение памяти. Куча, неуправляемый код и пр. Чего в бейсике нет по определению. Разница немного в синтаксисе и отсутствии множественного наследования, что некритично. Про исполнение говорить не будем -понятно что разные вещи. Ну, сборщики мусора - эт теперь повсеместно, началось еще с Java. Кстати, я его частенько принудительно запускаю -GC.Collect().


Все таки ЛУА , скорее ближе к старенькому С. ООП отсутствует. Возможна частичная имитация, но все-таки это не то.


Хотя под ЛУА в инете много библиотек, что безусловно плюс. Правда с недостатками, присущими всему свободно распространяемому коду - в основном плохо документировано. ИМХО, разумеется.


4."Про проблемы переноса с C# на LUA. "


Переносить что либо сложное на ЛУА - по моему, замотаешься. :) См. п.3.


Пока думаю (на этапе осмысления и далеко не завтра) на ЛУА + dll сделать интерфейс между системой и терминалом.


Из программы в ЛУА проблем вроде нет. А вот из проги запрос к ЛУА - здесь не понимаю. В ЛУА нужен поток циклически опрашивающий dll и по флагу вызывающий нужную функцию, а в проге примерно тоже самое, инициирущее заданные события. В общем, не знаю.


В общем, передача событий из ЛУА в программу. Можно, но как-то уж оч сложно получается.


Если короче, то не приходилось делать dll с экспортируемыми событиями, да и в ЛУА тоже не в курсе как получить событие из dll. потому такие навороты.

Комментариев нет:

Отправить комментарий