Состояние терминала

В этом разделе описан ряд функций, определяющих текущее состояние клиентского терминала и состояние окружения выполняемой MQL4-программы

 

GetLastError

int GetLastError()

Функция возвращает код последней ошибки, после чего значение внутренней переменной last_error, в которой хранится код последней ошибки обнуляется, после чего последующий вызов GetLastError() вернет значение 0.

Пример:

int err;  
int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);  
if(handle<1)    
{
     err=GetLastError();
     Print("error(",err,"): ",ErrorDescription(err));
     return(0);
}

 

IsConnected

bool IsConnected()

Возвращает текущее состояние основного соединения терминала Metatrader с сервером, по которому производится загрузка данных.

Возвращает TRUE если связь с сервером установлена, FALSE — связь с сервером отсутствует или прервана.

Пример:

if(!IsConnected())    
{
     Print("Связь отсутствует!");
     return(0);    
}  // Тело скрипта, нуждающегося в открытом подключении  // ...

 

IsDemo

bool IsDemo()

Возвращает признак работы на демонстрационном счете.

Возвращаемое значение: TRUE, если программа работает на демонстрационном счете, иначе возвращает FALSE.

Пример:

if(IsDemo())
  Print("Я работаю на демонстрационном счете");
else Print("Я работаю на реальном счете");

 

IsDllsAllowed

bool IsDllsAllowed()

Возвращает информацию о возможности вызова внешних функций из DLL.

Возвращаемое значение: TRUE, если DLL вызов функции разрешены для эксперта, в обратном случае возвращает FALSE.
См. также IsLibrariesAllowed(), IsTradeAllowed().

Пример:

#import "user32.dll"

int     MessageBoxA(int hWnd, string szText, string szCaption,int nType);
...  
...  
if(IsDllsAllowed()==false)    
{
     Print("Вызов из библиотек (DLL) невозможен. Эксперт не может выполняться.");
     return(0);    
}  // Тело Эксперта, вызывающее внешние функции DLL  MessageBoxA(0,"an message","Message",MB_OK);

 

IsExpertEnabled

bool IsExpertEnabled()

Возвращает информацию о возможности запуска экспертов.

Возвращает TRUE, если в терминале Metatrader разрешен запуск торговых советников, в противном случае возвращает FALSE.

Пример:

while(!IsStopped()) 
{ 
   ... 
   if(!IsExpertEnabled()) break; 
}

IsLibrariesAllowed

bool IsLibrariesAllowed()

Возвращает информацию о возможности вызова библиотек.

Возвращает TRUE, если эксперт может назвать библиотечную функцию, иначе возвращает FALSE.
См. также IsDllsAllowed(), IsTradeAllowed().

Пример:

#import "somelibrary.ex4"     
int somefunc();
  ...
  ...  
if(IsLibrariesAllowed()==false)    
{
     Print("Библиотечные вызовы запрещены.");
     return(0);    
}  // Тело Эксперта, вызывающее внешние функции DLL  somefunc();

 

IsOptimization

bool IsOptimization()

Возвращает информацию о работе эксперта в процессе оптимизации параметров тестирования.

Возвращается TRUE, если эксперт работает в режиме оптимизации тестирования, иначе возвращает FALSE.

Пример:

if(IsOptimization())
  return(0);

 

IsStopped

bool IsStopped()

Возвращается TRUE, если торговый робот или скрипт получила команду на завершение своей работы, иначе возвращает FALSE. Программа может работать еще порядка 3-х секунд прежде, чем торговый терминал принудительно завершит ее выполнение.

Пример:

while(expr!=false)    
{
     if(IsStopped()==true)
        return(0);
     // цикл с длительным временем исполнения
     // ...    
}

 

IsTesting

bool IsTesting()

Возвращается TRUE, если эксперт работает в режиме тестирования, иначе возвращает FALSE.

Пример:

if(IsTesting())
   Print("Тестирование эксперта");

 

IsTradeAllowed

bool IsTradeAllowed()

Возвращается TRUE, если эксперту разрешено торговать и поток для выполнения торговых операций свободен, иначе возвращает FALSE.
См. также IsDllsAllowed(), IsLibrariesAllowed(), IsTradeContextBusy().

Пример:

if(IsTradeAllowed())
  Print("Торговля разрешена");

 

IsTradeContextBusy

bool IsTradeContextBusy()

Возвращается TRUE, если поток для выполнения торговых операций занят, иначе возвращает FALSE.
См. также IsTradeAllowed().

Пример:

if(IsTradeContextBusy())
  Print("Торговый поток занят. Подождите");

 

IsVisualMode

bool IsVisualMode()

Возвращается TRUE, если эксперт тестируется в режиме визуализации, иначе возвращает FALSE.

Пример:

if(IsVisualMode())
  Comment("Визуализация включена");

 

UninitializeReason

int UninitializeReason()
Возвращает код причины завершения экспертов, пользовательских индикаторов и скриптов. Возвращаемые значения могут быть одним из кодов деинициализации. Эту функцию можно также вызывать в функции init() для анализа причин деинициализации предыдущего запуска.

Пример:

// пример
void OnDeinit(const int reason)   
{
     switch(UninitializeReason())
     {
        case REASON_CHARTCLOSE:
        case REASON_REMOVE:
             CleanUp();
             break;
        // очистка и освобождение ресурсов.
        case REASON_RECOMPILE:
        case REASON_CHARTCHANGE:
        case REASON_PARAMETERS:
        case REASON_ACCOUNT:
             StoreData();
             break;
             // подготовка к рестарту.       
      }      //...    
}