Блог им. XXM

Торговый робот на LUA для QUIK.

    • 27 августа 2014, 10:34
    • |
    • XXM
  • Еще
Написал скрипт на языке Lua для торгового терминала QUIK.
И назвал его Торговый робот «Lbot».
Предназначил для автоматизации выполнения торговых операций на фондовом рынке.
Обязал выполнять операции купли-продажи заданной ценной бумаги на фондовом рынке путем выставления лимитированных биржевых заявок.
Научил понимать слова из правил торговой стратегии, задаваемой из файла настроек в формате ini:
  • OpenLong — вход в длинную позицию;
  • CloseLong — закрытие длинной позиции;
  • OpenShort — открытие короткой позиции;
  • CloseShort — закрытие короткой позиции;
  • StopLoss — закрытие позиции по стоп-лоссу;
  • TakeProfit — закрытие позиции по тэйк-профиту.
Lbot, LUA for QUIK
Добавил возможность управления позициями путем нажатий соответствующих кнопок.

Подробнее на сайте: http://www.xsharp.ru/



★48
37 комментариев
Интерфейс на какой библиотеке?
avatar
Egorax, VCLua (http://luaforge.net/projects/vclua/)
avatar
XXM, гарантируете что VCL не приведет к критическому зависанию QUIK?

ПС пока еще ни у кого ни одна библиотека(VCL,iup,wx) не дала стабильности!

ПСС А так молодец!
avatar
Egorax, в руководстве пользователя я вписал следующие строки:
«Применение GUI – интерфейса следует свести к минимуму, так как стабильная работа связки QUIK + LUA + VCLua не гарантирована разработчиками («Интерпретатор языка Lua», руководство пользователя, стр. 3: «Некорректная работа сторонних библиотек, загруженных скриптом, может приводить к ошибкам в работе терминала QUIK»).»
В данной работе GUI-интерфейс отключается либо удалением файла «gui.lua», который отвечает за это, либо записью «GUI = не нужен!»
За оценку спасибо!
avatar
Каков язык описания стратегии в ini файле? Это что-то метастокообразное?
avatar
anatolyutkin, Скорее да. Но не 1:1. Сделал так, как хотел, чтобы просто было. Проще, чем в Metastock даже ;)
avatar
Плюсую, отличный труд, а чем уже существующие системы для построения роботов вам не подошли? Зачем надо было делать свой продукт?
Трейдер Квадратный, не смог осилить всякие квадраты и линии в TSLab-ах всяких ;(
ini-описания стратегий понятнее, ближе, роднее.
avatar
сколько стоит полная версия?
avatar
Sergey_gt, 1500 рублей.
avatar
а зачем там сокеты?
avatar
asteroid, исключительно для ведения протокола во времени с миллисекундами.
Отключается либо удалением каталога socket со всем содержимым, либо удалением из конфигуратора строки:
«millisecond = Y»
avatar
Торгует фиксированной позицией, как я вижу по параметру PositionSize?
Трейдер Квадратный, да.
«PositionSize = 31000 //сумма на которую робот может торговать в рублях»
Это некоторая защита, ограничение.
Роботу позволено, в данном случае, использовать депозит не более, чем на 31000 рублей на ГО для ВСЕХ торгуемых роботом инструментов. Если сумма ГО превысит указанное, робот не будет торговать вообще (~ ты что, нащальника, считать деньги твои я буду, да?)
avatar
делаю такой же, но нативный для мака по экспорту из квика — луа уж очень нестабильно работает
avatar
velikan, QLUA работает стабильно, а вот сторонние библиотеки могут подпортить результат.
avatar
Egorax, ага, вот из-за них я и психанул :)
avatar
Egorax, с графическими интерфейсами следует придерживаться правила вывода всех обращений к GUI за пределы «main». С LuaSocket проблем не замечал, но для верности использую его только в тестовых целях.
avatar
Проводил эксперимент: на 3-х инструментах, Lbot на QUIK без дополнительных библиотек (VCLua и LuaSocket) непрерывно отработал 2 сутки. От робота бóльшего трудно ожидать.
(Было время, на VBA EXCEL писал. Вот уж оценка по нестабильности ПЯТЬ++! Нормально и одного часа не работала.)
К QLUA на QUIK для Windows претензий у меня никаких нет.
avatar
Молодец, сам подумывал такое сваять.
Надоело под каждую стратегию новый проект компилить.
У них-же всё одинаково, морда, контроль исполнения заявок, только условия открытия-закрытия меняются, что можно прописать в текстовом коротком скрипте.
avatar
Simix, да, идея эта очень простая. Сотни пользователей заказывают десятки стратегий. Тратят время и силы на описание ТЗ непонятливым (если не сказать покруче) программистам. А теперь — описал стратегию САМ в ini-файле, никого не посвятив в свой «грааль» и запустил на ОДНОЙ программе хоть 10, хоть 20 стратегий. Пока есть несколько ограничений:
1. на одном инструменте может быть только одна стратегия с фиксированным размером бумаг.
2. открытие и закрытие позиций должны быть формализуемы однозначно по ценам, времени и их составных — индикаторов. Какие-либо паттерны не обрабатываются.
За оценку спасибо.
avatar
Робот в пробной версии работает? у меня не хочет менять счет на мой
avatar
Если в лог-файле есть строка «торговый счет „SPBFUT00xxx“ не совпадает с „SPBFUT01yyy“ то в ini файле следует исправить:
«account = SPBFUT01yyy» на «account = SPBFUT01xxx»
Руководство пользователя, гл.4, стр.5
avatar
Пж., как исправить «ошибка TimeFrame» в пробной врсии
Руководство пользователя,
п. 4.1. Состояние робота
Возможные ошибки:
...
Timeframe – ошибка определения тайм-фрейма графика с соответствующим идентификатором. Устранить несоответствие наименования идентификатора индикатора или цены с данными из ini-файла;
avatar
Lbot — это конструктор стратегий.
В ней можно настроить свою стратегию, и Lbot станет торговым роботом.
Пример стратегии:
OpenLong = {Close, 1} > {High, 2} or {Close} > {8200}
CloseLong = cross(MOV5, High, 1) and {Close} > {Close,2}
StopLoss = 50
TakeProfit = 150, 30, 20 
А привод, т.е. возможности программы "Intraday LUA" — в Lbot сопутствующий функционал.
avatar
XXM, начал уже потихоньку разбираться с LBOTом
Штука то интересная...
Свечной тралл в нем инресно можно настроить...? 
avatar
Понятие «Свечной тралл» мне неведомо, но можно поискать индикаторы свечных паттернов и на них построить стратегию или же сконструировать правила типа:

OpenLong =  {Close, 1} < {High, 2}      // цена 'close' предыдущей 'полной' свечи превысила 'high' предшествующего ей бара;
OpenShort = {Close, 1} > {Low, 5-2}  //* цена 'close' предыдущей 'полной' свечи принизила 'low' 5-2 баров;
avatar
Добрый день! У меня вопрос по Торговый робот на LUA для QUIK. Подскажите, можно ли вставить глобальное условие, например, сделка в лонг осуществляется при пересечении скользящих средних только если цена находится выше EMA 200 допустим. И еще вопрос Ema1 — 1 это период?
avatar
можно ли вставить глобальное условие, например, сделка в лонг осуществляется при пересечении скользящих средних только если цена находится выше EMA 200 допустим

Да.

Пример: OpenLong = cross(MOV1, MOV2, 1) and {Close} > {MOV3}

Где MOVx — это некоторые индикаторы (например, скользящие) со своими параметрами. 

Ema1 в нашем контексте — это просто идинтификатор индикатора, скорее всего, экспоненциальной средней. «1» — это просто добавка к имени идентификатора, параметр может быть любым.

avatar

теги блога XXM

....все тэги



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