После введения утренней торговой сессии проблема автоматического запуска торгового ПО стала особенно актуальна.
Хорошее решение предложил
Евгений Логунов в своей статье
«Простой автологин за 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-файл при помощи любого компилятора, удалить из проекта личные данные и пользоваться программой на здоровье.
Нах городить огород с запуском/остановом квика?
Рулят, если только Tier 3 =) То есть DataSpace. Но зараза дорого.
А иначе, они почему то приходят в самый не подходящий момент: «ой извините, сегодня ночью тех работы», «ой извините у нас железяка слетела и это на 3 недели», «ой, извините мы вас переводим на другой тариф», ну и тд. Речь и про виртуалки и про физический.
То что вам предложили смотреть таблицу сделок — это путь «и так сойдет» с привязкой к ситуации. Например, в клиринг на срочке сессия будет не активна, а лента сделок все равно может обновляться из за ммвб и валютки. Либо в конце вечерки какой нибудь тухлой пятницы сделки могут не идти секундами и робот примет решение об отключении.
Таким путем в алго лучше не идти, это багорассадник и как правило это ведет к убыткам.
А зачем их выключать накануне?
вот выдержка из Википедии: Windows API представляет собой множество функций, структур данных и числовых констант, следующих соглашениям языка Си.
С++ это метапрограммирование и ООП. А здесь, чистый С.
Если торговый терминал не может импортировать в себя расписания торгов — это говно, а не терминал, IMHO.
Не хочу никого рекламировать, но даже элементарный TSLab легко организует торго по расписанию. Есть и более продвинутые варианты.
С уважением
Коллеги, сталкивался ли кто-то с такой проблемой? Квик не всегда автоматически соединяется с сервером. Брокер Открытие.
Квик включен на сервере круглосуточно. Однако ночью коннект пропадает (возможно перегружают или выключают сервера). На утро квик не всегда автоматически восстанавливает коннект, хотя все настройки выставлены (см.скрин
).
Вопрос был в том, что с утра не всегда происходит автоматически переподключение.
Иногда просто висит жетый кружок и все.
У меня 12 виртуалок, на некоторых все подключается, на отдельных не всегда. Настройки идентичны.
bstone, все на одной машине, на одном хосте.
Ну вот сегодня все сами автоматически подключились. Какая-то нестабильная ситуация.
krolix, ок.
спасибо, попробую поиграть с временем подключения.
liwihelp.com/sistema/avtomaticheskoe_vklyuchenie_kompyutera.html
Bishop, если об этом думать, то берите не VDS, а ставьте свою личную железку в стойку. Причем жесткий диск можно зашифровать предварительно.
Гарантий нет нигде и никогда. Даже просматривая с телефона СЛ Вы не можете быть уверены, что зловредная машинка не отправляет Ваши логины/пароли сами-знаете-кому.
у меня сервер пока дома.
Для снижения шума снял вентилятор с видеокарты, на процессоре скорость вращения минимальная, регулируется через ПО, на блоке питания вентилятор запитал вместо 12В на 5В. Жесткий диск SSD M2.
Тихо :)
Дмитрий Овчинников, сейчас есть блоки питания без вентилляторов.
И если процессор взять негорячий, то кулер тоже можно поставить пассивный.
Можно, но тогда это будет не сервер, а неттоп какой-то. У меня Зион 12/24 ядерный.
Не проще ли арендовать VPS server, который работает круглосуточно без проблем ?
А в lua прописать условие запуска по времени торгов. А в quik настроить восстанавливать соединение и тоже указать время торгов.
Надо вот так так так, понятно?
А вот так как тут в посте написано не надо.
У каждого есть свой путь. У каждого путника есть попутчики.
Хорошо, когда щедрые коты делятся с теми, кто выбрал такой же путь.
Ну! За котов!