В этом разделе описан ряд функций, определяющих текущее состояние клиентского терминала и состояние окружения выполняемой MQL4-программы
GetLastError
int GetLastError()
Функция возвращает код последней ошибки, после чего значение внутренней переменной last_error, в которой хранится код последней ошибки обнуляется, после чего последующий вызов GetLastError() вернет значение 0.
Пример:
int err;
int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);
if(handle
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;
// подготовка к рестарту.
} //...
}