Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не понимаешь, как работает сервис Торговых Сигналов? Прочти соответствующую статью!
igortrade
36
igortrade 2014.06.21 19:57 

Добрый день помогите пожалуйста, уже где только не смотрел и что только не пробовал..  (работаю на Windows 7, mql4, MT4 build 646)

Задача следующая есть конфигурационный ini файл: optimise.ini в котором задано запустить тестер и провести оптимизацию. Если из командной строки (пуск->выполнить ) пишем:

G:\торговые платформы\MT4_new\terminal.exe "G:\торговые платформы\MT4_new\optimise.ini" 

тогда запускается терминал и запускаются настройки, которые заданы в ini файле. В настройках ini файла происходит автоматизация советника за данный промежуток времени. Теперь хочу запустить тестер при помощи функции  ShellExecuteW:

ShellExecuteW(0,"Open","terminal.exe","optimise.ini","G:\торговые платформы\MT4_new",3); 

При этом терминал запускается, а запуск оптимизации, который прописан в ini файле не происходит. Помогите пожалуйста разобраться как правильно набрать эту функцию.

Vadim Zhunko
5221
Vadim Zhunko 2014.06.21 23:49  

Потому что 4-й параметр:

If lpFile specifies an executable file, this parameter is a pointer to a null-terminated string that specifies the parameters to be passed to the application. The format of this string is determined by the verb that is to be invoked. If lpFile specifies a document file, lpParameters should be NULL.

Если lpFile указывает на исполняемый файл, этот параметр-указатель на оканчивающуюся нулем строку, которая задает параметры, которые будут переданы приложению. Формат этой строки определяется глаголом, который должен быть вызван. Если lpFile задает файл документа, lpParameters должен быть NULL. 

igortrade
36
igortrade 2014.06.22 04:28  
Zhunko:

Потому что 4-й параметр:

 

Согласно материалам из статьи https://www.mql5.com/ru/articles/1467 именно определение ShellExecuteA(0, "Open", "terminal.exe", optimise.ini, "D:\Program Files\Forex Best Trade Station", 3); работало. В новом build 646 возникает много заморочек и не работает ShellExecuteW(0,"Open","terminal.exe","optimise.ini","G:\торговые платформы\MT4_new",3) . вообщем, тестер запускается, а автоматизация нет..

Пробовал в четвертом параметре где стоит lpParameters поставить NULL, но непонятно теперь как именно прописать lpFile с параметром  ini файла.. Как написано "lpFile указывает на исполняемый файл, этот параметр-указатель на оканчивающуюся нулем строку, которая задает параметры, которые будут переданы приложению".. но как это сделать в коде?
Vadim Zhunko
5221
Vadim Zhunko 2014.06.22 11:21  
Не знаю. Надо у Метаквотов спросить.
Slawa
Модератор
6681
Slawa 2014.06.24 07:42  

Проблему решили.

1. При написании обратного слэша его надо удваивать

ShellExecuteW(0,"Open","terminal.exe","optimise.ini","G:\\торговые платформы\\MT4_new",3); 


2.  Можно (и лучше) использовать полную спецификацию пути к конфигурационному файлу. В этом случае необходимо путь ограничивать кавычками, так как он содержит пробелы при том что является частью cmdline

ShellExecuteW(0,"Open","terminal.exe","\"G:\\торговые платформы\\MT4_new\\optimise.ini\"","G:\\торговые платформы\\MT4_new",3); 


3. В следующем билде в журнале терминала будет сообщение "Started with configuration file 'bla-bla-bla'" в случае его использования.

Igor Durkin
3526
Igor Durkin 2014.06.24 12:25  

Доброго дня,

А как открыть страничку в браузере?  Раньше открывалась через  ShellExecuteА, например :

string ip = "https://docs.mql4.com/mql4changes";

ShellExecuteA( 0 , 0 , ip , "" , 0 , 5 ); 

o_O
Модератор
23316
o_O 2014.06.24 12:32  
igorad:

Доброго дня,

А как открыть страничку в браузере?  Раньше открывалась через  ShellExecuteА, например :


теперь надо юникод - ShellExecuteW
Igor Durkin
3526
Igor Durkin 2014.06.24 13:45  
Спасибо, это понятно. Только как оно будет выглядеть, т.к. с теми же параметрами не работает.
Slawa
Модератор
6681
Slawa 2014.06.24 14:00  
igorad:
Спасибо, это понятно. Только как оно будет выглядеть, т.к. с теми же параметрами не работает.

ShellExecuteW(0, NULL, ip, "", NULL, 5);
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий