admin 发表于 2022-8-24 12:10:46

MQL4客户端状态检测相关函数

这组函数可以检测客户端的当前状态,包括运行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

luck88 发表于 2022-9-4 11:52:13

谢谢分享,好好学习一下:lol

support 发表于 2022-9-5 11:32:59

谢谢你的分享,有你社区会更精彩:lol
页: [1]
查看完整版本: MQL4客户端状态检测相关函数