美文网首页
环境函数

环境函数

作者: 牛在汇上飞 | 来源:发表于2018-10-23 12:01 被阅读0次

客户端状态检测函数
int GetLastError() 获取最新错误信息码

示例:

int err;
int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);
if(handle<1)
{
err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
return(0);
}

//----------错误描述子------------+

string ErrorDescription(int 错码)
{
string 原因;

switch(错码){
//--从服务器返回的错误
case 0: 原因= "交易成功 "; break;
case 1: 原因= "OrderModify() 未改变原值"; break;
case 2: 原因= "常规错误 如需重起客户端等,需查清"; break;
case 3: 原因= "无效的交易参数,如货币对,或未知业务,无些单号等"; break;
case 4: 原因= "交易服务器繁忙,需稍后重试或休息"; break;
case 5: 原因= "MT4版本太旧"; break;
case 6: 原因= "没有连接服务器 应该用IsConnected函数)过5秒后重试"; break;
case 7: 原因= "没有足够权限进行相应操作"; break;
case 8: 原因= "请求过于频繁,查看是否需修改程序"; break;
case 9: 原因= "交易运行故障"; break;
case 64: 原因= "账户被禁止"; break;
case 65: 原因= "本账户无效"; break;
case 128: 原因= "交易超时,请查看是否存在未修改或未删除的定单"; break;
case 129: 原因= "无效开仓价格,应用RefreshRates函数重试,或修改程序逻辑。"; break;
case 130: 原因= "OrderSend()的参数出错:止损或止赢离现价太近而无效"; break;
case 131: 原因= "无效的下单手数"; break;
case 132: 原因= "市场关闭,等开市后再试"; break;
case 133: 原因= "交易被禁止"; break;
case 134: 原因= "资金不足"; break;
case 135: 原因= "价格已 改变,应用RefreshRates()函数重试 "; break;
case 136: 原因= "脱离报价,可能因市价变化太快使交易商暂停报价或市场尚未启动"; break;
case 137: 原因= "经纪繁忙"; break;
case 138: 原因= "重新开价,可能是请求的报价已过时,或者买价和卖价混淆,请用RefreshRates()函数刷新数据再试 或修改程序"; break;
case 139: 原因= "订单被锁定,请修改程序逻辑。"; break;
case 140: 原因= "只允许开多仓,禁止开空仓"; break;
case 141: 原因= "过多请求,须减少请求次数,程序逻辑需要修改"; break;
case 142: 原因= "定单按次序排列。在交易执行期间,碰巧连接断开或重新连接时,此代码和错误代码128一样处理。"; break;
case 143: 原因= "定单已经被执行交易商接受。是客户端和交易服务器之间一个代码。处理方法参照错误128。"; break;
case 144: 原因= "在手动确认期间,定单已经被客户放弃。是客户端和交易服务器之间一个代码。"; break;
case 145: 原因= "因价格过于接近市价,故操作被拒绝 延时15秒后,用RefreshRates更新数据再试"; break;
case 146: 原因= "交易线程忙,只有在IsTradeContextBusy()函数返回FALSE后重试。"; break;
case 147: 原因= "交易商拒绝使用挂单有效期,"; break;
case 148: 原因= "开即时单和挂单总数超限,须平消一些后重试"; break;
case 149: 原因= "禁止对冲"; break;
case 150: 原因= "先入先出规则被禁止"; break;

  //--从mql4中获得的错误
  case 4000: 原因= "没有错误(未有过代码)";   break;
  case 4001: 原因= "错误的函数指针";   break;
  case 4002: 原因= "数组索引超出范围";   break;
  case 4003: 原因= "对于调用堆栈储存器函数没有足够内存";break;
  case 4004: 原因= "循环堆栈储存器溢出";   break;
  case 4005: 原因= "对于堆栈储存器参量没有内存";   break;
  case 4006: 原因= "对于字行参量没有足够内存 ";   break;
  case 4007: 原因= "对于字行没有足够内存 ";   break;
  case 4008: 原因= "没有初始字行 ";   break;
  case 4009: 原因= "在数组中没有初始字串符 ";   break;
  case 4010: 原因= "对于数组没有内存 ";   break;
  case 4011: 原因= "字行过长 ";   break;
  case 4012: 原因= "余数划分为零 ";   break;
  case 4013: 原因= "零划分 ";   break;
  case 4014: 原因= "不明命令";   break;
  case 4015: 原因= "错误转换(没有常规错误) ";   break;
  case 4016: 原因= "没有初始数组 ";   break;
  case 4017: 原因= "禁止调用DLL  ";   break;
  case 4018: 原因= "库文件不能被加载";   break;
  case 4019: 原因= "不能调用函数 ";   break;
  case 4020: 原因= "禁止调用智能交易函数 ";   break;
  case 4021: 原因= "对于来自函数的字行没有足够内存 ";   break;
  case 4022: 原因= "系统繁忙 (没有常规错误) ";   break;
  case 4050: 原因= "函数的参数数量错误";   break;
  case 4051: 原因= "函数的参数无效 ";   break;
  case 4052: 原因= "字行函数内部错误 ";   break;
  case 4053: 原因= "一些数组错误 ";   break;
  case 4054: 原因= "应用不正确数组 ";   break;
  case 4055: 原因= "c自定义指标错误 ";   break;
  case 4056: 原因= "不匹配的数组";   break;
  case 4057: 原因= "全局变量处理出错 ";   break;
  case 4058: 原因= "找不到全局变量";   break;
  case 4059: 原因= "函数在测试模式中被禁止使用";   break;
  case 4060: 原因= "函数没有被确认";   break;
  case 4061: 原因= "发送邮件错误 ";   break;
  case 4062: 原因= "参数应为字符串变量";   break;
  case 4063: 原因= "参数应为整型变量";   break;
  case 4064: 原因= "参数应为浮点类型变量";   break;
  case 4065: 原因= "参数应为数组";   break;
  case 4066: 原因= "所查询的历史数据在更新状态当中";   break;
//case 4067: 原因= "err trade error   ◆交易函数有错误 ";break;
  case 4099: 原因= "文件结束 ";   break;
  case 4100: 原因= "一些文件错误 ";   break;
  case 4101: 原因= "错误文件名称 ";   break;
  case 4102: 原因= "打开文件过多 ";   break;
  case 4103: 原因= "不能打开文件 ";   break;
  case 4104: 原因= "不匹配的文件访问 ";   break;
  case 4105: 原因= "未选中定单 ";   break;
  case 4106: 原因= "不明货币对 ";   break;
  case 4107: 原因= "无效价格";   break;
  case 4108: 原因= "无效定单编码 ";   break;
  case 4109: 原因= "不允许交易";   break;
  case 4110: 原因= "不允许做多";   break;
  case 4111: 原因= "不允许做空 ";   break;
  case 4200: 原因= "物件已经存在 ";   break;
  case 4201: 原因= "未知的物件属性 ";   break;
  case 4202: 原因= "物件不存在";   break;
  case 4203: 原因= "未知的物件类型";   break;
  case 4204: 原因= "没有物件名称";   break;
  case 4205: 原因= "物件坐标错误 ";   break;
  case 4206: 原因= "没有指定子窗口";   break;
  default:   原因= "未知的错误 ";
 }

return(原因);
}

