Блог им. XXM

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

4 года и 4 месяца прошло с выхода поста «Торговый робот на LUA для QUIK» (https://smart-lab.ru/blog/200767.php) про конструктор Lbot. За это время он повзрослел, лишился графического интерфейса и… превратился в младшего брата для Lbot3D. И если раньше для Lbot была пробная версия (с одним инструментом и одним лотом), то теперь, фактически, сам превратился в пробную версию для Lbot3D и, с этого дня, предоставляется в свободное пользование с полным функционалом:

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

Скачать Lbot180.zip можно тут: drive.google.com/open?id=1DL9jGEBm2Uhk89PcQdlK-ObaOe2zihnx
INI-файл написан для демо-QUIK на 3 инструмента — Сбербанк, Газпром и Лукойл. Стратегия на Газпроме — безиндикаторная, на Сбербанке — на скользящих средних, на Лукойле — на пересечениях MACD.

encoding = "UTF-8"
FREQUENCY = 1000
account = NL0011100043, 10110
PositionSize = 300000
xy = 421, 0, 859, 118
;-------------------------------------------------------------------------------
[GAZP]
Security = GAZP, QJSIM, Gazp_moex
WorkSize = 3		//  рабочий объем, в штуках;
LossLimit = 100		// ограничение на убыток по стратегии
OpenSlippage = 10	// допустимое проскальзывание на сделке, в количестве минимальных шагов цены;
OpenLong =  {Close, 1} < {High, 2}	// цена 'close' предыдущей 'полной' свечи превысила 'high' предшествующего ей бара;
OpenShort = {Close, 1} > {Low, 5-2}	// цена 'close' предыдущей 'полной' свечи принизила 'low' 5-2 баров;
StopLoss = 2
TakeProfit = 3, 1, 1
EOD = 18:29:00	//закрытия позиции в указанное время.
autoBot = Y
[SBER]
Security = SBER, QJSIM, Sber_moex
WorkSize = 10
LossLimit = 100
OpenSlippage = 10
OpenLong	= {Ema1} > {Ema2}
CloseLong	= {Ema1} < {Ema2}
OpenShort	= {Ema1} < {Ema2}
CloseShort	= {Ema1} > {Ema2}
autoBot = Y
[LKOH]
WorkSize = 2
Security = LKOH, QJSIM, Lkoh_moex
LossLimit = 225
OpenSlippage = 10
OpenLong	= cross(macd_Lkoh.0, macd_Lkoh.1)
OpenShort	= cross(macd_Lkoh.1, macd_Lkoh.0)
;OpenLong =  {Close, 1} < {Low, 5-2}
;OpenShort = {Close, 1} > {High, 2}
StopLoss = 30
TakeProfit = 50, 10, 10
autoBot = Y

Параметры приведены исключительно как пример для составления собственных стратегий. Для облегчения процесса запуска приложен файл Lbot180.tab для экспорта вкладки в QUIK.
На этих примерах вы можете сконструировать свои стратегии для реального счета на своих любимых акциях, фьючерсах.

Обновлена программа LbotTest (также в свободном пользовании с полным функционалом) в части корректной обработки параметра EOD (ежедневное закрытие позиций в определенное время). В комплекте для тестера 17 стратегий для Сбербанка:
Торговый робот на Lua для QUIK.

[SB_A1] Стратегия на двух скользящих средних, реверсная;
[SB_A2] На двух скользящих средних, с тэйк-профитом и стоп-лоссом;
[SB_A3] Лонг/шорт на пересечениях MACD, реверсная;
[SB_A4] Лонг/шорт на пересечениях MACD, с тэйк-профитом и стоп-лоссом;
[SB_A5] входы на MACD с применением фильтра из пары скользящих средних;
[SB_A6] Лонг/шорт и выход - на фиксированных уровнях;
[SB_A7] Лонг/шорт - на фиксированных уровнях, с выходами по тэйк-профиту или стоп-лоссу;
[SB_A8] Лонг и выход - на фиксированных уровнях;
[SB_A9] Шорт и выход - на фиксированных уровнях;
[SB_AA] Лонг от нижней линии канала, продажа - по верхней, фиксированный стоп-лосс;
[SB_AB] Лонг от нижней линии канала, с фильтром на MACD, стоп-лосс на MACD;
[SB_AC] Шорт от верхней линии канала, продажа - по верхней;
[SB_AD] Шорт от верхней линии канала, с фильтром на MACD;
[SB_AE] Лонг пр прорыве верхней линии, шорт - от нижней, со стопом и трейлинг-профитом;
[SB_AF] Лонг от нижней линии канала, шорт - от верхней, со стопом и трейлинг-профитом. Только при пересечениях ценой линий канала;
[SB_AG] входы - на свечных комбинациях, стоп и тейк-профиты - в пунктах;
[SB_AX] входы - на пересечениях RSI и уровней, стоп и тейк-профиты - в процентах;

Графические пояснения:
Торговый робот на Lua для QUIK.
Торговый робот на Lua для QUIK.
Для облегчения запуска примеров имеются файлы-вкладки для QUIK: LbotTest_TQBR.tab (QUIK 7.19.0.51) и LbotTest_QJSIM.tab (QUIK 7.23.1.14)

Программы «as is», никаких гарантий и обязательств.
На вопросы отвечу с удовольствием!
Успехов в алготорговле!
С наступающим Новым Годом!
Торговый робот на Lua для QUIK.

  • обсудить на форуме:
  • Quik Lua
★90 | ₽ 165
Вот молодец!

Не то, что говнобобот.рф, готовый продать мать родную.
avatar

KarL$oH

KLoYH, Роскомпозор детектед:
Не удается получить доступ к сайту
avatar

XXM

XXM, не, это была пародия на одного местного 3,14yesбола ;)
avatar

