- [АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4.
- [Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2.
- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Доброго всем времени суток! Я полный профан в языке, потому очень прошу помочь! Как запустить внешнее приложение Винды при совпадении текущей цены BID и текущего значения индикатора, который пишется в буфер на вывод? Помогите, пожалуйста!!!
//+------------------------------------------------------------------+ //| template.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- импорт функции из внешней DLL #import "shell32.dll" int ShellExecuteA(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd); #import //---- константы открытия\показа (параметр nShowCmd) #define SW_HIDE 0 #define SW_SHOWNORMAL 1 #define SW_NORMAL 1 #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE 3 #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 #define SW_FORCEMINIMIZE 11 #define SW_MAX 11 //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- запуск командной строки ShellExecuteA(WindowHandle(Symbol(),0),"open","cmd.exe",NULL,NULL,SW_SHOWNORMAL); //---- return(0); }Для того, чтобы этот код работал, необходимо разрешить импорт DLL в терминале:
Сервис -> Настройки -> Советники -> Разрешить импорт DLL.
Спасибо! Оно! Разобрался и присоединил к своему индюку!
Не знаю будете ли вы на этой ветке. Понимаю, что прошло много времени с момента опубликования скрипта. Но, может быть...
Ваш скрипт, это то, что я искал, сейчас вижу это сам написал бы не скоро, просто супер. Но есть проблемка которую не могу решить, helpa на
ф-ю ShellExecuteA в MetaEditore нет. Дело в том, что мне нужно, из советника или индикатора (в общем это не важно) запустить бат-файл.
Так вот скрипт видит бат-файл запускает его, но сам бат-файл не выполняет действия, которые в нем заложены. Причем запуская вручную он работает без проблем, но из советника запускается, но не выполняется. Не знаю, что нужно сделать, как его адаптировать под свои задачи, в скрипте только одна ф-я, helpa накоторую не могу найти. Помогите, пожалуйста, заранее спасибо!
startdata может Вы можете помоч?
Не знаю будете ли вы на этой ветке. Понимаю, что прошло много времени с момента опубликования скрипта. Но, может быть...
Ваш скрипт, это то, что я искал, сейчас вижу это сам написал бы не скоро, просто супер. Но есть проблемка которую не могу решить, helpa на
ф-ю ShellExecuteA в MetaEditore нет. Дело в том, что мне нужно, из советника или индикатора (в общем это не важно) запустить бат-файл.
Так вот скрипт видит бат-файл запускает его, но сам бат-файл не выполняет действия, которые в нем заложены. Причем запуская вручную он работает без проблем, но из советника запускается, но не выполняется. Не знаю, что нужно сделать, как его адаптировать под свои задачи, в скрипте только одна ф-я, helpa накоторую не могу найти. Помогите, пожалуйста, заранее спасибо!
К сожалению вы не представили исходный код скрипта, в котором запускается ваш bat-файл.
В примере представленном выше для запуска внешнего bat-файла необходимо только указать полный путь:
int start() { //---- запуск bat-файла ShellExecuteA(WindowHandle(Symbol(),0),"open","C:\sample.bat",NULL,NULL,SW_SHOWNORMAL); //---- return(0); }
Кстати существует альтернативный (более простой) способ запуска внешнего приложения (.exe, .bat ...)
из скрипта MQL: WinAPI функция WinExec()
//+------------------------------------------------------------------+ //| template.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- импорт функции из внешней DLL #import "kernel32.dll" int WinExec(string lpCmdLine,int uCmdShow); #import //---- константы открытия\показа (параметр uCmdShow) #define SW_HIDE 0 #define SW_SHOWNORMAL 1 #define SW_NORMAL 1 #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE 3 #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 #define SW_FORCEMINIMIZE 11 #define SW_MAX 11 //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- запуск bat-файла WinExec("C:\sample.bat",SW_SHOWNORMAL); //---- return(0); }
Не знаю будете ли вы на этой ветке. Понимаю, что прошло много времени с момента опубликования скрипта. Но, может быть...
Ваш скрипт, это то, что я искал, сейчас вижу это сам написал бы не скоро, просто супер. Но есть проблемка которую не могу решить, helpa на
ф-ю ShellExecuteA в MetaEditore нет. Дело в том, что мне нужно, из советника или индикатора (в общем это не важно) запустить бат-файл.
Так вот скрипт видит бат-файл запускает его, но сам бат-файл не выполняет действия, которые в нем заложены. Причем запуская вручную он работает без проблем, но из советника запускается, но не выполняется. Не знаю, что нужно сделать, как его адаптировать под свои задачи, в скрипте только одна ф-я, helpa накоторую не могу найти. Помогите, пожалуйста, заранее спасибо!
К сожалению вы не представили исходный код скрипта, в котором запускается ваш bat-файл.
В примере представленном выше для запуска внешнего bat-файла необходимо только указать полный путь:
int start() { //---- запуск bat-файла ShellExecuteA(WindowHandle(Symbol(),0),"open","C:\sample.bat",NULL,NULL,SW_SHOWNORMAL); //---- return(0); }
Кстати существует альтернативный (более простой) способ запуска внешнего приложения (.exe, .bat ...)
из скрипта MQL: WinAPI функция WinExec()
//+------------------------------------------------------------------+ //| template.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- импорт функции из внешней DLL #import "kernel32.dll" int WinExec(string lpCmdLine,int uCmdShow); #import //---- константы открытия\показа (параметр uCmdShow) #define SW_HIDE 0 #define SW_SHOWNORMAL 1 #define SW_NORMAL 1 #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE 3 #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 #define SW_FORCEMINIMIZE 11 #define SW_MAX 11 //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- запуск bat-файла WinExec("C:\sample.bat",SW_SHOWNORMAL); //---- return(0); }
Да, не ожидал получить ответы. Большое спасибо.
Скрипт не выложил, потому, что посчитал странным показывать Вам Ваш же скрипт, я там вставил только имя своего файла, так как было показано выше ShellExecuteA(WindowHandle(Symbol(),0),"open","cmd.exe",NULL,NULL,SW_SHOWNORMAL);, я не программист, напрягаюсь пишу скрипты для автоматизации своей работы, поэтому пишу все добуквенно как вижу. На других программерских форумах выкладывал скрипт, там тоже знающие сказали, что вопрос в полном пути к файлу. Сам файл лежал в папке Windows. Но меня сбило с толку то, что открывалось черное консольное окно. В бат-файл я вставил для проверки команду PAUSE, в консоли пишется нажмите любую клавишу, нажимаю, консоль исчезает и ничего не происходит. Но уверен, что проблемма решена, хотя проверить я это смогу только в понедельник.
Еще раз большое спасибо, также за новый вариант.
Еще хочу спросить, может есть какая-то фишка, что бы копировать созданный файл из стандартной дирректории одного терминала в другой. MQL4 это не позволяет, но может есть подобный вариант не MQL-скими ф-ми, Может эта же ShellExecuteА, только вместо "open" поставить "xcopy", но говорят это не надежно. И где вписать дирректорию назначения? Не знаю. Буду рад любой помощи.
С помощью WinAPI это возможно. Вот пример:
//+------------------------------------------------------------------+
//| template.mq4 |
//| Copyright © 2007, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//---- импорт API-функции из системной DLL
#import "kernel32.dll"
bool CopyFileA(string lpExistingFileName, string lpNewFileName, bool bFailIfExists);
#import
//+------------------------------------------------------------------+
//| Основная функция скрипта |
//+------------------------------------------------------------------+
int start()
{
/*
Функция копирует файл из одного указанного места в другое. Если файл существует,
то функция перезаписывает его. Старые данные при этом УНИЧТОЖАЮТСЯ. Если имя файла
содержит несуществующую директорию, то функция вернет ошибку.
Параметры:
lpExistingFileName - полное имя копируемого файла.
lpNewFileName - полный путь, куда будет скопирован исходный файл.
*/
bool bRetValue = CopyFileA("C:\Program Files\MetaTrader\experts\files\sample.txt","C:\sample.txt",false);
if(!bRetValue) Print("Ошибка копирования файла!");
}
//+------------------------------------------------------------------+ //| template.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //---- импорт функции из внешней DLL #import "kernel32.dll" int WinExec(string lpCmdLine,int uCmdShow); #import //---- константы открытия\показа (параметр uCmdShow) #define SW_HIDE 0 #define SW_SHOWNORMAL 1 #define SW_NORMAL 1 #define SW_SHOWMINIMIZED 2 #define SW_SHOWMAXIMIZED 3 #define SW_MAXIMIZE 3 #define SW_SHOWNOACTIVATE 4 #define SW_SHOW 5 #define SW_MINIMIZE 6 #define SW_SHOWMINNOACTIVE 7 #define SW_SHOWNA 8 #define SW_RESTORE 9 #define SW_SHOWDEFAULT 10 #define SW_FORCEMINIMIZE 11 #define SW_MAX 11 //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- запуск bat-файла WinExec("C:\sample.bat",SW_SHOWNORMAL); //---- return(0); }
Вопросы...
1. Зачем дефайнить если и без этого работает?
2. Чем обьяснить выбор чисел для дефайна, да ещё и с повторениями?
//+------------------------------------------------------------------+ //| Запуск приложения. Скрипт.mq4 | //+------------------------------------------------------------------+ #property show_inputs //---- импорт функции из внешней DLL #import "kernel32.dll" int WinExec(string lpCmdLine,int uCmdShow); #import //+------------------------------------------------------------------+ int start() { WinExec("c:\Program Files\Internet Explorer\Iexplore.exe",1); return(0); } //-------------------------------------------------------------------+
kombat понятное дело, ведь совершенству нет предела. А лишнее, что не надо уберем, главное работает.
У меня еще есть вопрос. Никак не получается в файле CSV прочитать последнюю строчку. Уж как я не крутил FileSeek не получается. Подробнее: после закрытия позиции вручную перебрасываю лог файл журнала в стандартную дирректорию, читаю советником последнюю строчку. Хочу взять от туда номер закрытого тикета, обьем, цены (может есть другая технология для сохранения этих данных в файл, пока ни чего другого не придумал).
Уверен все решается легко и просто. Помогите разобраться с файлоуказателем
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования