Kot_Begemot
Kot_Begemot личный блог
04 апреля 2021, 22:57

Утренний сон алготрейдера


После введения утренней торговой сессии проблема автоматического запуска торгового ПО стала особенно актуальна.
Хорошее решение предложил Евгений Логунов  в своей статье «Простой автологин за 5 минут».  Мы предложим аналогичное решение для КВИК на С++.

Задача очень простая — в 7:00 пробудить ПК с помощью планировщика заданий Windows, запустить несколько терминалов QUIK, и в каждом из них запустить торговых роботов, чтобы полностью освободить владельца всего этого счастья от физических и психических нагрузок, плохо влияющих на питание и здоровый образ жизни.


Итак, первое, что нам необходимо будет сделать это Автологин. Штука достаточно простая, учитывая то, что после запуска терминала он автоматически выдает окно приветствия. Нам нужно только дождаться появления этого окна, получить первое вводное поле (логин), второе вводное поле (пароль), вбить туда нужные значения и нажать на первую дочернюю кнопку этого окна: «Вход».

Естественно, что на загрузку терминала и появление приветственного окна нам необходимо будет отвести некоторое время, поэтому начнем с него :

// Глобальные переменные
int pause=1; // Время ожидания между повторными проверками в секундах
int timeout=20; // Таймаут ожидания окна идентификации в секундах
int connectionlag=20; // Время регистрации пользователя и подключения КВИК


Далее нам необходимо будет указать путь к ярлыку (!) терминала, заголовок окна приветствия, наш логин, пароль, и вызвать функцию QUICKSTART.

// ЗАПУСК КВИКА 1
    const char* dir="C:\\Users\\Главный юзер\\Desktop\\ВТБ64-8.5.lnk"; // Путь к ярлыку Квик

    const char* logintitle="Идентификация пользователя"; // Заголовок окна логина


    const char* login="Kot-Begemot"; // ЛогИн
    const char* password="SmartLab"; // Пароль

    bool result;

    result=QUICKSTART(dir,logintitle,login,password); if (result==false) {return 0;}
 
(Обратите внимание, что путь к ярлыку указывается через двойные слеши)

После чего функция QUICKSTART запустит КВИК функцией  ShellExecute(0,0,dir,0,0,5);

Дождется появления окна с указанным заголовком при помощи hmain=FindWindow(NULL,logintitle);

Найдет первое и второе поле ввода через :

hlog=FindWindowExA(hmain,0,«Edit», NULL);
hpass=FindWindowExA(hmain,hlog,«Edit», NULL);

Установит им значения функцией SendMessageA(hlog, WM_SETTEXT, 0, (LPARAM) login);

Найдет первую кнопку (Вход) hbut и щелкнет по ней с помощью :
SendMessageA(hmain, WM_COMMAND, MAKEWPARAM(1, BN_CLICKED), (LPARAM)hbut); 


И пока ARQA не поменяет окно приветствия КВИК все будет прекрасно работать, а если и поменяет, то с помощью SPY++ и аналогов можно будет рассмотреть новые идентификаторы и названия элементов управления, несколько адаптировав код. (Как это сделать?)


Со второй частью — запуск LUA скриптов — все обстоит намного сложнее. Оказывается внутренняя иерархия окон и менюшек КВИК очень сложна и для ее полноценного представления требуется целое хакерское ПО. Даже простой поиск окна «Доступные скрипты» та ещё задача, потому что он стоит пра-пра-правнучкой родительского окна, родители которой потеряны. Поэтому мы введем простое требование — окно «доступные скрипты» должно быть «закреплено» в одной из вкладок Квик и содержать в себе только те скрипты, которые предназначены для авоматического запуска. В этом случае нам останется только спустится вниз по иерархии окон, найдя нужное и нажать в автоматическом режиме две кнопки — «выделить всё» и «запустить». Эти кнопки в версии 8.5.2.11 имеют ID 1008 и ID 1004.  И нам опять остается надеяться только на то, что в ближайших версиях ни сама сложнейшая иерархия, ни ID кнопок не поменяются. 


Запускается эта часть автоматики через функцию LUASCRIPTSTART :
result=LUASCRIPTSTART(); if (result==false) {return 0;}
Которая на элементарном уровне аналогична предыдущей функции.


Остается только скачать файлы проекта, указать логин, пароль и пути, скомпилировать его в exe-файл при помощи любого компилятора, удалить из проекта личные данные и пользоваться программой на здоровье.




