Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
написал: Поскольку , эта тема вроде нигде не поднималась , опишу свой опыт , может быть будет кому то полезно. Для информирования и контроля за работой торгового привода у меня был поднят небольшой саит на локальном компе с QUIK ,и меня все устраивало, Сейчас эта схема практически утратила смысл из за почти постоянного отключения мобильного интернета. Я решил посмотреть , что можно использовать взамен. Нормально работали только саиты из белого списка и MAX. Поскольку других вариантов не было , выбор пал на MAX ,
Код
Странно, если мобильный интернет не работает то и МАХ не должен работать. скорее всего не работал DNS cервер, поэтому не могли найти IP адрес ---------------------------- из моего опыта . Кратко. можно не делать сайт , а создать сервер на локальном компьютере там же где квик Потом сообщить на смартфон IP адрес своего локального компа , у которого есть выход в интернет. Будете работать напрямую со своим сервером. ------------------------------ Еще варианты прокси или VPN можно бесплатные
Мобильный интернет то работает , только ничего кроме max , приложений некоторых банков и мир pay не открывается. Когда объявлена беспилотная опасность , то все кроме белого списка блокируется наглухо. А у нас в краснодарском крае эта опасность объявлена почти постоянно .Может на счет сайта я не совсем точно выразился . У меня работает локально на компе с квиком web сервис +корпоративный open vpn , так как выделено ip у меня нет .
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
Пользователь
Сообщений: Регистрация: 08.05.2020
16.09.2026 18:13:46
Цитата
VPM написал: То есть если я правильно понимаю, контроль за роботом (Вашей самопиской) в окне МАХ? А во сколько можно оценить потерю во времени прохождения команды? Ну хотя бы примерно ведь наверно задавались данным вопросом. Если можно продемонстрируйте картинкой.
У ботов от макс есть 2 варианта обмена основной - через Webhook и Long Polling . Long Polling - это что то типа временной заглушки для тестирования. Я использую Long Polling . В цикле MAIN quik а раз в 5 секунд выполняю опрос бота , разбираю ответ и выполняю принятые команды и отсылаю результат в чат , если требуется. Получается на ответ от 6 до 7 секунд.Через Webhook можно сделать быстрее , но там надо намного больше заморачиваться. Читайте , если есть желание разобраться подробнее.
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
Пользователь
Сообщений: Регистрация: 08.05.2020
16.09.2026 17:24:12
Цитата
VPM написал: Спасибо,, для тех кто не в теме и для меня лично, поясните, а зачем все эти премудрости? Что это дает? и А каком приводе идет речь, типа Бондаря для скальпинга?
Вы же не можете сидеть безвылазно перед компьютером с quik ом .Нужно отлучаться по делам или на работу или на отдых. И хочется контролировать работу робота , иногда поменять стратегию , или вообще остановить в случае форс мажора или поднастроить немного. Посмотреть отчет по сделкам , по состоянию депо и.т.п. Для таких же целей банки делают свои приложения на смартфоны . А привод в данной теме речи не играет. У меня своя самомиска для торговли на спредах на облигациях.
Цитата
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
Пользователь
Сообщений: Регистрация: 08.05.2020
16.09.2026 08:44:38
Поскольку , эта тема вроде нигде не поднималась , опишу свой опыт , может быть будет кому то полезно. Для информирования и контроля за работой торгового привода у меня был поднят небольшой саит на локальном компе с QUIK ,и меня все устраивало, Сейчас эта схема практически утратила смысл из за почти постоянного отключения мобильного интернета. Я решил посмотреть , что можно использовать взамен. Нормально работали только саиты из белого списка и MAX. Поскольку других вариантов не было , выбор пал на MAX , И так , что же мог предложить MAX для решения этой задачи ? В MAX можно создавать чат боты , но делать это могут только OOO ,ИП и самозанятые. Я давно имею статус самозанятого , а для тех кто его не имеет , получить его можно онлаин за 5 минут и этот статус ни к чему не обязывает. Для самозанятых MAx ставит ограничение в 2 чат бота. Мне хватило 1 бота, и 1 канала. Я зашел в лк MAX ( ) как самозанятый и зарегил бота , создал там же канал. Далее чат бота я сделал администратором канала. В чат чат- бота я направил информационные сообщения от робота а в канале закрепил набор кнопок для отправки управляющих команд для торгового привода. Правда пришлось помучиться с вычислением идентификаторов каналов chat_id. Проще всего это сделать запустив web версию и взять эти id из URL (у чат бота это положительное число в конце URL , а у канала отрицательное).
Привожу пример отправки сообщения в чат бот Max. Для отправки HTTP сообщения я использовал c библиотеку luacom.dll +WinHttp.WinHttpRequest.5.1, но есть и много других способов (напимер curl)
Код
-----------------------------------
function send_max(msg,chat_id,access_token,nFormat)
-----------------------------------
---грузим luacom
luacom = require("luacom")
--для формата markdown
-- # Формат markdown \n **жирный**, _курсив_, ~~зачёркнутый~~, ++подчёркнутый++, `моноширинный` , ^^Выделенный^^ , [Документация](https://dev.max.ru/)
local url,status,responseText,cUser,body,cFormat,http
--chat_id =117.......474
--access_token = "f9LHodD0cOIq...................0BhMw0gm_6f1-DBY"
if not nFormat then
nFormat=0
end
---выбор формата разметки
if nFormat==0 then
--без формата
cFormat=''
elseif nFormat==1 then
--HTML
cFormat= ',"format": "html"'
elseif nFormat==2 then
--markdown
cFormat= ',"format": "markdown"'
end
-- URL
url = "https://platform-api2.max.ru/messages?" .. "chat_id=" .. chat_id
--Тело запроса (JSON)
body ='{"text":"' .. msg .. '"'..cFormat..'}'
-- Создаём COM-объект
http = luacom.CreateObject("WinHttp.WinHttpRequest.5.1")
if http then
-- Открываем соединение (синхронно)
http:Open("POST", url, false)
-- Заголовки
http:SetRequestHeader("Authorization", access_token)
http:SetRequestHeader("Content-Type", "application/json")
http:SetRequestHeader("Accept","application/json")
--Отправляем
http:Send(body)
--Получаем ответ
status = http.Status
responseText = http.ResponseText
if http.Status==200 then
---ok
else
message("Status: " .. tostring(status), 3)
message("Response: " .. tostring(responseText), 3)
end
-- Освобождаем объект
http = nil
else
message("Не удалось создать WinHttp.WinHttpRequest.5.1", 3)
end
end
Отладка QUIK 8.12
Пользователь
Сообщений: Регистрация: 08.05.2020
20.02.2021 06:31:35
Цитата
Владимир написал: Задержка реакции на события от мыши и клавы у меня вначале максимально могла достигать одной секунды, сейчас я понизил порог до 150 мс, так что реакция практически мгновенная. Как можно добиться "даже десятков секунд"?
У меня все работает нормально уже более года с разными версиями QUICK начиная с 7 и с разными брокерами. Проблемы начались после обновления на 8.12 .0.41 Сейчас откатился на предыдущую версию (8,8,4,3) и все снова заработало идеально без задержек. Это обновление (8.12 .0.41) у меня выставили сразу 2 брокера . У одного подвисает немного , но там заявки выставляются редко. У другого чаще (до нескольких заявок секунду ) , там QUICK замораживался наглухо и приходилось снимать его через диспетчер задач.
Отладка QUIK 8.12
Пользователь
Сообщений: Регистрация: 08.05.2020
19.02.2021 20:57:21
робот мониторит 15-20 инструментов и периодически выставляет заявки на покупку и продажу. Все это работало без проблем до перехода на версию 8.12 В 8,12 после запуска робота весь интерфейс практически зависает . Отклика на нажатия мыши и клавиатуры приходимся ждать по несколько сеунд или даже десятков секунд. Пришлось откатится на предыдущую версию , так как на 8.12 работать не возможно.
Обработка ошибок из функции main
Пользователь
Сообщений: Регистрация: 08.05.2020
24.05.2020 17:39:09
Цитата
написал: Используйте luac.exe для проверки синтаксиса перед запуском скрипта.
Спасибо за совет. Прикрутил компилер к notepad++ через плагин NppExec
Обработка ошибок из функции main
Пользователь
Сообщений: Регистрация: 08.05.2020
24.05.2020 10:17:52
Цитата
Anton написал: Не совсем так, ошибку можно посмотреть в окне со скриптами
Точно , у меня окно скриптов было в этой части вынесено за границу экрана для экономии места. Спасибо за подсказку
Цитата
Anton написал: А если надо привлечь внимание, то можно как-то так сделатьКодfunction main() local s, e = pcall(function() -- вот тут ваш мейн end) if not s then message(e, 3) -- искомое сообщение, можно текст от себя добавить error(e) -- и выкидываем ошибку дальше, чтобы отработало как обычно end end
В основном у меня ошибки синтаксические , 20 лет писал на скриптовом языке с похожим синтаксисом , но именно с похожим. Руки уже сами на автомате набивают по привычным правилам.
Обработка ошибок из функции main
Пользователь
Сообщений: Регистрация: 08.05.2020
24.05.2020 01:04:41
Обратил внимание , что сообщения об ошибках , в случае выполнении скрипта внутри функции main , не выводятся в окно системных сообщений . Скрипт просто молча останавливает работу. Есть ли возможность включить вывод ошибок в окно сист сообщений или получить текст сообщений об ошибках другим способом ?
Не верные данные в таблице заявок, Данные в таблице заявок обновляются с задержкой
Пользователь
Сообщений: Регистрация: 08.05.2020
08.05.2020 22:37:36
С QLUA познакомился только неделю назад , так что прошу извинить , если пишу какие то глупости. Суть проблемы такая . Скрипт работает на событии OnQuote. Анализируется содержимое стакана , остатки депо по инструменту и текущие заявки. На основании анализа выставляются новые или отменяются старые заявки на покупку. Создаются транзакции и далее работа приостанавливается до получения ответа от OnTransReply. И вот тут то и возникает проблема. Допустим была 1 заявка на покупку , скрипт дает транзакцию на отмену заявки , от OnTransReply приходит ответ об успешном выполнении. Далее сразу идет срабатывание OnQuote и вызов логики моего скрипта. Скрипт читает таблицу заявок и там эта удаленная заявка присутствует , как будто бы она не была удалена только что. Соответственно вся логика работы ломается на корню. При следующем вызове OnQuote уже все OK. Эта же проблема присутствует и при выставлении заявок на покупку. Пробовал вставлять временную задержку , но это не помогает. Видимо мне просто не хватает знаний по событийному механизму QLUA. Просьба помочь с решением данной проблемы.