Блог им. Kot_Begemot

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


После введения утренней торговой сессии проблема автоматического запуска торгового ПО стала особенно актуальна.
Хорошее решение предложил Евгений Логунов  в своей статье «Простой автологин за 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-файл при помощи любого компилятора, удалить из проекта личные данные и пользоваться программой на здоровье.




★25
54 комментария
ЗакрепитьКомментарий закреплен пользователем Kot_Begemot
pessimist, обратите внимание, что 10.04.21 версия пропатчена — убраны конфликты запуска (возникли после чистки реестра Windows) и сделана работа в режиме окна приветствия Windows (нет доступа к активным окнам).
avatar
У меня комп не выключается (это вообще вирт.сервер за границей). Роботы в квике прекрасно понимают — идут торги или нет.

Нах городить огород с запуском/остановом квика?
avatar
$100, точно… у меня был клиент, который сервер не выключал несколько лет и Квик был подключен при этом к торгам непрерывно… и на ночь и на выходные…
$100, скорость, бесперебойность, оптимизация, экономия электроэнергии и снижение уровня шума. Можно и круглый год гонять — кто спорит?
avatar
Kot_Begemot, алготрейдинг в РФ через домашний интернет — это сильно… но зато C++))
avatar
$100, какой виртуалкой пользуетесь? Для меня вопрос недавно открытый, сам пока на амазоне разместился и оттуда роботы торгуют. Вот собираю информацию, где посмотреть условия еще можно и где терминалы воткнуть — диверсификация виртуальная )))
avatar
Kot_Begemot, торговый сервер под подушкой??? Хм! Не ожидал. Датацентры рулят. Чай, на дворе уже не отсталый 20-й век…
avatar
ch5oh, 
Датацентры рулят
забежал сказать, просто к слову =). Я за последние 6 лет немножко поднабрался опыта.

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

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

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

Таким путем в алго лучше не идти, это багорассадник и как правило это ведет к убыткам.
avatar
$100, в случае с виртуальными серверами вас не смущает риск доступа к данным брокерской авторизации со стороны третьих лиц?
avatar
$100, открытие, сбер, бкс и остальные квик вырубают сервера после 1-2 ночи, что на это скажете? Вход кстати также не всегда получается выполнить в 7.00, иногда в 7,30 только заходит.
avatar
DJ, и что? и в квике же настраивается время подключения.
avatar
QUICK — неверное написание...QUIK (от англ. Quickly Updatable Information Kit — «быстро обновляемая информационная панель»)
Задача очень простая — в 7:00 пробудить ПК с помощью планировщика заданий Windows, запустить несколько терминалов QUICK, и в каждом из них запустить торговых роботов

А зачем их выключать накануне?
Дмитрий Овчинников, удаление мусора/ошибок и освобождение мощностей. Ну и ещё мелочи... 
avatar
И здесь нет ни строчки кода на С++. Все написано на С и WinAPI.
avatar
b@e, я сегодня не усну
avatar
Kot_Begemot, чего только не сделаешь ради Смартлаба! Даже логин и пароль показали 
avatar
b@e, вмешаюсь наверное не по делу =). Приведенные функции уже Win32 Api, а это уже формально C++, для которого Win32 и создавалась =). 
avatar
Андрей К, 
вот выдержка из Википедии: Windows API представляет собой множество функций, структур данных и числовых констант, следующих соглашениям языка Си.
С++ это метапрограммирование и ООП. А здесь, чистый С.
avatar
Чтоб сон был утренний — ставьте квик на удаленку. 
Почитайте нововведения следующей версии после Квик 8.12. Сдается, что эта возможность будет перекрыта, и все придется начинать заново.
avatar
Странно...

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

С уважением
avatar

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

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



).

 

avatar
Максим Иванов, ночью у всех сервера отключаются.
avatar
Sergeyka, это понятно.
Вопрос был в том, что с утра не всегда происходит автоматически переподключение. 
Иногда просто висит жетый кружок и все. 
У меня 12 виртуалок, на некоторых все подключается, на отдельных не всегда. Настройки идентичны. 
avatar
Максим Иванов, а виртуалки на разных хостах? Может сервер квика фротлит подключения с одного IP?
avatar

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

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

avatar
Sergeyka, не у всех.
avatar
Максим Иванов, попробуйте сделать время восстановления связи в рамках торговой сессии, т.е. с 7 утра.
avatar

krolix, ок. 

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

avatar
Максим Иванов, нет, с таким не сталкивался, но Квик на ночь предпочитаю не оставлять, так как он с утра бывает виснет при реконнекте. Не знаю что там за проблемы.
avatar
Как включить ВЫКЛЮЧЕННЫЙ (а не уснувший) ПК?
liwihelp.com/sistema/avtomaticheskoe_vklyuchenie_kompyutera.html
avatar
Rostislav Kudryashov, а стеночку в магазине можно также приподнять?
avatar
ch5oh, нет, только гараж тов. Семицветова.
avatar
Зачем эти танцы с бубнами, ради экономии грошового электричества? :) Перезапускаю торговый ПК вечером в воскресенье и всю неделю роботы торгуют по встроенному таймеру в терминале. ПК никогда не выключается и не уходит в режим сна!
avatar
Bishop, а шум куда?
avatar
ves2010, на ноутбуке поставь будет бесшумно.
avatar
ves2010, торговый сервер в датацентре должен жить.
avatar
ch5oh, доступ третьих лиц к учётным данным вашего брокера не смущает? Нет никаких гарантий, что этого не случится.
avatar
Bishop, брокер и дата центр могут жить отдельно
avatar

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

 

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

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

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

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

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

Надо вот так так так, понятно?
А вот так как тут в посте написано не надо.
Мы не ищем легких путей!

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

Ну! За котов! 
avatar

теги блога Kot_Begemot

....все тэги



UPDONW
Новый дизайн