XXM
XXM личный блог
12 января 2018, 17:57

Автологин в QUIK (на Lua).

Узнал, что продается робот на Lua, «Автологин терминала QUIK».
Продается то, что есть в открытом виде на quik2dde.ru  

Выкладываю тут: 

-- quik_login.lua
-- Автологин терминала QUIK
-- © http://qui2dde.ru/
-- Версия: 2.0
-- для Quik от версии 7.11.1.5

local w32 = require("w32")

-- логин и пароль для терминала
QUIK_LOGIN = "Uxxxxxxx"
QUIK_PASSW = "yyyyy"

function FindLoginWindow()
  hLoginWnd = w32.FindWindow("", "Идентификация пользователя")
  if hLoginWnd == 0 then
    hLoginWnd = w32.FindWindow("", "User identification")
  end
  return hLoginWnd
end

timeout = 1000  -- таймаут между попытками поиска окна логина
is_run = true

function OnStop()
  timeout = 1
  is_run = false
end

function main()
  while is_run do
    sleep(timeout)

    if isConnected() == 0 then
  
      local hLoginWnd = FindLoginWindow()
      if hLoginWnd ~= 0 then

        local n1 = w32.FindWindowEx(hLoginWnd, 0, "", "")
        local n2 = w32.FindWindowEx(hLoginWnd, n1, "", "")
        local n3 = w32.FindWindowEx(hLoginWnd, n2, "", "")
        local n4 = w32.FindWindowEx(hLoginWnd, n3, "", "")

        w32.SetWindowText(n2, QUIK_LOGIN)
        w32.SetWindowText(n3, QUIK_PASSW)


        w32.SetFocus(n4)
        w32.PostMessage(n4, w32.BM_CLICK, 0, 0)

      end 
    end

  end
