Блог им. XXM

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

    • 12 января 2018, 17:57
    • |
    • XXM
  • Еще

Узнал, что продается робот на 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  
  • обсудить на форуме:
  • QUIK
★31
А как запускать скрипт на Lua при незапущенном квике? А при запущенном и однажды залогиненом скрипт не нужен, так как в самом квике есть функция автопереподключения при обрыве связи.
avatar

А. Г.

А. Г., этот скрипт запускается из-под QUIK, поэтому не смогу ответить на ваш вопрос ;)
Насчет автопереподключения  — все верно. Только иногда все же приходится набирать логин и пароль. Бывает, что часто, когда тестируешь какие-нибудь скрипты на демо-счете. Тут этот автологин просто незаменим. Сам ею пользуюсь уже много лет.

 

avatar

XXM

А. Г., В квике есть несколько вариантов логина (в зависимости от брокера). 
В самом квике есть функция автологина, которая опять же работает не всегда.
При незапущенном квике скрипт запускать нельзя
avatar

Валентин

Валентин, у моих брокеров всегда функциия автопереподключения работала. А при смене сервера и автологин не поможет автоматически переподключится. 
avatar

А. Г.

А. Г., При запуске квика, скрипт запускается автоматически, если при выключении квика он был запущен.
avatar

Karim

Karim, т. е. если поставить на хрон бат-файл запуска квика, то квик можно запускать автоматически по параметрам хрона?
avatar

А. Г.

А. Г., Да. У меня так и работает. Только немного подправил скрипт.
В начале вставил

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

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

avatar

Karim

Karim,  спасибо, понятно. 
avatar

А. Г.

Чисто из праздного любопытства: а есть скрипт, запускающий и останавливающий в указанное время другой скрипт?)
avatar

tranquility

tranquility, сходу не скажу. Этот вопрос уместнее на форуме QUIK. Но скрипт, запускающий и останавливающий некоторый процесс по расписанию, вполне реален.
avatar

XXM

tranquility, Как вариант: «другой скрипт» оформить в виде функции и уже из первого запускать и останавливать эту функцию в нужное время или по нужному условию.
avatar

Karim

Karim, ну, я имею ввиду полноценный qlua скрипт, со своей функцией main и остальными callback-ами
avatar

tranquility

tranquility, Без танца с бубнами здесь не обойтись. Одна Lua-машина должна остановить или запустить другую. Это нужно лезть внутрь квика.
Если не секрет, а в чем практический смысл такой задачи?
avatar

Karim

Karim, в моей системе стратегия работает в отдельном процессе, к которому подключается скрипт. Стратегия запускается перед началом торгов и останавливается по окончании. Скрипт при этом продолжает работать. Когда стратегия остановлена, можно по логам проанализировать ее работу и даже перекомпилировать, чтобы к следующим торгам были исправлены выявленные недочеты. Собственно, я хотел понять, возможна ли такая модель с использованием только lua скриптов. Подозреваю, что-то подобное можно реализовать в стокшарп, там ведь можно отсоединить коннектор не останавливая lua скрипт?

По идее, запустить другой скрипт можно тем же образом, что и авторизоваться как в старотовом посте. Просто надо использовать другое окно и разобраться с навигацией по его элементам управления (там простой список ведь и пара кнопок).
avatar

tranquility

tranquility, Не зная логики работы вашей стратегии и скрипта трудно сказать. Как запускается стратегия, это отдельная прога?
Как и зачем к ней подключается скрипт. Почему стратегия сама не может давать команды квику и т.д.
У меня вообще все скрипты это две строчки подключения внешней dll. А все стратегии, получение и передача данных в квик написано на С++. На нем писать гораздо удобнее, чем на Lua, да и отлаживать тоже.
avatar

Karim

Karim, любопытно) У меня ровно такая же идея, только я чуть дальше пошел и у меня код стратегии на С++ не в dll работает, а в отдельном процессе, к которому dll подключается через сокеты. Это, в частности, позволяет в нерабочее время заменить сервер, при этом не останавливая скрипт (он вообще может быть на другом компе, к которому доступ на данный момент затруднен). Возможность такой замены не была изначальной цель, так, как фича теперь имеется.
avatar