54 Комментария
  • GOLD
    04 апреля 2021, 23:03
    У меня комп не выключается (это вообще вирт.сервер за границей). Роботы в квике прекрасно понимают — идут торги или нет.

    Нах городить огород с запуском/остановом квика?
    • Активный Инвестор
      04 апреля 2021, 23:09
      $100, точно… у меня был клиент, который сервер не выключал несколько лет и Квик был подключен при этом к торгам непрерывно… и на ночь и на выходные…
      • GOLD
        04 апреля 2021, 23:34
        Kot_Begemot, алготрейдинг в РФ через домашний интернет — это сильно… но зато C++))
        • Vitaliy
          05 апреля 2021, 09:55
          $100, какой виртуалкой пользуетесь? Для меня вопрос недавно открытый, сам пока на амазоне разместился и оттуда роботы торгуют. Вот собираю информацию, где посмотреть условия еще можно и где терминалы воткнуть — диверсификация виртуальная )))
      • ch5oh
        05 апреля 2021, 09:10
        Kot_Begemot, торговый сервер под подушкой??? Хм! Не ожидал. Датацентры рулят. Чай, на дворе уже не отсталый 20-й век…
        • Андрей К
          05 апреля 2021, 16:43
          ch5oh, 
          Датацентры рулят
          забежал сказать, просто к слову =). Я за последние 6 лет немножко поднабрался опыта.

          Рулят, если только Tier 3 =) То есть DataSpace. Но зараза дорого.

          А иначе, они почему то приходят в самый не подходящий момент: «ой извините, сегодня ночью тех работы», «ой извините у нас железяка слетела и это на 3 недели», «ой, извините мы вас переводим на другой тариф», ну и тд. Речь и про виртуалки и про физический.
    • Freeman Busido
      05 апреля 2021, 11:12
      $100, А по какому принципу Боты понимают идут торги или нет? Как решил? Интересно просто.
      • Susanin
        05 апреля 2021, 19:43
        Freeman Busido, посмотрите таблицу всех сделок и определите меняется что то или нет. 
        • Freeman Busido
          05 апреля 2021, 20:25
          Susanin, Точно, спасибо.
          • Андрей К
            06 апреля 2021, 06:32
            Freeman Busido, в разработке лучше не допускать решения с условностями. Стараться делать абстрактные решения. 

            То что вам предложили смотреть таблицу сделок — это путь «и так сойдет» с привязкой к ситуации. Например, в клиринг на срочке сессия будет не активна, а лента сделок все равно может обновляться из за ммвб и валютки. Либо в конце вечерки какой нибудь тухлой пятницы сделки могут не идти секундами и робот примет решение об отключении.

            Таким путем в алго лучше не идти, это багорассадник и как правило это ведет к убыткам.
    • Bishop
      05 апреля 2021, 11:20
      $100, в случае с виртуальными серверами вас не смущает риск доступа к данным брокерской авторизации со стороны третьих лиц?
    • DJ
      05 апреля 2021, 16:21
      $100, открытие, сбер, бкс и остальные квик вырубают сервера после 1-2 ночи, что на это скажете? Вход кстати также не всегда получается выполнить в 7.00, иногда в 7,30 только заходит.
      • Susanin
        05 апреля 2021, 19:44
        DJ, и что? и в квике же настраивается время подключения.
  • Активный Инвестор
    04 апреля 2021, 23:06
    QUICK — неверное написание...QUIK (от англ. Quickly Updatable Information Kit — «быстро обновляемая информационная панель»)
  • Дмитрий Овчинников
    04 апреля 2021, 23:08
    Задача очень простая — в 7:00 пробудить ПК с помощью планировщика заданий Windows, запустить несколько терминалов QUICK, и в каждом из них запустить торговых роботов

    А зачем их выключать накануне?
  • b@e
    04 апреля 2021, 23:11
    И здесь нет ни строчки кода на С++. Все написано на С и WinAPI.
      • asfa
        05 апреля 2021, 09:18
        Kot_Begemot, чего только не сделаешь ради Смартлаба! Даже логин и пароль показали 
    • Андрей К
      05 апреля 2021, 17:03
      b@e, вмешаюсь наверное не по делу =). Приведенные функции уже Win32 Api, а это уже формально C++, для которого Win32 и создавалась =). 
      • b@e
        05 апреля 2021, 23:00
        Андрей К, 
        вот выдержка из Википедии: Windows API представляет собой множество функций, структур данных и числовых констант, следующих соглашениям языка Си.
        С++ это метапрограммирование и ООП. А здесь, чистый С.
  • принц Оранский
    04 апреля 2021, 23:32
    Чтоб сон был утренний — ставьте квик на удаленку. 
  • 3Qu
    04 апреля 2021, 23:52
    Почитайте нововведения следующей версии после Квик 8.12. Сдается, что эта возможность будет перекрыта, и все придется начинать заново.
  • Мальчик buybuy
    05 апреля 2021, 04:19
    Странно...

    Если торговый терминал не может импортировать в себя расписания торгов — это говно, а не терминал, IMHO.
    Не хочу никого рекламировать, но даже элементарный TSLab легко организует торго по расписанию. Есть и более продвинутые варианты.

    С уважением
  • Bearminator
    05 апреля 2021, 05:28

    Коллеги, сталкивался ли кто-то с такой проблемой? Квик не всегда автоматически соединяется с сервером. Брокер Открытие.

    Квик включен на сервере круглосуточно. Однако ночью коннект пропадает (возможно перегружают или выключают сервера). На утро квик не всегда автоматически восстанавливает коннект, хотя все настройки выставлены (см.скрин



    ).

     

    • Beach Bunny
      05 апреля 2021, 07:35
      Максим Иванов, ночью у всех сервера отключаются.
      • Bearminator
        05 апреля 2021, 08:00
        Sergeyka, это понятно.
        Вопрос был в том, что с утра не всегда происходит автоматически переподключение. 
        Иногда просто висит жетый кружок и все. 
        У меня 12 виртуалок, на некоторых все подключается, на отдельных не всегда. Настройки идентичны. 
        • bstone
          05 апреля 2021, 08:25
          Максим Иванов, а виртуалки на разных хостах? Может сервер квика фротлит подключения с одного IP?
          • Bearminator
            05 апреля 2021, 10:52

            bstone, все на одной машине, на одном хосте. 

            Ну вот сегодня все сами автоматически подключились. Какая-то нестабильная ситуация.

      • Bishop
        05 апреля 2021, 11:22
        Sergeyka, не у всех.
    • krolix
      05 апреля 2021, 09:57
      Максим Иванов, попробуйте сделать время восстановления связи в рамках торговой сессии, т.е. с 7 утра.
      • Bearminator
        05 апреля 2021, 10:53

        krolix, ок. 

        спасибо, попробую поиграть с временем подключения. 

  • Rostislav Kudryashov
    05 апреля 2021, 08:52
    Как включить ВЫКЛЮЧЕННЫЙ (а не уснувший) ПК?
    liwihelp.com/sistema/avtomaticheskoe_vklyuchenie_kompyutera.html
    • ch5oh
      05 апреля 2021, 09:12
      Rostislav Kudryashov, а стеночку в магазине можно также приподнять?
      • svgr
        05 апреля 2021, 15:28
        ch5oh, нет, только гараж тов. Семицветова.
  • Bishop
    05 апреля 2021, 11:18
    Зачем эти танцы с бубнами, ради экономии грошового электричества? :) Перезапускаю торговый ПК вечером в воскресенье и всю неделю роботы торгуют по встроенному таймеру в терминале. ПК никогда не выключается и не уходит в режим сна!
    • ves2010
      05 апреля 2021, 12:33
      Bishop, а шум куда?
      • Beach Bunny
        05 апреля 2021, 12:41
        ves2010, на ноутбуке поставь будет бесшумно.
      • ch5oh
        05 апреля 2021, 12:51
        ves2010, торговый сервер в датацентре должен жить.
        • Bishop
          05 апреля 2021, 14:51
          ch5oh, доступ третьих лиц к учётным данным вашего брокера не смущает? Нет никаких гарантий, что этого не случится.
          • Андрей К
            05 апреля 2021, 16:48
            Bishop, брокер и дата центр могут жить отдельно
          • ch5oh
            05 апреля 2021, 22:07

            Bishop, если об этом думать, то берите не VDS, а ставьте свою личную железку в стойку. Причем жесткий диск можно зашифровать предварительно.

             

            Гарантий нет нигде и никогда. Даже просматривая с телефона СЛ Вы не можете быть уверены, что зловредная машинка не отправляет Ваши логины/пароли сами-знаете-кому.

      • Дмитрий Овчинников
        05 апреля 2021, 12:54
        ves2010, 
        у меня сервер пока дома.
        Для снижения шума снял вентилятор с видеокарты, на процессоре скорость вращения минимальная, регулируется через ПО, на блоке питания вентилятор запитал вместо 12В на 5В. Жесткий диск SSD M2.
        Тихо :)
        • ch5oh
          05 апреля 2021, 22:10

          Дмитрий Овчинников, сейчас есть блоки питания без вентилляторов.

          И если процессор взять негорячий, то кулер тоже можно поставить пассивный.

          • Дмитрий Овчинников
            05 апреля 2021, 22:18
            ch5oh, 
            Можно, но тогда это будет не сервер, а неттоп какой-то. У меня Зион 12/24 ядерный.
      • Bishop
        05 апреля 2021, 14:50
        ves2010, «проблема» решается приобретением качественных бесшумных комплектующих. :)
  • К чему такие сложности?
    Не проще ли арендовать VPS server, который работает круглосуточно без проблем ?
    А в lua прописать условие запуска по времени торгов. А в quik настроить восстанавливать соединение и тоже указать время торгов.

    Надо вот так так так, понятно?
    А вот так как тут в посте написано не надо.
  • pessimist
    05 апреля 2021, 21:56
    Мы не ищем легких путей!

    У каждого есть свой путь. У каждого путника есть попутчики.
    Хорошо, когда щедрые коты делятся с теми, кто выбрал такой же путь.

    Ну! За котов! 

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

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