Автоматический запуск QUIK!

ConnectНаконец-то дошли руки — сделал отдельную настраиваемую утилиту, которая запускает QUIK, и самостоятельно вводит в него логин и пароль, тем самым мы имеем возможность настроить полный автоматический запуск торгового процесса!

Для начала давайте рассмотрим аспекты поддержания соединения с торговым сервером. В меню «настройки — основные» в QUIK есть функция «устанавливать соединение», включив которую, при запуске QUIK будет автоматически открывать диалог установления связи с сервером:

Устанавливать соединение

Устанавливать соединение

В меню «связь — доступные соединения» есть раздел «при разрыве связи», в котором есть две отключаемые и настраиваемые функции: восстановление соединения и опции повторного соединения. В первой функции мы указываем через какой промежуток времни, после разрыва, QUIK сам будет восстанавливать соединение, также можем указа в какой период времени нам нужно восстановление соединения. Активация второй функции позволит нам при повторном соединении не вводить опять пароль и логин:

Восстанавливать соединение

Восстанавливать соединение

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

Как вводить логин и пароль автоматически?

К чему это все я веду — я стремлюсь к полной автоматизации процесса. Есть компьютер, в настройках BIOS которого, есть функция включения компьютера в установленное время. Стартует Windows, в автозагрузке стоит утилита автостарта QUIK, запускает QUIK, вводит логин и пароль, производится соединение с сервером, и тут же начинает работу торговый робот. Т.е. участия человека не нужно. Совсем не нужно! У меня сервер стоит в стойке у провайдера с подобными настройками, администрировать который я захожу через интернет, в т.ч. со смартфона. А у провайдера связь отличная, поэтому за нее можно не волноваться. В итоге я имею мощную систему, управлять которой я могу из любой точки мира, которая может работать абсолютно автономно! Представили себе? Это как раз и есть свобода.

Итак, подробнее об утилите: настройка минимальна — логин и пароль при первом запуске, при повторном запуске утилита больше ничего не спрашивает — просто запускает QUIK. Если вдруг по каким-то причинам QUIK кто-то выключит — она опять запустит его и опять введет логин и пароль. Зарегистрированные пользователи могут скачать утилиту.

Автостартер QUIK

