Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность MQL5.community у тебя на ладони. Заходи в раздел Стена!
gora
37
gora 2014.06.23 12:29 

Добрый день!

Подскажите пж-ста убогому, как обработать ошибки связи с сервером (типа ERR_NO_CONNECTION) , это когда в правом нижнем углу терминал пишет: Нет связи.

Проблема в том, что когда вылезает такая ошибка, программа перестает работать везде и код вида:

void OnTick()
{
  if (GetLastError() == 6) Alert("Нет связи");
}

не работает...

Vitalie Postolache
11038
Vitalie Postolache 2014.06.23 12:50  
Конечно не работает, тиков-то нет. В ОнТаймер надо обрывы связи засовывать.
gora
37
gora 2014.06.23 13:09  
evillive:
Конечно не работает, тиков-то нет. В ОнТаймер надо обрывы связи засовывать.

Пасиба!

Будем копать ОнТаймер

Paladin80
705
Paladin80 2014.06.23 17:19  
gora:

Добрый день!

Подскажите пж-ста убогому, как обработать ошибки связи с сервером (типа ERR_NO_CONNECTION) , это когда в правом нижнем углу терминал пишет: Нет связи.

Проблема в том, что когда вылезает такая ошибка, программа перестает работать везде и код вида:

void OnTick()
{
  if (GetLastError() == 6) Alert("Нет связи");
}

не работает...

Я в свои советники в начале делаю следующее:

void OnTick()
  {
//---
   if(!IsConnected())
     { Comment("\n No connection!"); return; }
   if(IsTradeContextBusy())
     { Comment("\n Trade flow is busy. Wait..."); Sleep(2*1000); return; }

//--- ...
  }
Vitalie Postolache
11038
Vitalie Postolache 2014.06.23 21:12  
paladin80:

Я в свои советники в начале делаю следующее:



А тик не пришёл...
Paladin80
705
Paladin80 2014.06.24 06:57  
evillive:

А тик не пришёл...
Тоже правда. Тогда OnTimer().
Mislaid
554
Mislaid 2014.06.24 13:08  
paladin80:
Тоже правда. Тогда OnTimer().

Набросал, не обработчик, конечно, а индикатор.

//+------------------------------------------------------------------+
//|                                                 CheckConnect.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

input int NoTicks = 60; // сообщать при отсутствии котировок, секунд

int  TimeDifference;
string ObjName = "InfoConnect";
string variant[ 4 ] = { "", "Not connected", "Trade context is busy", "Ticks delay"};

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
   EventSetTimer( 5 );
   TimeDifference = (int)TimeLocal() - (int)TimeCurrent();
   
   return(INIT_SUCCEEDED);
}
void OnDeinit( const int reason )
{
   ObjectDelete( ObjName );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
//---
   TimeDifference = (int)TimeLocal() - (int)TimeCurrent();
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   int event;
   event = CheckConnection();   
   CreateLabels( event );
}
//+------------------------------------------------------------------+

int CheckConnection()
{
   int event = 0;
   int TimeDifferenceCurrent;
      
   TimeDifferenceCurrent = (int)TimeLocal() - (int)TimeCurrent();
   TimeDifference = MathMin( TimeDifference, TimeDifferenceCurrent);

   if ( !IsConnected() ) event = 1;
   else if ( IsTradeContextBusy() ) event = 2;
        else if ( TimeDifferenceCurrent - TimeDifference > NoTicks ) event = 3;
   return( event );
}

void CreateLabels( int situation )
{
   string InfoText;
   int ChartWindow;

   ChartWindow = ObjectFind( ObjName );
   if ( ChartWindow < 0 )
   {
      ObjectCreate( ObjName, OBJ_LABEL, 0, 0, 0);
      ObjectSet( ObjName, OBJPROP_CORNER, 1);
      ObjectSet( ObjName, OBJPROP_XDISTANCE, 12);
      ObjectSet( ObjName, OBJPROP_YDISTANCE, 24);
   }
   
   InfoText = variant[ situation ];
   ObjectSetText( ObjName, InfoText, 12, "Arial Rounded MT Bold", LawnGreen);
   
}
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий