Евгений (Все сообщения пользователя)

Выбрать дату в календаре…Выбрать дату в календаре

Страницы: 1
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
 
Цитата
nikolz написал:
Цитата
Евгений написал:
Поскольку , эта тема вроде нигде не поднималась , опишу свой опыт , может быть будет кому то полезно.
Для информирования и  контроля за работой торгового привода у меня был поднят небольшой   саит на локальном компе с QUIK ,и меня все  устраивало,
Сейчас эта схема практически утратила смысл из за почти постоянного отключения мобильного интернета. Я решил  посмотреть  , что можно использовать взамен.  Нормально работали только саиты из белого списка и MAX.  Поскольку других вариантов  не было , выбор пал на MAX ,
Код
    
 
Странно, если мобильный интернет не работает то и МАХ не должен работать.
скорее всего не работал DNS cервер, поэтому не могли найти IP адрес
----------------------------
из моего опыта .
Кратко.
можно не делать сайт ,
а создать сервер на локальном компьютере там же где квик  
Потом сообщить на смартфон IP адрес своего локального компа ,
у которого есть выход в интернет.
Будете работать напрямую со своим сервером.
------------------------------
Еще варианты прокси или VPN  можно бесплатные
Мобильный интернет то работает , только  ничего  кроме max ,  приложений некоторых банков и мир pay не открывается.  Когда объявлена беспилотная опасность , то все кроме белого списка блокируется наглухо. А у нас в краснодарском крае эта опасность объявлена почти  постоянно .Может на счет сайта я  не совсем точно выразился . У меня  работает локально на компе с квиком web сервис +корпоративный open vpn  , так как выделено ip у меня нет  .  
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
 
Цитата
VPM написал:
То есть если я правильно понимаю, контроль за роботом (Вашей самопиской) в окне МАХ? А во сколько можно оценить потерю во времени прохождения команды? Ну хотя бы примерно ведь наверно задавались данным вопросом. Если можно продемонстрируйте картинкой.
У  ботов от макс  есть 2 варианта обмена   основной - через Webhook   и Long Polling .  Long Polling - это что то типа временной заглушки для тестирования.
Я использую  Long Polling . В цикле MAIN quik а раз в 5 секунд  выполняю опрос бота , разбираю ответ и выполняю принятые команды и отсылаю результат в чат  , если требуется. Получается на ответ от 6 до 7 секунд.Через Webhook можно сделать быстрее  , но там надо намного больше заморачиваться. Читайте   API max  , если есть желание разобраться подробнее.    
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
 
Цитата
VPM написал:
Спасибо,Евгений, для тех кто не в теме и для меня лично, поясните, а зачем все эти премудрости? Что это дает? и А каком приводе идет речь, типа Бондаря для скальпинга?
Вы же не можете сидеть безвылазно перед компьютером с quik ом .Нужно отлучаться  по делам или на  работу или на отдых. И хочется контролировать работу робота , иногда  поменять стратегию  , или вообще остановить в случае форс мажора или поднастроить немного. Посмотреть  отчет по сделкам , по состоянию депо и.т.п.  Для таких же целей банки делают свои приложения на смартфоны  . А привод в данной теме речи не играет. У меня своя самомиска для торговли на спредах  на облигациях.
Цитата
Использование мессенджера MAX для обмена данными в QUIK, Использование мессенджер для обмена для отправки сообщений и управление торговым приводом в QUIK
 