tranquility

tranquility, Извините, но в логику вашей стратегии я пока понять затрудняюсь. Зачем в нерабочее время менять сервер, и зачем его вообще менять. Зачем скрипт на другом компе, к которому доступ затруднен. 
А что нельзя просто поставить одну страту на один квик и на один комп?
Несколько страт несколько квиков, некоторые на виртуалках, лично у меня так.
avatar

Karim

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 а ты только сброшенные данные смотри периодически чтобы косяков никаких не появлялось… Такая вот концепция.

Да, еще одно преимущество такого подхода в том, что стратегия может работать вообще на другой машине и под другой операционной системой, например, на кластере под управлением линукс.
avatar

tranquility

tranquility, Прочитал вашу изначальную идею. Вообще не понимаю, как можно украсть стратегию, если она зашита в dll.
Да и зачем это нужно, она у вас что 100% в месяц на 10 млн делает. Иначе какой смысл напрягаться.
avatar

Karim

Karim, преимущества я перечислил. Надеюсь, что не все. А украсть — просто скопипровав директорию терминала. Вы доверяете, например, МетаТрейдеру? Я вот нет. Но, согласен, мера, возможно, чрезмерная несколько преждевременная.
avatar

tranquility

Если скрипт, который нужно останавливать, соответствующим образом написан, то можно.

Если он написан без поддержки такой возможности, тогда корректно из другого скрипта его остановить нельзя.
avatar

s_mike@rambler.ru

s_mike@rambler.ru, т.е. между скриптами какой-то встроенный канал взаимодействия предусмотрен? Или надо с бубном танцевать, записывая команду для остановки в общий файл, как простой вариант, и как более сложный — используя winapi, возможно, через dll?
avatar

tranquility

tranquility, терминал никаких встроенных механизмов не предоставляет. Все нужно делать самому через winapi
avatar

s_mike@rambler.ru

Достаточно универсальный вариант обработчика многих событий без использования sleep — основная идея.

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

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

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

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

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

 

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

avatar

Igr

Igr, полагаю, они тут сидят и ждут не дождутся, когда их так или иначе прорекламируют. В поиске DuckDuckGo легко выявляются.

avatar

XXM

Если сессия пользователя на компе заблокирована, то не сработает.Например, если Квик крутится на удаленном сервере, а Вы заблокировали свою рдп-сессию.=) Я уж думал Квиковцы сделали нормальную функцию в Луа, чтобы передать логин/пароль.Вообще не понимаю почему этого нет еще??? Если боятся перебора паролей брутфорсом — сделайте 3 попытки и паузу между ними по 10 секунд.
avatar

ch5oh

Хранить логин и пароль в открытом виде в текстовом файле? Да вы с дуба рухнули?
Срочно пишу вирус на поиск в файлах .lua логинов и паролей  и буду открывать сделки со всех терминалов страны.
Уберите, не позорьтесь.
Трейдер Квадратный, и что тебе даст мой пароль от квика?
Пиши конечно
avatar

Валентин

Валентин, ну, вирус еще и ключи скопирует и тогда можно будет сделать как пишет Квадратный.
avatar

tranquility

Валентин, а шо, статью 273 УК РФ уже отменили?
avatar

XXM

Трейдер Квадратный, вариантов много, вот один: 
AutoShut 1.2 с запуском программы QUIK
(https://smart-lab.ru/blog/260931.php)



Логин и пароль зашифрованы:

<?xml version="1.0"?>
<QuikLoginPass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <qpath>C:\QUIK7</qpath>
  <login>0Jcbf42wZvwjNeerK+hIzg==</login>
  <pass>hsGFFJ+e10GhwSSZ2/2+Nw==</pass>
  <waitfor>5</waitfor>
</QuikLoginPass>
Также не составит особых трудов включить шифрование и на Lua-скрипте. Смысл поста в том, что есть вещи, которые уже давно (c 2013 года) лежат в открытом доступе и при этом:
1. не все пользователи QUIK знают про бесплатный «автологин»;
2. появляются ушлые ребята, которые продают подобные творения.
avatar

XXM

Спасибо!
avatar

Friendly Deep Space


....все тэги
2010-2020
UPDONW