KarL$oH

KLoYH, да я смайлик не нарисовал, так-то понял.

avatar

XXM

KLoYH, )) он её уже продал)) теперь «фуфельками» приторговывает ))
avatar

Wallstep

Спасибо, будет интересно изучить его! :)
avatar

Shadow

А более подробное описание характеристик и логики действий бота на сайте есть?
avatar

dilettante

dilettante, https://www.xsharp.ru/read/lbot
Там все по-взрослому: Руководство пользователя, Версия 1.8, на 17 листах.
Логика действий бота основана на правилах, прописанных алготрейдером в виде четких указаний в ini-формате.
avatar

XXM

Важное уточнение: Lbot работает (т.е. открывает-закрывает) с количеством лотов, указанных в параметре WorkSize.
Но, если при открытой позиции трейдеру захочется вручную откорректировать количество бумаг через т.н. «стакан», то по получении команды «закрыть позиции» Lbot закроет ВСЕ лоты по данной бумаге. Например, WorkSize=10, Lbot в лонгах, 10 лотов. Вы решили прикупить вручную еще 15 (например, на «долгосрок»). Но при получении сигнала на закрытие позиции Lbot продаст все 25 лотов, а не только «свои» 10.
«Вот такая вот зараза» ©
Тут нужно выбирать, робот будет торговать, или ваша рука ;)

avatar

XXM

Странный какой-то Код класса. У меня TQBR в квике.
avatar

А. Г.

А. Г., QJSIM — это на игровом сервере от разработчиков квика.
P.S. В этом «конструкторе» зачем-то сетевые функции используются.
avatar

Юрий Ч.

Юрий Ч., 

Если вы опасаетесь этих сетевых функций, удалите их безо всякого ущерба для работоспособности «конструктора».
Эти миллисекунды в протоколе нужны для тех, кому захочется их видеть. Сам я их не применяю, т.к. стратегии все не HFT.

avatar

XXM

А. Г., например, содержимое упакованного файла LbotTest190.7z:

1. собственно программа;
2. индикатор KeltnerChannel.lua;
3. ini-файл и вкладка QUIK для демо счета QJSIM;
4. ini-файл и вкладка QUIK для TQBR.
----------------
Демо-версию QUIK беру тут: https://arqatech.com/ru/support/demo/

avatar

XXM

XXM, а, это демка.
avatar

А. Г.

И как успехи?
avatar

Mope

У Вас в примере:
OpenLong = {Close, 1} < {High, 2}
OpenShort = {Close, 1} > {Low, 5-2}
Ошибки со знаком больше/меньше нет?

avatar

NikGood

NikGood, какая разница какие там знаки? Это же просто пример. Или Вы ожидаете, что оно начнет Вам рубить бабло вот прямо сразу? =)

 

Кстати, лучшая реклама робота (или платформы) — эквити портфеля торговых роботов, которые сам на свои деньги торгует автор этого торгового комплекса… ;-)

avatar

ch5oh

ch5oh, спасибо :)  Отмечу, что торгую трендовые стратегии, которые тоже описывал тут, на смарт-лабе.
avatar

XXM

NikGood, никаких ошибок нет. Это я так написал.
Не будет ошибки и в том, если кто-нибудь напишет по другому:
OpenLong = {Close, 1} <> {High, 2}
OpenShort = {Close, 1} >< {Low, 5-2}

