Блог им. XXM

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

    • 27 декабря 2018, 09:39
    • |
    • XXM
  • Еще

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
★99
71 комментарий
Вот молодец!

Не то, что говнобобот.рф, готовый продать мать родную.
avatar
KLoYH, Роскомпозор детектед:
Не удается получить доступ к сайту
avatar
XXM, не, это была пародия на одного местного 3,14yesбола ;)
avatar

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

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

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

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

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

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

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

avatar
XXM, а, это демка.
avatar
И как успехи?
avatar

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

avatar

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

 

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

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

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

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

avatar
Побольше бы таких постов и блогов на СЛ. Автору большое спасибо! … а то все жуют вокруг да около… Олейниковы в общем 
avatar
@SMARTECONOMIST, спасибо! !
Мы -д`Артаньяны!!!
avatar
Большое спасибо, XXM! Таких годных постов на SL действительно мало
Поджигатель Жирафов, 

avatar
благодарю.

вы наш местный дед мороз
avatar
бросайте вы этот QUIK… MT5 — вот терминал с тестером и в 5 раз более быстрыми заявками и своим языком MQL…
avatar
transmega, насколько я знаю, в мт5 эксперт подсоединяется к одному конкретному графику. А если я хочу корзину инструментов торговать, то подсоединять эксперта должен только к одному инструменту? Что-то мне подсказывает, что в таком случае все будет очень криво и костыльно реализовываться, если это вообще возможно.
avatar
tranquility, там можно в эксперте задать корзину торгуемых инструментов и повесить на любой график, но все равно для mql5 надо разбираться в программировании)
avatar
tranquility, это решается через внешнюю DLL. Можно накидать на каждый график по эксперту, но DLL-ка будет загружена только одна всё равно, всё происходящее на графиках передаётся в неё, и через сокет по например GRPC она уже общается с внешним «мозгом», который рулит торговлей всей корзины. Логику стратегии всё равно удобнее на питоне или го писать во внешнем процессе, MQL только для непосредственно торговых операций. 
Zweroboi, собственно, у меня такая же архитектура бота (длл + внешний сервер который содержит в себе торговый алгоритм), но применительно к луа/квик, изначально я так под mql5 писал).
avatar
tranquility, ну значит не костыль )
tranquility, а есть какие-то плюсы у Lua/Quik перед MT5 в такой конфигурации? Кроме набора инструментов, если сравнивать
Zweroboi, главная моя мотивация перейти с мт5 на квик была в том, что появилась байка что в первом есть функционал, который позволяет брокеру нарисовать в терминале тебе любой график и тем самым злонамеренно слить твои бабки. Насколько это имеет отношение к действительности я не знаю)) А так, квик вроде как по скорости проигрывает мт5, хотя я не измерял, сам пока на стадии бектестирования нахожусь все еще… Судя по документации, QLua из квика может больше информации об инструментам извлекать через api, но пока я не могу оценить насколько велика в этом выгода.
avatar
tranquility, понятно. Мне интерфейс метатрейдейский как-то больше по душе как выглядит ) а так работает и работает, сомневаюсь что кто-то лично для меня будет котировки рисовать )
Zweroboi, стесняюсь спросить… кто такой «GRPC»? Ну, то есть «Remote Procedure Call» — это понятно. Но все же?..
avatar
ch5oh, http://lmgtfy.com/?q=grpc

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

grpc.io

 

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

avatar
ch5oh, и вам )
                                                        

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

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

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

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

 

avatar
Автор, поясните, а то не совсем понятно, что это такое. Это плагин для Квика, который позволяет в рабочем файле в текстовом виде специально «упрощенным» языком без рутины описать правила входов для каждой системы у необходимого инструмента, и после этого, запуск плагина приведет к автоматической торговле в соответствии с описанными правилами?
avatar
Friendly Deep Space, да!
avatar
XXM, понятно, и вижу, что еще в двух вариантах бывает, а чем LBot от LBot3D отличается, что у второго ценник 12т?
avatar
Friendly Deep Space, отвечу ссылками:
1. https://smart-lab.ru/blog/285523.php (Конструктор стратегий «Lbot3D»)
2. https://smart-lab.ru/blog/322198.php (Lbot3D: углубление внутреннего содержания.)
avatar
XXM, т.е. в версии 3D, в отличии от предшественника, добавилась возможность на один тикер вешать сразу несколько алгоритмов и применять лимитные заявки. Понятно, так бы сразу и сказали)
avatar
XXM, а можно ли в условиях открытия/закрытия ордеров использовать «события» — например, факт исполнения заявки? Или факт изменения количества открытых позиций по инструменту? (чтобы построить алгоритм «лесенки»)
avatar
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
таймфрейм 60 минут???? лол афтор не торговал вживую ниразу
avatar
Movsber1  и movsber2? А что такое?
avatar
И как скачать то, если ошибка выскакивает?
avatar
 Там исходники есть?
avatar
Oleg Only Algo, идентификаторы присваиваю такие, чтобы было легче разбираться в их многообразии на экране. Чтобы можно было понять, к какому семейству индикаторов, к какому инструменту пристыкован, и, при наличии нескольких однотипных индикаторов на одном инструменте, присвоить отличительные признаки. Также вывожу в подпись это ниаменование, чтобы, в случае конфликта имен, было легче разобраться. Для конкретного случая: мovsber1 — «Сбербанк [Moving Average]» с некоторыми параметрами, а мovsber2 — такая же скользящая на Сбербан, но с другими параметрами. 
      "И как скачать то, если ошибка выскакивает?", не понял, про какую ошибку пишете. Ошибка при скачивании? Приведите подробности, можно в личку.
      Исходники? А с какой целью интересуетесь? 
avatar
Хорошая работа.

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

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

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

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

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

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

Вот настройки 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, это боевой счет. Отправил скайп в личку, добавьте меня. В принципе, я думаю, что эту ситуацию можно воспроизвести простым отключением соединения в квике. Когда будет подходящая ситуация — напишу в скайп и покажу он-лайн, по возможности.
Максим Поплавский, OK.
avatar
Ошибка, приводящая к обработке в Lbot «левых» цифр при переподключениях QUIK, устранена.
avatar
А есть живой рабочий пример стратегии на Lbot?
Что значит «живой рабочий пример»?
Если вы про стратегии, то в посте приведены примеры для Газпрома, Сбербанка и Лукойла.
Ставьте свои параметры и цифры, запускайте и наслаждайтесь.
avatar
Вот я про «свои» параметры и цифры. Что корректнее поставить для начала*? Планирую открыть отдельный субсчет, на него поставить робота и посмотреть. Ведь, насколько вижу, здесь проведено 3 стратегии, релевантные каждой бумаге.
*в своё время упоминание про «скользящие средние» на просторах интернета находила. В примере это на какой бумаге? Спасибо.
Добрый вечер. Можете сделать мне робота на lua для quik, или посоветовать мастера?
Задача простая: на любом графике валют на ммвб(но скорее всего на м5 или м1) в определенный оператором момент в торговую сессию крутится лонг/шорт определенным количеством лотов от точки задаваемой оператором пока не станет позиция по тренду…
avatar
Алексей Чирва, в вашем сообщении присутствуют элементы неопределенности и условностей, которые сложно вписать в алготорговлю. Торговля роботом подразумевает полную его автономность. И если понятия  "в определенный оператором момент" и "от точки задаваемой оператором" вы сможете сформулировать поточнее (в терминах алгебры логики) для постановки задачи роботу, то задача выполнима.
avatar
encoding = "UTF-8"

Но почему? и как вы это дружите с остальным скриптом?
avatar

Так сложилось в далеком 2014 году. В какой-то момент при чтении ini-файла программа выдавала ошибку, связанную с сообщениями о кодировке, с которой очень не хотела работать. Стоило мне включить в качестве первой строки вышеупомянутое вами «encoding = „UTF-8“», как все наладилось. Тему я тогда закрыл и более не возвращался.
Но признаюсь, что эта строка в программе НИКАКОГО участия не принимает.

avatar
XXM, я не понял, это демо версия или ее можно запускать в квик и рубить бабло мешками?
avatar

Игорь Кадыров, программа обновлена:  xsharp.ru  или с Drive.google
Не демо.

avatar

теги блога XXM

....все тэги



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