这组函数可以检测客户端的目前状态,包含运行MQL4程序的环境状态。
- GetLastError() – 获取最新造成的错误信息
- IsConnected() – 分析连接状态
- IsDemo() – 分析能否是模拟账户
- IsDllsAllowed() – 分析能否允许调用DLL函数
- IsExpertEnabled() – 分析智能交易能否开启
- IsLibrariesAllowed() – 分析能否允许调用库函数
- IsOptimization() – 分析能否在优化模式中运行
- IsStopped() – 分析智能交易能否中止
- IsTesting() – 分析能否在试探模式中运行
- IsTradeAllowed() – 分析能否允许交易
- IsTradeContextBusy() – 分析交易能否忙
- IsVisualMode() – 分析能否在可视模式下试探
- UninitializeReason() – 获取未初始化原因
int GetLastError()
本函数先返回最新造成的错误信息,然后将保存出错代码的last_error变量值归零,所以,又一次调用GetLastError()函数将返回0。
示例:
int err; int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);if(handle<1) { err=GetLastError();Print("错误(",err,"): ",ErrorDescription(err));return(0);}
bool IsConnected()
本函数返回在客户端和实施报告中转任务的服务器之间主连接状态。假使成功建立到服务器的连接,返回true,否则,返回false。
示例:
if(!IsConnected()) { Print("没有连接到服务器!");return(0);} // 需要建立连接才可实施下面的代码 // ...
bool IsDemo()
假使智能交易在模拟账户里运行,返回true,否则,返回false。
示例:
if(IsDemo()) Print("在模拟账户运行");else Print("在真实账户运行");
bool IsDllsAllowed()
假使智能交易允许调用DLL函数,返回true,否则,返回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);
bool IsExpertEnabled()
假使智能交易开启,返回true,否则,返回false。
示例:
while(!IsStopped()) { ... if(!IsExpertEnabled()) break; }
bool IsLibrariesAllowed()
假使智能交易允许调用库函数,返回true,否则,返回false。
参见 IsDllsAllowed(), IsTradeAllowed().
示例:
#import "somelibrary.ex4" int somefunc();... ... if(IsLibrariesAllowed()==false) { Print("不允许调用报告库");return(0);} // 智能交易调用外部 DLL 函数 somefunc();
bool IsOptimization()
假使智能交易运行在策略试探器的优化模式,返回true,否则,返回false。
示例:
if(IsOptimization()) return(0);
bool IsStopped()
假使程序(一个智能交易程序或一个脚本程序)得到了停止运行的命令,返回true,否则,返回false。在 客户端强制中止实施 以前,程序还能继续运行2.5秒。
示例:
while(expr!=false) { if(IsStopped()==true) return(0);// 长时间运行循环 // ... }
bool IsTesting()
假使智能交易运行在试探模式中,返回true,否则,返回false。
示例:
if(IsTesting()) Print("试探中");
bool IsTradeAllowed()
假使智能交易程序允许交易,而且实施交易的线程没有被占用,返回true,否则,返回false。
参见 IsDllsAllowed(), IsLibrariesAllowed(), IsTradeContextBusy()
示例:
if(IsTradeAllowed()) Print("允许交易");
bool IsTradeContextBusy()
假使实施交易的线程被其他智能交易占用,返回true,否则,返回false。
参见 IsTradeAllowed()
示例:
if(IsTradeContextBusy()) Print("交易繁忙中,请稍等");
bool IsVisualMode()
假使智能交易运行在“可视模式”下执行试探,返回true,否则,返回false。
示例:
if(IsVisualMode()) Comment("可视模式开启");
int UninitializeReason()
返回智能交易、自定义指标和脚本的未初始化原因代码。返回值为 未初始化原因代码 之一。本函数同样可以在函数init()中调用,用于分析上次运行出错原因。
示例:
// 这是范例 int deinit() { switch(UninitializeReason()) { case REASON_CHARTCLOSE: case REASON_REMOVE: CleanUp();break; // 清理和所有资源重分配 case REASON_RECOMPILE: case REASON_CHARTCHANGE: case REASON_参数: case REASON_ACCOUNT: StoreData();break; // 准备从新开始 } //... }