MT4, автоматизация выполнения скрипта на многих счетах

 

Коротко о задаче: есть пул счетов больше сотни. С каждым нужно сделать определённую операцию (с этим проблем нет). Проблема есть с переключением счетов.

В первой итерации я поступал следующим образом: производил авторизацию, запускал скрипт, переходил к следующему счету.

После чего решил сделать из скрипта сову и процесс стал чуть быстрее: авторизовался, подождал, перешел к следующему счету.

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

Я дошел пока до такого: сгенерировать N конфиг-файлов и написать скрипт на питоне, который бы запускал терминал с авторизацией на счете номер n, ждал некоторое время, убивал бы процесс, переходил к следующему. К сожалению, при поверхностном ознакомлении с опцией "конфигурация при запуске", не получилось заставить терминал запуститься и подключиться к указанному счёту. По памяти, конфиг был таким:

login=NNNNNN

password=PPPPPPPPPP 

Запускал как

terminal.exe configname.ini

Предложения? 

 

Это должно работать, делал когда-то такое.

Проверяйте свой конфиг и указание пути к нему при запуске терминала.

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

Конфиги, кстати, можно тоже генерировать.

 
Andrey Khatimlianskii:

Это должно работать, делал когда-то такое.

Проверяйте свой конфиг и указание пути к нему при запуске терминала.

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

Конфиги, кстати, можно тоже генерировать.

Можете привести всё-таки пример вызова терминала с данным конфигом? Если, допустим, терминал установлен в папке x:\foo и конфиг лежит в x:\foo\bar,  исходя из документации, правильным является вызов

x:\foo>terminal.exe bar\config.ini

 Верно? 

На счёт генерации - само собой, конфиги буду генерировать автоматом. 

 
Anton Ivanov:

Можете привести всё-таки пример вызова терминала с данным конфигом? Если, допустим, терминал установлен в папке x:\foo и конфиг лежит в x:\foo\bar,  исходя из документации, правильным является вызов

Я запускал терминал из своего приложения, указывая относительный путь к терминалу ("..\..\..\terminal.exe") и относительный (но уже от корня терминала) - к конфигу ("MQL4\Files\Config.ini")

И то и то - в кавычках.

 

Лет пять назад делал на WinAPI во внешней программе прогон по счетам (заказ был на очередной мониторинг счетов). Причём "в несколько потоков" - N терминалов запускалось, у каждого выполнялся скрипт выгрузки информации, а после этого делался (как раз таки на WinAPI) переход к следующему счёту. Принцип был примерно такой:

1) Эмулируем Файл/Подключиться к торговому счёту (раньше вроде назывался этот пункт "Логин")/Вбиваем логин и пароль/OK.
2) Подождать либо XX секунд (если логин/пароль некорректные или сервер недоступен), либо пока скрипт не выполнится.
3) Перейти к п. 1 для следующего счёта.
Ну и раз в YY часов перезапускаем терминалы во избежание утечек памяти.

Работало даже довольно бодро для ~тысячи счетов (как мы автоматизировали открытие тысячи демок у нескольких брокеров это отдельная песня) :)

 
в хелпе все расписано, и даже пример конфига есть.
 
Sergey Eremin:

Лет пять назад делал на WinAPI во внешней программе прогон по счетам (заказ был на очередной мониторинг счетов). Причём "в несколько потоков" - N терминалов запускалось, у каждого выполнялся скрипт выгрузки информации, а после этого делался (как раз таки на WinAPI) переход к следующему счёту. Принцип был примерно такой:

1) Эмулируем Файл/Подключиться к торговому счёту (раньше вроде назывался этот пункт "Логин")/Вбиваем логин и пароль/OK.
2) Подождать либо XX секунд (если логин/пароль некорректные или сервер недоступен), либо пока скрипт не выполнится.
3) Перейти к п. 1 для следующего счёта.
Ну и раз в YY часов перезапускаем терминалы во избежание утечек памяти.

Работало даже довольно бодро для ~тысячи счетов (как мы автоматизировали открытие тысячи демок у нескольких брокеров это отдельная песня) :)

К сожалению, не знаю WinAPI.

Rustamzhan Salidzhanov:
в хелпе все расписано, и даже пример конфига есть.

Именно этот пример я и взял за основу, сменил номер счета, пароль, убрал лишние поля и не получил нужного результата. Завтра попробую разобраться более вдумчиво, попробую указать абсолютные пути, может хоть так съест.

 
Anton Ivanov:

К сожалению, не знаю WinAPI.

Именно этот пример я и взял за основу, сменил номер счета, пароль, убрал лишние поля и не получил нужного результата. Завтра попробую разобраться более вдумчиво, попробую указать абсолютные пути, может хоть так съест.

   Какого именно "результата" не получили - терминал не заводиться ? заводится но не правильно ?

   если второе то вы должны положить файл конфига в папку данных терминала адрес этой папки вываливается в логе терминала третьей строкой при каждом ручном запуске.

 https://www.mql5.com/ru/articles/1388 

Структура данных в MetaTrader 4 build 600 и выше
Структура данных в MetaTrader 4 build 600 и выше
  • 2014.02.17
  • MetaQuotes Software Corp.
  • www.mql5.com
Начиная с 600 билда MetaTarder 4, изменилась структура, а также место хранения файлов клиентского терминала. Теперь MQL4-программы разнесены по отдельным каталогам в зависимости от типа программы (эксперты, индикаторы, скрипты). Данные терминала в большинстве случаев теперь хранятся в специальном каталоге данных отдельно от места установки терминала. В данной статье мы подробно опишем, каким образом осуществляется перенос данных, а также причины введения такой системы хранения.
 
Rustamzhan Salidzhanov:

   Какого именно "результата" не получили - терминал не заводиться ? заводится но не правильно ?

   если второе то вы должны положить файл конфига в папку данных терминала адрес этой папки вываливается в логе терминала третьей строкой при каждом ручном запуске.

 https://www.mql5.com/ru/articles/1388 

Первой ошибкой было рамзещение конфигов в папке, куда установлен терминал. Совсем забыл, что часть файлов перенесли в другое место.

Второй - параметры в конфигах оказались case-sensitive 

Разобрался и с тем, и с другим: прописал абсолютные пути от греха подальше, сами конфиги забил валидными данными, вроде бы начало работать как ожидается. Всем спасибо за помощь.