Автостартер QUIK

  1. Camill
    25 Октябрь 2009 в 22:31 | #1

    Кстати да, тоже руки не доходили такое сделать.

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

    С точки зрения безопасности кража логина/пароля бесполезна — пароль от квика не позволяет перевести деньги на свой счет, только спустить чужой депозит. Постороннему человеку это не нужно, а свои могут сделать то же самое гораздо более простыми методами.

    Хотелось бы видеть в этой софтинке возможность прятаться в трей (просто удобно), возможность закрываться после запуска квика (для тех, кому надоело вводить логин/пароль, но не нужен автоперезапуск) и хоть какое-то шифрование пароля в реестре (для параноиков, которые не читали предыдущий абзац).

    Евгений Reply:

    Вот исходник на языке AutoIT (код может показаться корявым профессионалу в этом языке — это моя первая программа на нем, сделал за час...):

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****

    #AutoIt3Wrapper_icon=...\...\VistaOSX09\icons\RKLauncher.ico

    #AutoIt3Wrapper_outfile=autostarter.exe

    #AutoIt3Wrapper_Compression=4

    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

    #include «C:\Program Files\AutoIt3\Include\GUIConstants.au3»

    GUICreate («Автостартер www.hirobot.ru», 290, 150)

    GUISetState ()

    $var = RegEnumVal («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog», 1)

    if @error <>0 Then

    MsgBox (4096, «Ошибка»,"Не найдены данные логина и пароля!")

    GUICreate («Регистрационные данные», 290, 150)

    $Log=GUICtrlCreateInput («Здесь введите логин», 45, 20)

    $Pass=GUICtrlCreateInput («Здесь введите пароль», 45, 60)

    $CTRL_btnOK = GUICtrlCreateButton («QUIK»,55, 100, 80, 29)

    $CTRL_btnNO = GUICtrlCreateButton («Выход»,155, 100, 80, 29)

    GUISetState ()

    Do

    $msg = GUIGetMsg ()

    if $msg = $CTRL_btnNO then

    GUIDelete ()

    Exit

    endif

    if $msg = $CTRL_btnOK then

    RegWrite («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog», «Key1», «REG_SZ», GUICtrlRead ($Log))

    RegWrite («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog», «Key2», «REG_SZ», GUICtrlRead ($Pass))

    GUIDelete ()

    ExitLoop

    endif

    Until $msg = $GUI_EVENT_CLOSE

    endif

    $STOP_Button = GUICtrlCreateButton («Изменить логин и пароль»,55, 100, 180, 29)

    $msg=0

    GUICtrlCreatelabel («Состояние QUIK -», 45, 20)

    $StringNotActive="«

    $titlewindowfind2=0

    $StringActive=»"

    Do

    $titlewindowfind=0

    if ProcessExists («info.exe») Then

    $titlewindowfind=1

    endif

    if $titlewindowfind=0 AND $titlewindowfind2<>2 Then

    $StringNotActive=GUICtrlCreatelabel («Отключен», 137, 20)

    $titlewindowfind2=2

    run («info.exe»)

    WinWaitActive («Идентификация пользователя»)

    $Log=RegRead («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog»,"Key1")

    Send ($Log)

    Send («{TAB}»)

    $Pass=RegRead («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog»,"Key2")

    Send ($Pass)

    Send («{ENTER}»)

    EndIf

    if $titlewindowfind=1 AND $titlewindowfind2<>3 Then

    $StringActive=GUICtrlCreatelabel («Активен», 137, 20)

    $titlewindowfind2=3

    EndIf

    GUISetState ()

    If $msg =$STOP_Button then

    GUICreate («Регистрационные данные», 290, 150)

    $Log=GUICtrlCreateInput («Здесь введите логин», 45, 20)

    $Pass=GUICtrlCreateInput («Здесь введите пароль», 45, 60)

    $CTRL_btnOK = GUICtrlCreateButton («Сохранить»,55, 100, 80, 29)

    $CTRL_btnNO = GUICtrlCreateButton («Отмена»,155, 100, 80, 29)

    GUISetState ()

    Do

    $msg = GUIGetMsg ()

    if $msg = $CTRL_btnNO then

    GUIDelete ()

    ExitLoop

    $titlewindowfind=0

    ;$titlewindowfind2=0

    endif

    if $msg = $CTRL_btnOK then

    RegWrite («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog», «Key1», «REG_SZ», GUICtrlRead ($Log))

    RegWrite («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog», «Key2», «REG_SZ», GUICtrlRead ($Pass))

    $PID = ProcessExists («info.exe»)

    If $PID Then ProcessClose ($PID)

    run («info.exe»)

    WinWaitActive («Идентификация пользователя»)

    $Log=RegRead («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog»,"Key1")

    Send ($Log)

    Send («{TAB}»)

    $Pass=RegRead («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog»,"Key2")

    Send ($Pass)

    Send («{ENTER}»)

    GUIDelete ()

    ExitLoop

    $titlewindowfind=0

    ;$titlewindowfind2=0

    endif

    Until $msg = $GUI_EVENT_CLOSE

    endif

    $msg = GUIGetMsg ()

    Until $msg = $GUI_EVENT_CLOSE

  2. Craz
    1 Ноябрь 2009 в 00:50 | #2

    Здравствуйте, Евгений. Какие вы ещё языки программирования знаете? (Это для того чтобы знать к чему надо стремится =)

    Евгений Reply:

    Привет.

    ФоксПро, Купайл.

    Авто ИТ на начальном уровне.

  3. vvkg
    29 Ноябрь 2009 в 23:50 | #3

    Добрый вечер!

    Подскажите пжалста по такой ситуёвине: у меня у 3-х брокеров тоже стоит QUIK, можно ли для каждого из них настроить автозапуск?

    Евгений Reply:

    Нет, программа автозапуска в текущем виде может хранить логин и пароль только для одного квика. В каментах выложен код, он простой, попробуйте для себя сделать три версии с тремя разными местами хранения регистрационных данных.

  4. pilott55
    15 Декабрь 2009 в 14:00 | #4

    Добрый день!

    Подскажите пожалуйста!!!

    У меня, после включения компьютера и запуска автостартера, загружается Quik, и просит ключи с диска А:, хотя ключи находятся на диске С:, в файле Qrypto, все связанное с диском А:, давно стерто.В течении дня, такой проблеммы не возникает.Все работает.

    Евгений Reply:

    А это единственный квик которые есть у вас на компе? файл автостартера лежит в его директории? В самом квике меню Настройки-шифрование указаны правильные пути ключей?

    Вобщем попробуйте заново настроить шифрование.

  5. pilott55
    16 Декабрь 2009 в 11:25 | #5

    @pilott55

    Квик единственный,файл автостартера лежит в его директории.Если зайти в папку Квик и нажать автостартер, то все запускается без проблем, а вот если ставить через автозапуск(Стандартный) или Auto Power-on, то появляется проблема описанная выше.((((

    Евгений Reply:

    Проблема в том, что автостартер не открывает папку с квиком. Поэтому запускать автоматически надо через планировщик задач в винде. Там же можно настроить точное время запуска.

    pilott55 Reply:

    Ок. Спасибо большое.

  6. 18 Декабрь 2009 в 05:30 | #6

    Приветствую, у меня пасс от квика на англицком я зыке, а пользователь соответственно на русском... не работаит :(

    Евгений Reply:

    Вообще автостартеру все равно на каком языке логин и пароль.

    Что конкретно не работает? Пароль не принимает квик?

    yoni Reply:

    да, тупо пишет неверный пароль и все тут...

    Евгений Reply:

    Квик это пишет? А пароль в форме ввода регистрационных данный в квике при автостарте появляется?

    Может при вводе пароля в автостартер ошибку допустили? Попробуйте в автостартере нажать кнопку «изменить данные» и ввести пароль заново.

  7. Mechtatel
    25 Январь 2011 в 11:53 | #7

    Я тоже решил установить вашу утилиту, Евгений. Потом прочёл ваш ответ на коментарий от 16.12.09. Задействовал планировщик: включить QUIK в 11.00 и ежедневно. На следующее утро перед уходом включил компьютер, установил рабочий стол, никаких программ. А он на моих глазах тут же включает QUIK и устанавливает связь с сервером. Получается, планировщик не нужен. Я хотел установить рабочий стол, а в 11.00 планировщик вытащит QUIK и ваша утилита установит связь с сервером. Что я неправильно сделал?

    Евгений Reply:

    Привет.

    Утилита сама запускает квик, и вводит в него пароль. если для вас критично включение квика в определенное время — в планировщик надо сделать задание для утилиты, а не для квика.

  8. murzin
    21 Февраль 2011 в 20:55 | #8

    Добрый день, будьте добры, подскажите. Установил в квике автоматическое соединение, вынимаю кабель, вставляю обратно. Квик пытается через указанное время восстановить соединение, но возвращает: «Вы уже работаете в системе». Что не так?

    Евгений Reply:

    Это пишет сервер брокера. Поставьте в меню связь-доступные соединения в параметре «Восстанавливать связь» через 15-20 сек.

    murzin Reply:

    Спасибо, с большим интервалом работает нормально. А может подскажите мне по несколько другому вопросы, Вы наверняка знаете.

    В папке Info лежит экзешник Info. Если запустить его вручную, то открывается нормальный квик. Если же я пытаюсь запустить ровно тот же самый экзешник питоном или из коммандной строки, то открывается какая-то странная версия квика (видимо старая), которая не может найти пароли. То же самое если я запускаю Ваш автостартер например питоном. В чем тут проблема?

    Евгений Reply:

    Надо указывать рабочую папку самого квика. Вот у меня на рабочем столе создан ярлык для автостартера, который в свою очередь лежит в папке квика. Завтра опубликую статью об еще одном, альтернативном, автоматическом запуске квика.

  9. Rrider
    2 Апрель 2011 в 14:47 | #9

    У меня есть проблема с запуском Квика. Какой-то процесс, пока не могу определить какой, периодический перехватывает активность окна идентификации пользователя, а если окно не активно, то скрипт не может ввести логин и пароль. Можно ли в скрипте прописать принудительную активацию окна перед вводом пароля? С AutoIT не знаком, к сожалению.

    Евгений Reply:

    Привет.

    Принудительное активирование окна ввода пароля уже есть. Попробуйте вариант на WBS: www.hirobot.ru/2011/03/al...avtozapusk-quik/

    Rrider Reply:

    Пробовал уже, тоже самое, видимо там тоже только с активным окном работает. Но я уже нашел решение, пришлось познакомиться с AutoIT, заменил операторы Send на ControlSend — этот умеет работать и с не активным окном. Теперь запускается стабильно:) Вот кусок:

    $Log=RegRead («HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog»,"Key1")

    ControlFocus ( «Идентификация пользователя», "", [CLASSNN:Static3]"")

    ControlSend ( «Идентификация пользователя», "", [CLASSNN:Static3]"«, $Log )

    Send („{TAB}“)

    $Pass=RegRead („HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SysLog“,»Key2")

    ControlFocus ( «Идентификация пользователя», "", [CLASSNN:Static4]"")

    ControlSend ( «Идентификация пользователя», "", [CLASSNN:Static4]"", $Pass )

    ControlFocus ( «Идентификация пользователя», "", [CLASSNN:Button1]"")

    ControlSend ( «Идентификация пользователя», "", [CLASSNN:Button1]"", «{ENTER}» )

    Правда не уверен, что значения Static3, Static4, Button1 у других пользователей будут такими же, проверять надо, я же первый раз с этим языком...

  10. v_zhilov
    4 Апрель 2011 в 02:53 | #10

    Здравствуйте, если сервер стоит в стойке у провайдера, то при перезагрузки нужно войти в свою учетную запись перед тем как запустится автозагурзка в автостартером, т.е. если сервер после обновлений перегружался, то Квик сам, получается, не запустится. Как можно с таким справиться?

    Евгений Reply:

    Привет.

    По моему надо настроить загрузку компьютера так, чтоб при включении/перезагрузке винда не спрашивала учетную запись/пароль, а загружала админскую по умолчанию. У меня именно так.

    v_zhilov Reply:

    Спасибо, попробую.

Необходимо войти на сайт, чтобы написать комментарий.