Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 4366
- Рейтинг:
- Опубликован:
- 2011.09.08 09:55
- Обновлен:
- 2014.04.21 14:55
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Скрипт делал для себя, были разные версии на этом форуме решения этой задачи но у всех чего то не хватало, решил все объединить в один скрипт, чтобы учитывал по максимуму возможности МКЛ.
Скрипт сканирует сервера в случае обрыва связи, или ошибки №6, если не помогает делает перелогинирование счета.1) Скрипт "Пересканирование" положить в папку expert->scripts скомпилировать, вешать на график его не обязательно это сделает советник.
2) Советник "Запуск скрипта советником" положить в папку expert затем скомпилировать, вешаете советник на график евро/доллара советник установит скрипт на график, на других символах графика советник не устанавливает скрипт.
3) WinUser32.mqh закиньте в папку expert->include, она у вас есть стандартная но лучше положить эту от Zhunko иначе может не сработать скрипт.
Можно перетащить код с советника в свой советник будет устанавливать с вашего советника, в советнике можно поменять символ на любой который вы используете символ. Работа выставления скрипта советником по символу сделана для не допущения дублирования скрипта с разных графиков.
Важно! В сервисе->настройки->советники терминала МТ4 - нужно убрать галку, "отключить советники при смене счета"
Советник
//+------------------------------------------------------------------+ //| Запуск скрипта советником.mq4 | //| Martingeil© 2011, 01 июля | //| fx.09@mail.ru | //+------------------------------------------------------------------+ #property copyright "Martingeil© 2011, 01 июля" #property link "fx.09@mail.ru" int init(){return(0);} #import "user32.dll" int RegisterWindowMessageA(string lpstring); int PostMessageA( int hWnd, int Msg, int wParam, string lParam ); #import int start() { if(Symbol()=="EURUSD"){//Символ инструмента int hwnd = WindowHandle(Symbol(), Period()); int MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); //вызов скрипта по названию PostMessageA(hwnd, MT4InternalMsg, 16, "Пересканирование");} return(0); } //+------------------------------------------------------------------+
Скрипт
//+------------------------------------------------------------------+ //| Пересканирование.mq4 | //| Скрипт | //| Martingeil© 2011, 01 июля | //| fx.09@mail.ru | //+------------------------------------------------------------------+ #property copyright "Martingeil© 2011, 01 июля" #property link "fx.09@mail.ru" // Скрипт сканирует сервера в случае обрыва связи, или ошибки №6, если не помогает делает перелогинирование счета. // Скрипт установится автоматически на график советником - "Запуск скрипта советником". // В сервисе->настройки->советники терминала МТ4 - нужно убрать галку, "отключить советники при смене счета" #include <WinUser32.mqh> // Стандартная библиотека #define RESCANSERVERS_COMMAND_CODE 37400 #define OPENLOGINWINDOW_COMMAND_CODE 35429 #define PAUSE 1000 //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ void start() { bool flag=true; //------------------------------------ while(!IsStopped()){ Comment("Пересканирование"); if(!flag) { Print("Есть контакт. Время сервера: ",TimeToStr(TimeCurrent())); Comment("Пересканирование\nЕсть контакт.\nВремя сервера: ",TimeToStr(TimeCurrent())); flag=true; } //if(!flag) // если соединения нет, или если есть ошибка "6", а IsConnected()==true while(!IsConnected()&&!IsStopped()||GetLastError()==6) { if(flag) { Print("Нет соединения с сервером. Время сервера: ",TimeToStr(TimeCurrent())," Ошибка:",GetLastError()); Comment("Пересканирование\nНет соединения с сервером.\nВремя сервера: ", TimeToStr(TimeCurrent()),"\nОшибка:",GetLastError()); flag=false; } //if(flag) ReScanServers(); // пересканируем серверы Sleep(10000); // подождем коннекта if(!IsConnected()||GetLastError()==6) // если соединения нет, или ошибка №6 { ReLoginAccount(); // перелогин счета Sleep(10000); // подождем коннекта }//if(!IsConnected()) }//while (!IsConnected()&&!IsStopped()) Sleep(20000); }//while(!IsStopped()) Comment(""); return; }//void start() // Пересканируем серверы ------------------------------------------------ int ReScanServers(){ int hwindow=GetAncestor(WindowHandle(Symbol(),Period()),2); // получаем хендл главного окна Comment("Пересканирование\n+++ ПереСканируем Серверы +++"); // выведем на чарт сообщение if(hwindow!=0) { // нашли главное окно // посылаем сообщение "пересканировать серверы" return(PostMessageA(hwindow,WM_COMMAND,RESCANSERVERS_COMMAND_CODE,0)); } return(-1); } // Перелогинемся -------------------------------------------------------- int ReLoginAccount() { int hwnd=GetAncestor(WindowHandle(Symbol(),Period()),2); // получаем хендл главного окна Comment("Пересканирование\n+++ ПереЛогин +++ "); // выведем на чарт сообщение PostMessageA(hwnd,WM_COMMAND,OPENLOGINWINDOW_COMMAND_CODE,0); // открыли окно ввода Логина и Пароля. Sleep(PAUSE); // делаем паузу, ждем hwnd=GetLastActivePopup(hwnd); // нашли хэндл окна ввода Логина и Пароля hwnd=GetDlgItem(hwnd,0x1); // нашли хэндл кнопки ЛОГИН Sleep(PAUSE); // делаем паузу, ждем SendMessageA(hwnd,BM_CLICK,0,0); // нажали кнопку ЛОГИН return(0); } //------------------------------------------------------------------------

Пример реализации визуальной системы управления

Помимо тралла и перевода в без убыток, советник может выставлять первоначальный стоплосс и тейкпрофит

Сетка отложенных limit-ордеров с учётом текущей убыточной позиции (последняя версия серии Net, LimitNet+Stop, LimitNet+Stop^atom).

Советник открывает сделки на основе сопротивлений и поддержек (как на пробое, так и на развороте).