Поскольку , эта тема вроде нигде не поднималась , опишу свой опыт , может быть будет кому то полезно.
Для информирования и  контроля за работой торгового привода у меня был поднят небольшой   саит на локальном компе с QUIK ,и меня все  устраивало,
Сейчас эта схема практически утратила смысл из за почти постоянного отключения мобильного интернета. Я решил  посмотреть  , что можно использовать взамен.  Нормально работали только саиты из белого списка и MAX.  Поскольку других вариантов  не было , выбор пал на MAX ,
И так , что же мог предложить MAX для решения этой задачи ?    В MAX можно создавать чат боты , но делать это могут только OOO ,ИП и самозанятые.
Я давно имею статус самозанятого , а для тех кто его не имеет , получить его можно онлаин за 5 минут и этот статус ни к чему не обязывает.
Для самозанятых MAx ставит ограничение в 2 чат бота. Мне хватило 1 бота, и 1  канала.
Я зашел в лк MAX (https://business.max.ru/self/services ) как самозанятый и зарегил бота , создал там же канал.  Далее чат бота я сделал администратором канала.
В чат чат- бота я направил информационные сообщения от робота а в  канале закрепил набор кнопок для  отправки управляющих команд для торгового привода.  Правда пришлось помучиться  с вычислением идентификаторов каналов 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
 
Цитата
Владимир написал:
Задержка реакции на события от мыши и клавы у меня вначале максимально могла достигать одной секунды, сейчас я понизил порог до 150 мс, так что реакция практически мгновенная. Как можно добиться "даже десятков  секунд"?
У меня все  работает нормально уже более года с разными версиями QUICK начиная с 7 и  с разными брокерами. Проблемы начались после  обновления на 8.12 .0.41   Сейчас откатился на предыдущую версию  (8,8,4,3) и все снова заработало идеально без задержек.  Это обновление  (8.12 .0.41) у меня выставили сразу 2 брокера .  У одного подвисает немного , но там заявки выставляются редко. У другого чаще (до нескольких заявок секунду ) , там QUICK замораживался наглухо и приходилось снимать его через диспетчер задач.
Отладка QUIK 8.12
 
 робот  мониторит 15-20 инструментов и периодически выставляет заявки на покупку и продажу. Все это работало без проблем до перехода на версию  8.12
В 8,12  после запуска робота весь интерфейс практически  зависает .  Отклика на нажатия мыши и клавиатуры приходимся ждать по несколько сеунд или даже десятков  секунд. Пришлось откатится на предыдущую версию , так как на 8.12 работать не возможно.  
Обработка ошибок из функции main
 
Цитата
s_mike@rambler.ru написал:
Используйте luac.exe для проверки синтаксиса перед запуском скрипта.  
Спасибо за совет. Прикрутил  компилер к notepad++ через плагин NppExec  
Обработка ошибок из функции main
 
Цитата
Anton написал:
Не совсем так, ошибку можно посмотреть в окне со скриптами
Точно , у меня окно скриптов было в этой части вынесено за границу экрана для экономии места.  Спасибо за подсказку
Цитата
Anton написал:
А если надо привлечь внимание, то можно как-то так сделатьКодfunction main()
 local s, e = pcall(function()
   -- вот тут ваш мейн
 end)
 if not s then
   message(e, 3) -- искомое сообщение, можно текст от себя добавить
   error(e) -- и выкидываем ошибку дальше, чтобы отработало как обычно
 end
end
В основном у меня ошибки синтаксические , 20 лет писал на скриптовом языке с  похожим синтаксисом , но именно с похожим. Руки уже сами  на автомате  набивают по привычным правилам.
Обработка ошибок из функции main
 
Обратил внимание , что сообщения об ошибках  , в случае выполнении скрипта внутри функции main ,  не выводятся в окно системных сообщений . Скрипт  просто молча останавливает работу. Есть ли возможность включить вывод ошибок в окно сист сообщений или получить текст сообщений об ошибках другим способом ?
Не верные данные в таблице заявок, Данные в таблице заявок обновляются с задержкой
 
С QLUA познакомился только неделю назад , так что прошу извинить , если пишу какие то глупости.
Суть проблемы такая . Скрипт работает на событии  OnQuote. Анализируется содержимое стакана , остатки депо по инструменту и текущие заявки. На основании анализа выставляются новые или отменяются  старые заявки на покупку. Создаются транзакции и далее работа приостанавливается до получения ответа  от OnTransReply. И вот тут то и возникает проблема. Допустим  была 1 заявка на покупку , скрипт дает транзакцию на отмену заявки ,   от OnTransReply приходит ответ об успешном выполнении. Далее сразу идет срабатывание  OnQuote и вызов логики моего скрипта. Скрипт читает таблицу заявок и там эта удаленная заявка  присутствует , как будто бы она не была удалена только что. Соответственно вся логика работы ломается на корню. При следующем вызове  OnQuote уже все OK. Эта же проблема присутствует и при выставлении заявок на покупку.  Пробовал вставлять временную задержку , но это не помогает.  Видимо мне  просто не  хватает  знаний по событийному механизму QLUA.  Просьба помочь с решением данной проблемы.
Страницы: 1
Наверх