Меню

Пересканирование сервера

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

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


 

Пересканирование.mq4  Запуск скрипта советником.mq4  WinUser32.mqh

Перейти вверх

Добавить комментарий


Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

C чего начать

Типы

Анализ

Обучение

Инвестиции

«Поделиться»

18+

обновить