这组函数可以检测客户端的当前状态,包括运行MQL4程序的环境状态。
- GetLastError() – 获取最新产生的错误信息
- IsConnected() – 判断连接状态
- IsDemo() – 判断是否是模拟账户
- IsDllsAllowed() – 判断是否允许调用DLL函数
- IsExpertEnabled() – 判断智能交易是否开启
- IsLibrariesAllowed() – 判断是否允许调用库函数
- IsOptimization() – 判断是否在优化模式中运行
- IsStopped() – 判断智能交易是否中止
- IsTesting() – 判断是否在测试模式中运行
- IsTradeAllowed() – 判断是否允许交易
- IsTradeContextBusy() – 判断交易是否忙
- IsVisualMode() – 判断是否在可视模式下测试
- UninitializeReason() – 获取未初始化原因
GetLastError() – 获取最新产生的错误信息
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); }
IsConnected() – 判断连接状态
bool IsConnected()
本函数返回在客户端和执行数据中转任务的服务器之间主连接状态。如果成功建立到服务器的连接,返回true,否则,返回false。
示例:
if(!IsConnected()) { Print("没有连接到服务器!"); return(0); } // 需要建立连接才能执行下面的代码 // ...
IsDemo() – 判断是否是模拟账户
bool IsDemo()
如果智能交易在模拟账户里运行,返回true,否则,返回false。
示例:
if(IsDemo()) Print("在模拟账户运行"); else Print("在真实账户运行");
IsDllsAllowed() – 判断是否允许调用DLL函数
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);
IsExpertEnabled() – 判断智能交易是否开启
bool IsExpertEnabled()
如果智能交易开启,返回true,否则,返回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。在 客户端强制中止执行 之前,程序还能继续运行2.5秒。
示例:
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()中调用,用于分析上次运行出错原因。
示例:
// 这是范例 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; // 准备重新开始 } //... }
暂无评论内容