对象模拟器 - MetaTrader 5 库
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。
//+------------------------------------------------------------------+ //| 对象模拟器的使用示例 | //+------------------------------------------------------------------+ #includeCObjectEmul _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
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
