Смотри, как бесплатно скачать роботов
Ищи нас в Twitter!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Скрипты

Пересканирование сервера - скрипт для MetaTrader 4

Просмотров:
4230
Рейтинг:
(4)
Опубликован:
2011.09.08 09:55
Обновлен:
2014.04.21 14:55
MQL5 Фриланс Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Скрипт делал для себя, были разные версии на этом форуме решения этой задачи но у всех чего то не хватало, решил все объединить в один скрипт, чтобы учитывал по максимуму возможности МКЛ.

Скрипт сканирует сервера в случае обрыва связи, или ошибки №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);
}
//------------------------------------------------------------------------

Калькулятор Калькулятор

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

Облегченная версия TrailingStop Облегченная версия TrailingStop

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

Net^atom Net^atom

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

maximus (9-ая версия) maximus (9-ая версия)

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