В этом разделе описан ряд функций, определяющих текущее состояние клиентского терминала и состояние окружения выполняемой 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; // подготовка к рестарту. } //... }