//-----------------------------------------+

bool IsConnected()

判断客户端和服务器之间的 连接状态
示例:

if(!IsConnected())
{
Print("Connection is broken!");
return(0);
}
// Expert body that need opened connection
// ...

bool IsDemo()

判断是否是 模拟账户
示例:

if(IsDemo()) Print("I am working on demo account");
else Print("I am working on real account");

bool IsDllsAllowed()

判断是否允许调用 DLL函数
示例:

import "user32.dll"

int MessageBoxA(int hWnd ,string szText, string szCaption,int nType);
...
...
if(IsDllsAllowed()==false)
{
Print("DLL call is not allowed. Experts cannot run.");
return(0);
}
// expert body that calls external DLL functions
MessageBoxA(0,"an message","Message",MB_OK);

bool IsExpertEnabled()

判断是否 开启智能交易

示例:

如果while(!IsStopped())

{

...

if(!IsExpertEnabled()) break;

}

bool IsLibrariesAllowed()
判断是否允许调用 库函数
示例:

import "somelibrary.ex4"

int somefunc();
...
...
if(IsLibrariesAllowed()==false)
{
Print("Library call is not allowed. Experts cannot run.");
return(0);
}
// expert body that calls external DLL functions
somefunc();

bool IsOptimization()

判断智能交易是否是在策略测试器的 优化模式中运行

示例:

if(IsOptimization()) return(0);

bool IsStopped()
判断智能交易是否中止
如果程序(一个智能交易程序或一个脚本程序)得到了停止运行的命令,返回true,否则,返回false。

在客户端强制中止执行 之前,程序还能继续运行2.5秒。

示例:

while(expr!=false)
{
if(IsStopped()==true) return(0);
// long time procesing cycle
// ...
}

bool IsTesting()

判断智能交易是否处于 测试模式运行

示例:

if(IsTesting()) Print("I am testing now");

bool IsTradeAllowed()

判断是否允许交易。

如果智能交易程序允许交易,而且执行交易的线程没有被占用,返回true

示例:

if(IsTradeAllowed()) Print("Trade allowed");

bool IsTradeContextBusy()

判断交易是否 繁忙。

如果执行交易的线程被另一个智能交易占用,返回true

示例:

if(IsTradeContextBusy()) Print("交易繁忙中,请稍等");

bool IsVisualMode()

判断智能交易是否在可视模式下测试运行。

示例:

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;  // 准备重新开始

 }

//...

}

相关文章

  • 环境函数

    客户端状态检测函数int GetLastError() 获取最新错误信息码 示例: int err;int h...

  • 微信小程序云开发-云函数-创建云函数

    一、检查云函数环境 检查云函数环境时候,鼠标右键点击查看当前环境。如果存在多个云开发环境,要确保云函数的当前环境要...

  • 作用域链

    每个函数都有自己的执行环境.当执行流进入一个函数时,函数的环境就会被推入一个环境栈中.而在函数执行之后,栈将其环境...

  • 闭包

    0 执行环境和作用域 每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。当函数...

  • JavaScript上下文

    JavaScript中有三种运行环境 全局环境:JavaScript最开始运行的默认环境 函数环境:函数执行时,函...

  • JavaScript 执行机制

    全局环境:JavaScript代码运行起来会首先进入该环境 函数环境:当函数被调用执行时,会进入当前函数中执行代码...

  • js闭包、执行环境、作用域链

    执行环境 执行环境:函数的运行环境 js的全局执行环境:window对象=》活动对象 1、每个函数都有一个执行环境...

  • 38. 闭包

    闭包就是函数的运行环境是一个封闭的环境。在环境中有自由变量。也可以理解为函数中的函数。kotlin 中可以把函数当...

  • iOS Block

    block本质block是封装了函数调用以及函数调用环境的OC对象(它内部也有个isa指针) 函数调用环境:函数调...

  • python学习笔记十(函数式编程)

    函数式编程 闭包 由函数以及环境变量构成闭包,环境变量不受外部影响。 在函数内部定义另一个函数,内部函数使用包含其...

网友评论

      本文标题:环境函数

      本文链接:https://www.haomeiwen.com/subject/zbttzftx.html