Дело в том, что стратегии могут быть как трендовыми, так  и контртреновыми. Вы (или кто другой) вольны применять правила торговли так, как сами считаете нужным. Вы свободны в выборе правил торговли и независимы от программиста (если это не вы сами).
В этом отличие «роботов на стохастиках» или на скользящих с RSI-ями всякими от конструкторов стратегий.
avatar

XXM

XXM, да ясень пень:) просто знак в строке OpenLong = {Close, 1} < {High, 2} не соответствует её описанию "//цена 'close' предыдущей 'полной' свечи превысила 'high' предшествующего ей бара" и только это я хотел Вам напомнить.
avatar

NikGood

NikGood, :) точно, тогда это ошибка!

avatar

XXM

Побольше бы таких постов и блогов на СЛ. Автору большое спасибо! … а то все жуют вокруг да около… Олейниковы в общем 
avatar

@SMARTECONOMIST

@SMARTECONOMIST, спасибо! !
Мы -д`Артаньяны!!!
avatar

XXM

Большое спасибо, XXM! Таких годных постов на SL действительно мало
Поджигатель Жирафов, 

avatar

XXM

благодарю.

вы наш местный дед мороз
avatar

anvil

бросайте вы этот QUIK… MT5 — вот терминал с тестером и в 5 раз более быстрыми заявками и своим языком MQL…
avatar

transmega

transmega, насколько я знаю, в мт5 эксперт подсоединяется к одному конкретному графику. А если я хочу корзину инструментов торговать, то подсоединять эксперта должен только к одному инструменту? Что-то мне подсказывает, что в таком случае все будет очень криво и костыльно реализовываться, если это вообще возможно.
avatar

tranquility

tranquility, там можно в эксперте задать корзину торгуемых инструментов и повесить на любой график, но все равно для mql5 надо разбираться в программировании)
avatar

Friendly Deep Space

tranquility, это решается через внешнюю DLL. Можно накидать на каждый график по эксперту, но DLL-ка будет загружена только одна всё равно, всё происходящее на графиках передаётся в неё, и через сокет по например GRPC она уже общается с внешним «мозгом», который рулит торговлей всей корзины. Логику стратегии всё равно удобнее на питоне или го писать во внешнем процессе, MQL только для непосредственно торговых операций. 
Zweroboi, собственно, у меня такая же архитектура бота (длл + внешний сервер который содержит в себе торговый алгоритм), но применительно к луа/квик, изначально я так под mql5 писал).
avatar

tranquility

tranquility, ну значит не костыль )
tranquility, а есть какие-то плюсы у Lua/Quik перед MT5 в такой конфигурации? Кроме набора инструментов, если сравнивать
Zweroboi, главная моя мотивация перейти с мт5 на квик была в том, что появилась байка что в первом есть функционал, который позволяет брокеру нарисовать в терминале тебе любой график и тем самым злонамеренно слить твои бабки. Насколько это имеет отношение к действительности я не знаю)) А так, квик вроде как по скорости проигрывает мт5, хотя я не измерял, сам пока на стадии бектестирования нахожусь все еще… Судя по документации, QLua из квика может больше информации об инструментам извлекать через api, но пока я не могу оценить насколько велика в этом выгода.
avatar

tranquility

tranquility, понятно. Мне интерфейс метатрейдейский как-то больше по душе как выглядит ) а так работает и работает, сомневаюсь что кто-то лично для меня будет котировки рисовать )
Zweroboi, стесняюсь спросить… кто такой «GRPC»? Ну, то есть «Remote Procedure Call» — это понятно. Но все же?..
avatar

ch5oh

ch5oh, http://lmgtfy.com/?q=grpc

Zweroboi, тонкий стеб. Улыбнуло.

grpc.io

 

С Наступающим! Пусть в следующем году все Ваши месяцы будут зеленые.

avatar

ch5oh

ch5oh, и вам )
                                                        

Жену свою я не хаю,
И никогда не брошу её.

Это со мной она стала плохая, 

Взял-то ее я хорошую.

      Олег Григорьев

 

avatar

XXM

Автор, поясните, а то не совсем понятно, что это такое. Это плагин для Квика, который позволяет в рабочем файле в текстовом виде специально «упрощенным» языком без рутины описать правила входов для каждой системы у необходимого инструмента, и после этого, запуск плагина приведет к автоматической торговле в соответствии с описанными правилами?
avatar

Friendly Deep Space

Friendly Deep Space, да!
avatar

XXM

XXM, понятно, и вижу, что еще в двух вариантах бывает, а чем LBot от LBot3D отличается, что у второго ценник 12т?
avatar

Friendly Deep Space

Friendly Deep Space, отвечу ссылками:
1. https://smart-lab.ru/blog/285523.php (Конструктор стратегий «Lbot3D»)
2. https://smart-lab.ru/blog/322198.php (Lbot3D: углубление внутреннего содержания.)
avatar

XXM

XXM, т.е. в версии 3D, в отличии от предшественника, добавилась возможность на один тикер вешать сразу несколько алгоритмов и применять лимитные заявки. Понятно, так бы сразу и сказали)
avatar

Friendly Deep Space

XXM, а можно ли в условиях открытия/закрытия ордеров использовать «события» — например, факт исполнения заявки? Или факт изменения количества открытых позиций по инструменту? (чтобы построить алгоритм «лесенки»)
avatar

Boris Golf

Boris Golf, в Lbot такое не пройдет.
НО:
Выше коллега Friendly Deep Space написал: "в версии 3D, в отличии от предшественника, добавилась возможность на один тикер вешать сразу несколько алгоритмов и применять лимитные заявки. Понятно...". Я не стал продолжать разговор про отличия Lbot и Lbot3D, ибо разговор сегодня про первую программу. Но, как вижу, все же стоит прояснить некоторые моменты, заодно ответить на ваш вопрос. 
       Сказать, что добавились некоторые возможности и на этом «понятно», конечно, не так. Между этими двумя программами огромные отличия! Разница сопоставима с разницей между объектом в двух измерениях и этим же объектом в пространстве 3D. Что значит «сразу несколько алгоритмов» на бумаге? Это, фактически, стратегия с управлением капитала, что недоступно в Lbot. Что значит «применение лимитированных заявок»? Это реальная возможность ловить «сквизы» и комфортно чувствовать себя на боковых участках движения цены.
       И ответ на ваш вопрос:
Да, в Lbot3D «события» можно использовать в написании стратегий!

Например: факт изменения количества изменений по инструменту (https://smart-lab.ru/blog/322198.php), факт достижения цены инструмента в некоторой стратегии определенной величины (пояснение тут: https://smart-lab.ru/blog/511216.php).
       А алгоритм «лесенка» реализован как таковой в Lbot3D, только он не задокументирован, т.к. для нее я выделил отдельный скрипт — fn041.lua.
Скрипт fn044.lua (отсюда: «Fn044.lua, версия 2.1», https://smart-lab.ru/blog/502068.php) «вырос» как раз из этой древней «лесенки».
avatar

XXM

таймфрейм 60 минут???? лол афтор не торговал вживую ниразу
avatar

ves2010

Movsber1  и movsber2? А что такое?
avatar

Oleg Only Algo

И как скачать то, если ошибка выскакивает?
avatar

Oleg Only Algo

 Там исходники есть?
avatar

Oleg Only Algo

Oleg Only Algo, идентификаторы присваиваю такие, чтобы было легче разбираться в их многообразии на экране. Чтобы можно было понять, к какому семейству индикаторов, к какому инструменту пристыкован, и, при наличии нескольких однотипных индикаторов на одном инструменте, присвоить отличительные признаки. Также вывожу в подпись это ниаменование, чтобы, в случае конфликта имен, было легче разобраться. Для конкретного случая: мovsber1 — «Сбербанк [Moving Average]» с некоторыми параметрами, а мovsber2 — такая же скользящая на Сбербан, но с другими параметрами. 
      "И как скачать то, если ошибка выскакивает?", не понял, про какую ошибку пишете. Ошибка при скачивании? Приведите подробности, можно в личку.
      Исходники? А с какой целью интересуетесь? 
avatar

XXM

Хорошая работа.

Параметры задокументированы?
Например, какие в валюте а какие в процентах?
LossLimit 
avatar

Владимир М.

Владимир М., спасибо за оценку! Ответ на вопрос: да, есть «Руководство пользователя»:  https://www.xsharp.ru/read/lbot

Оттуда, гл. 5 стих п.1:
LossLimit — ограничение на убыток, при превышении которого Lbot закроет позиции при их наличии и отключит автоторговлю.

ВАЖНО: цифра обновляется только при полном или частичном закрытии позиции;

Эта цифра в валюте и единицах цены инструмента. Для фьючерса на индекс РТС — в пунктах.
avatar

XXM

Подскажите, пожалуйста, у меня индикатор «ind» из двух линий на некоторых участках графика не выдает значений. Правильно ли я думаю, что там ind.0 = ind.1, то есть в луа nil = nil? И поймет ли меня Lbot, если я в какой-либо из команд типа CloseLong, TakeProfitLong, StopLossLong захочу закрыть позиции с таким дополнительным условием ind.0 = ind.1?

P.S. Спасибо большое за робота!
индикатор «ind» из двух линий на некоторых участках графика не выдает значений.

это или плохой индикатор, или плохая реализация хорошего индикатора. 
На вопрос отвечу: не знаю. Рекомендую запустить на демо-счете и провести комплексные испытания. Но по уму — лучше переделать индикатор.
avatar

XXM

Добрый день!
Снова небольшой вопрос возник. У меня интернет бывает вылетает и в последней стратегии, которую я запускаю, сделки почему-то закрываются после переподключения.

Вот настройки ini:

[marsi]
Security = RIM9, SPBFUT, Price_chart, A1
OpenSlippage = 20
QuontForOpen = 10
WorkSize = 1
OpenLong = cross(marsi.2, marsi.3, 1)
OpenShort = cross(marsi.3, marsi.2, 1)
StopLoss = 0.7%
TakeProfit = 4.2%, 0.01%, 0.02%
autoBot = N


И часть лог файла:

16:00:01; [RIM9]; i_gO_01 OpenLong; cross(marsi.2, marsi.3, 1) => Есть кросс: return 65 >59 <=> return 69 >66
16:00:01; [RIM9]; 02 Есть заявка: buyS = 130710 x 1, id= 338349831, OpenLong, Price_chart, Bar№ =45173
16:00:02; [RIM9]; OnTrade, ПОКУПКА: 1 x 130510, OpenLong, trade_num = 2301531758, order_num= 35778202063, 1 сек.
16:00:02; [RIM9]; 03 исполнена заявка «ПОКУПКА», всего: 1 x 130510, QUIK: 1, робот: 1
16:00:02; [RIM9]; 04 OnTransReply, OpenLong, Заявка 35778202063 успешно зарегистрирована., t_id= 338349831
19:00:04; Робот работает.
21:56:20; Связь с брокером потеряна.
21:56:35; Связь с брокером установлена.
21:56:49; Робот работает.
21:57:08; [RIM9]; 01 STOP_Long; вход= 130510; Цена= 116290; SL= 129596.43. Запрет на OpenLong на баре 45344
21:57:08; [RIM9]; 02 Есть заявка: sellS = 130370 x 1, id= 108912361
21:57:11; [RIM9]; Profit=-370 => -310, (1*(130570-130510))
21:57:11; [RIM9]; OnTrade, ПРОДАЖА: 1 x 130570, SLL_01, trade_num = 2301894315, order_num= 35787978957, 3 сек.
21:57:11; [RIM9]; 03 исполнена заявка «ПРОДАЖА», всего: 1 x 130570, QUIK: 0, робот: 0
21:57:11; [RIM9]; 04 OnTransReply, SLL_01, Заявка 35787978957 успешно зарегистрирована., t_id= 108912361


Подскажите, пожалуйста, можно ли как-то решить эту проблему?
Максим Поплавский, вижу это:

21:57:08; [RIM9]; 01 STOP_Long; вход= 130510; Цена= 116290; SL= 129596.43. Запрет на OpenLong на баре 45344

Помеченное красным — нечто нереальное, можно сказать — потустороннее. Если это боевой счет — дело плохо. Ибо «прилетает» такая цена, что сразу вызывается StopLoss.
Даже если эта цена была в этот день, и происходит переполучение данных, в программе Lbot должна сработать защита от сделок, которые прошли ранее 60 секунд (это внутренняя цифра).
Запишите видео, если такое повторяется, пришлите ссылку, или как-нибудь покажите мне в он-лайн.
Если демо-счет — дело другое, тут никаких гарантий за адекватность котировок, насколько знаю, нет. Но, тем не менее, странно это, даже для демо.
avatar

XXM

XXM, это боевой счет. Отправил скайп в личку, добавьте меня. В принципе, я думаю, что эту ситуацию можно воспроизвести простым отключением соединения в квике. Когда будет подходящая ситуация — напишу в скайп и покажу он-лайн, по возможности.
Максим Поплавский, OK.
avatar

XXM

Ошибка, приводящая к обработке в Lbot «левых» цифр при переподключениях QUIK, устранена.
avatar

XXM


Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.

Залогиниться

Зарегистрироваться
....все тэги
UPDONW