end
Благодарности, как понимаю, следует адресовать swerg  
37 Комментариев
  • А. Г.
    12 января 2018, 18:03
    А как запускать скрипт на Lua при незапущенном квике? А при запущенном и однажды залогиненом скрипт не нужен, так как в самом квике есть функция автопереподключения при обрыве связи.
    • Валентин
      12 января 2018, 18:33
      А. Г., В квике есть несколько вариантов логина (в зависимости от брокера). 
      В самом квике есть функция автологина, которая опять же работает не всегда.
      При незапущенном квике скрипт запускать нельзя
      • А. Г.
        12 января 2018, 18:40
        Валентин, у моих брокеров всегда функциия автопереподключения работала. А при смене сервера и автологин не поможет автоматически переподключится. 
    • Karim
      12 января 2018, 19:01
      А. Г., При запуске квика, скрипт запускается автоматически, если при выключении квика он был запущен.
      • А. Г.
        12 января 2018, 19:08
        Karim, т. е. если поставить на хрон бат-файл запуска квика, то квик можно запускать автоматически по параметрам хрона?
        • Karim
          12 января 2018, 19:14
          А. Г., Да. У меня так и работает. Только немного подправил скрипт.
          В начале вставил

          ScriptPath = getScriptPath()
          package.cpath = ScriptPath.."\\w32.dll;"

          ну и дальше под себя немного поменял.

          • А. Г.
            12 января 2018, 19:38
            Karim,  спасибо, понятно. 
  • tranquility
    12 января 2018, 18:12
    Чисто из праздного любопытства: а есть скрипт, запускающий и останавливающий в указанное время другой скрипт?)
    • Karim
      12 января 2018, 19:46
      tranquility, Как вариант: «другой скрипт» оформить в виде функции и уже из первого запускать и останавливать эту функцию в нужное время или по нужному условию.
      • tranquility
        12 января 2018, 19:51
        Karim, ну, я имею ввиду полноценный qlua скрипт, со своей функцией main и остальными callback-ами
        • Karim
          12 января 2018, 20:14
          tranquility, Без танца с бубнами здесь не обойтись. Одна Lua-машина должна остановить или запустить другую. Это нужно лезть внутрь квика.
          Если не секрет, а в чем практический смысл такой задачи?
          • tranquility
            12 января 2018, 20:28
            Karim, в моей системе стратегия работает в отдельном процессе, к которому подключается скрипт. Стратегия запускается перед началом торгов и останавливается по окончании. Скрипт при этом продолжает работать. Когда стратегия остановлена, можно по логам проанализировать ее работу и даже перекомпилировать, чтобы к следующим торгам были исправлены выявленные недочеты. Собственно, я хотел понять, возможна ли такая модель с использованием только lua скриптов. Подозреваю, что-то подобное можно реализовать в стокшарп, там ведь можно отсоединить коннектор не останавливая lua скрипт?

            По идее, запустить другой скрипт можно тем же образом, что и авторизоваться как в старотовом посте. Просто надо использовать другое окно и разобраться с навигацией по его элементам управления (там простой список ведь и пара кнопок).
            • Karim
              12 января 2018, 21:07
              tranquility, Не зная логики работы вашей стратегии и скрипта трудно сказать. Как запускается стратегия, это отдельная прога?
              Как и зачем к ней подключается скрипт. Почему стратегия сама не может давать команды квику и т.д.
              У меня вообще все скрипты это две строчки подключения внешней dll. А все стратегии, получение и передача данных в квик написано на С++. На нем писать гораздо удобнее, чем на Lua, да и отлаживать тоже.
              • tranquility
                12 января 2018, 22:33
                Karim, любопытно) У меня ровно такая же идея, только я чуть дальше пошел и у меня код стратегии на С++ не в dll работает, а в отдельном процессе, к которому dll подключается через сокеты. Это, в частности, позволяет в нерабочее время заменить сервер, при этом не останавливая скрипт (он вообще может быть на другом компе, к которому доступ на данный момент затруднен). Возможность такой замены не была изначальной цель, так, как фича теперь имеется.
                • Karim
                  13 января 2018, 00:04
                  tranquility, Извините, но в логику вашей стратегии я пока понять затрудняюсь. Зачем в нерабочее время менять сервер, и зачем его вообще менять. Зачем скрипт на другом компе, к которому доступ затруднен. 
                  А что нельзя просто поставить одну страту на один квик и на один комп?
                  Несколько страт несколько квиков, некоторые на виртуалках, лично у меня так.
                  • tranquility
                    13 января 2018, 00:48
                    Karim, я же говорю, что это не цель, а фишка скорее. Изначально идея такая была:
                    smart-lab.ru/algotrading/%D0%9A%D1%80%D0%B0%D0%B6%D0%B0%20%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D0%B2%2C%20%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D0%B9%2C%20%D0%B8%D0%B4%D0%B5%D0%B9/goto_comment_7691841/#comment7691841

                    А сервер заменить — мало ли для чего. Делал бэктесты на свежеполученных данных и решил чуть стратегию поменять, оптимизировать. Скрипт при этом вертится и его вообще не трогать. Можно выключить-заменить-включить, но это не так удобно. Можно, например, забыть скрипт запустить. А так он вертится себе 24/7 а ты только сброшенные данные смотри периодически чтобы косяков никаких не появлялось… Такая вот концепция.

                    Да, еще одно преимущество такого подхода в том, что стратегия может работать вообще на другой машине и под другой операционной системой, например, на кластере под управлением линукс.
                    • Karim
                      13 января 2018, 01:01
                      tranquility, Прочитал вашу изначальную идею. Вообще не понимаю, как можно украсть стратегию, если она зашита в dll.
                      Да и зачем это нужно, она у вас что 100% в месяц на 10 млн делает. Иначе какой смысл напрягаться.
                      • tranquility
                        13 января 2018, 01:57
                        Karim, преимущества я перечислил. Надеюсь, что не все. А украсть — просто скопипровав директорию терминала. Вы доверяете, например, МетаТрейдеру? Я вот нет. Но, согласен, мера, возможно, чрезмерная несколько преждевременная.
  • s_mike@rambler.ru
    12 января 2018, 19:06
    Если скрипт, который нужно останавливать, соответствующим образом написан, то можно.

    Если он написан без поддержки такой возможности, тогда корректно из другого скрипта его остановить нельзя.
    • tranquility
      12 января 2018, 19:39
      s_mike@rambler.ru, т.е. между скриптами какой-то встроенный канал взаимодействия предусмотрен? Или надо с бубном танцевать, записывая команду для остановки в общий файл, как простой вариант, и как более сложный — используя winapi, возможно, через dll?
      • s_mike@rambler.ru
        14 января 2018, 13:55
        tranquility, терминал никаких встроенных механизмов не предоставляет. Все нужно делать самому через winapi
  • Борис Гудылин
    12 января 2018, 19:37
    Достаточно универсальный вариант обработчика многих событий без использования sleep — основная идея.

    waitres=w32.WaitForMultipleObjects(TEVE,0,INFINITE) — ждем любого события по списку

    Автору w32.dll еще раз спасибо, сэкономил немного времени.

  • Igr
    12 января 2018, 20:52

    скрипт полезный, пользуюсь им

    ещё бы хотелось в нём реализовать что б при потери связи (сервер лёг и не отвечает на попытки подключения, 10 раз например) скрипт менял сервак и пробовал подключиться снова 

    может кто знает как это реализовать, подскажет? 

     

    а где скрипт этот продают, надо знать таких «героев» ?

  • ch5oh
    12 января 2018, 22:14
    Если сессия пользователя на компе заблокирована, то не сработает.Например, если Квик крутится на удаленном сервере, а Вы заблокировали свою рдп-сессию.=) Я уж думал Квиковцы сделали нормальную функцию в Луа, чтобы передать логин/пароль.Вообще не понимаю почему этого нет еще??? Если боятся перебора паролей брутфорсом — сделайте 3 попытки и паузу между ними по 10 секунд.
  • Трейдер Квадратный
    12 января 2018, 23:31
    Хранить логин и пароль в открытом виде в текстовом файле? Да вы с дуба рухнули?
    Срочно пишу вирус на поиск в файлах .lua логинов и паролей  и буду открывать сделки со всех терминалов страны.
    Уберите, не позорьтесь.
    • Валентин
      13 января 2018, 01:24
      Трейдер Квадратный, и что тебе даст мой пароль от квика?
      Пиши конечно
      • tranquility
        13 января 2018, 02:09
        Валентин, ну, вирус еще и ключи скопирует и тогда можно будет сделать как пишет Квадратный.
  • Friendly Deep Space
    22 января 2019, 23:13
    Спасибо!
  • swerg
    18 мая 2020, 12:00
    Добавил сборку w32.dll для QUIK 8 и QUIK 8.5 (Lua5.3)
    quik2dde.ru/viewtopic.php?id=78
    Все ссылки в первом сообщении там.

    И таки да, спасибо принимаются в любом эквиваленте :)
    Спасибо, XXM!
    • swerg
      18 мая 2020, 14:48

      XXM, не есть парни, которые ура говорят рублём.
      От чего я, конечно, не отказываюсь ;)
      forum.quik.ru/forum10/topic5435/

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн