Обработка ошибок связи с сервером

 

Добрый день!

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

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

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

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

 
Конечно не работает, тиков-то нет. В ОнТаймер надо обрывы связи засовывать.
 
evillive:
Конечно не работает, тиков-то нет. В ОнТаймер надо обрывы связи засовывать.

Пасиба!

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

 
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; }

//--- ...
  }
 
paladin80:

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



А тик не пришёл...
 
evillive:

А тик не пришёл...
Тоже правда. Тогда OnTimer().
 
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);
   
}