欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

对象模拟器 - MetaTrader 5 库

author emer | 515 人阅读 | 0 人评论 |

MetaTrader 4 允许在测试时使用 Expert Advisor 中的对象。包含对象的图表将在测试结束时打开。箭头使得观察 EA 交易可以在哪里方便地执行操作,但这种情况不允许这样做。有很多使用示例。

与 MetaTrader 4 版本相比,我们无法在 MetaTrader 5 中使用测试对象。这种情况不适合我!好吧,我们来解决一下。

现在,EA 交易在不使用 MetaTrader 5 中的对象的情况下进行创建。对象模拟器允许从对象获取数据,但我不建议这样做,由于测试过程有时会变慢,并且与官方功能存在一些差异。

仅使用对象模拟器来显示测试后图表中的对象。

将 ObjectEmul_indicator 指示器添加到 tester.tpl 测试器模板中。

对于那些不知道如何做的人:

“设置”选项卡上的“打开图表”按钮已在 MetaTrader 5 策略测试器中删除。如果测试中的 EA 交易未执行交易操作,则图表不会自动显示。您必须切换到“回溯测试”,右键单击并选择“打开图表”。

添加到 EA 交易的主文件中:

#include CObjectEmul _objs;

并将标准函数的 Object 更改为 _objs.Objct。

要通过编辑器中的对象函数运行帮助,您只需在“Obj”中添加字母“e”ect”并按 F1。

//+------------------------------------------------------------------+
//|    对象模拟器的使用示例                         |
//+------------------------------------------------------------------+
#include CObjectEmul _objs;整数锯齿形调整浪;日期时间最后一栏=0;双倍的三角形价格[3];日期时间三角形时间[3];整数三角形索引=0;整数 初始化时()
  {
   锯齿形调整浪=定制_象征,_时期,“示例\\ZigZag”,5,5,3);
  数学兰德获取刻度数());
  返回0);
  }空白 勾选()
  {
  日期时间时间[];
  复制时间_象征,_时期,0,15,时间);
  如果(最后一栏==时间[0])返回;
   最后一根柱=时间[0];

  双倍的 zgbuffer[];
   如果复制缓冲区(锯齿形调整浪,0,0,15,zgbuffer)==0){打印“复制缓冲区(ZigZag)错误”);返回;}

  布尔值 first=真的;
  为了整数x=0,计数=数组大小(zgbuffer);x<计数 && 三角形索引<3;x++)
     {
      // 这里有问题,但我喜欢结果:)      如果(zgbuffer[x​​]>0&& 第一){第一=错误的; x+=3;}
      别的 如果(zgbuffer[x​​]>0&& (三角形索引==0||三角形价格[三角形索引-1]!=zgbuffer[x]))
        {
         trianglePrice[triangleIndex]=zgbuffer[x];
         triangleTime[triangleIndex]=时间[x];
         triangleIndex++;
        休息;
        }
      别的 如果(zgbuffer[x​​]>0休息;
     }

  如果(三角形索引<3返回;

  细绳对象名=“对象仿真_演示_”+(细绳)(整数)最后一个栏;////////////////////////////////////////////////////
// 对象模拟器

// 标准对象*() 类似物  如果(_objs.ObjctCreate(0,对象名称,OBJ_TRIANGLE,0,
      三角形时间[0],三角形价格[0],三角形时间[1],三角形价格[1]))
     {
      _objs.ObjctSetInteger(0,对象名称,OBJPROP_TIME,2,三角形时间[2]);
      _objs.ObjctSetDouble(0,对象名称,OBJPROP_PRICE,2,三角形价格[2]);
      _objs.ObjctSetInteger(0,对象名称,OBJPROP_COLOR,(数学兰德()%255)*(数学兰德()%255)*(数学兰德()%255));

      // 索引使用示例      整数索引=_objs.ObjctFindIndex(0,对象名);
      如果(索引>-1) _objs.ObjctSetIntegerIndex(索引,OBJPROP_FILL,0,真的);
     }
  别的 打印“对象创建错误”);// 对象模拟
////////////////////////////////////////////////////   三角形价格[0]=三角形价格[1];
   三角形时间[0]=三角形时间[1];
   三角形价格[1]=三角形价格[2];
   三角形时间[1]=三角形时间[2];
   三角形索引=2;
  }

变量

所有图形Object*()对象均实现,但具有 Objct*() 名称。但没有类似的文本设置字体(),文本输出()TextGetSize()

还有对象*索引()加快工作速度的功能:

为了避免重载的歧义,我必须为索引选择单独的函数。这些函数不会调用 ObjctFindIndex() 进行搜索和必须控制对象才能使用它们

对象集整数(0,“对象名称”,OBJPROP_STYLE,样式_DASH) == ObjctSetIntegerIndex(ObjctFindIndex(0,“对象名称”),OBJPROP_STYLE,样式_DASH);

LoadFile() 函数使用这些函数,但 Count() 函数显示所有对象的数量。

当然,在实施过程中有些事情应该解决,但我需要找到任何决定。当然,我会尝试更新这个库并希望得到社区的帮助。


附件下载

📎 objectemul_indicator.mq5 (0.92 KB)

📎 objectemul_script.mq5 (0.26 KB)

📎 objectemul_unittest_script.mq5 (11.99 KB)

📎 objectemul.mqh (34.25 KB)

Source: MQL5 #1583

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录