Блог им. XXM

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

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

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



3.2К | ★47
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

Читайте на SMART-LAB:
Фото
Стратегия на II квартал 2026 года. Акции с высокими дивидендами
Алексей Девятов Аналитики Альфа-Инвестиций представили инвестиционную стратегию на II квартал 2026 года : прогнозы для российской экономики и...
Фото
Мы заставили ИИ-модели торговать на бирже. И вот что из этого вышло
Могут ли языковые модели торговать на бирже — и не слить, а реально заработать? «Финам» завершил первый этап «Финам Арены» —...
Фото
EUR/GBP: Последнее танго в треугольнике — кто первый сорвется в штопор?
На дневном таймфрейме кросс-курс EUR/GBP сформировал довольно широкий треугольник. На данный момент покупатели нацелены на пробой верхней границы...
Фото
Кто сейчас самый дешевый сбыт? Сводный пост по сбытовым компаниям по отчетам РСБУ за 2025г.
Волгоградэнергосбыт Ставропольэнергосбыт Самараэнерго Мордовэнергосбыт Пермэнергосбыт Новосибирскэнергосбыт...

теги блога XXM ☑️

....все тэги



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