如果该指标对您不起作用。而您的交易终端的 MetaEditor 在编译带有该指标的文件时显示了此类错误信息(例如,在为MetaTrader5 的第 1150 版编译时):
编译并运行该指标
1. 复制该函数并将其添加到指标代码的末尾:
//+------------------------------------------------------------------+ //| 按对象名称中的通用前缀删除对象 || //||(如果需要,还有对象类型):| //| 2014 (最后修改: 14.07.2015), Dina Paches | | //|https://login.mql5.com/ru/users/dipach || //+------------------------------------------------------------------+ //| string prefix_obj = 对象名称中的常用前缀 //| long chart_ID = 图表标识符 || //| int sub_window=-1 = 窗口索引| //| int type=-1 = 对象类型(或用 | 代替 int - 对象类型)。 //| 枚举 ENUM_OBJECT)| //| int start_pos=-1 = 共用前缀子串在 | 中的起始位置。 //| 对象名称| //+------------------------------------------------------------------+ void ObDeleteN(string prefix_obj,int chart_ID=0,int sub_window=-1, int type=-1,int start_pos=0) { int quantObj=ObjectsTotal(chart_ID,sub_window,type); if(quantObj>0) { int count=0; int prefixLen=StringLen(prefix_obj); string name[]; ArrayResize(name,quantObj,quantObj+1); ArraySetAsSeries(name,true); for(int i=quantObj;i>=0;i--) { string objNameX=ObjectName(chart_ID,i,sub_window,type); string findValue=StringSubstr(objNameX,start_pos,prefixLen); if(StringCompare(findValue,prefix_obj,true)==0) { count=count+1; name[count-1]=objNameX; } } if(count>0) { ArrayResize(name,count,count+1); for(int i=count-1;i>=0; i--) { ObjectDelete(chart_ID,name[i]); } } } else return; } //+------------------------------------------------------------------+
2. 2. 在代码的OnDeinit() 和OnChartEvent() 部分的这一行前加上双斜线"//":
ObjectsDeleteAll(0,prefixObj,0,-1);
3. 复制这一行并将其放入指标代码中(将其放在上面一行的下面,由于上面一行在代码中出现了两次,因此应将这一行放在两个地方):
ObDeleteN(prefixObj,0,0);
4. 这样,功能变体不起作用的代码部分(例如,在第 1150 版中)的代码将如下所示:
//ObjectsDeleteAll(0,prefixObj,0,-1); ObDeleteN(prefixObj,0,0);
5. 然后,编译代码。错误信息将消失,指标将可在 MetaTrader5 版本 1150 的图表上运行。
附/附注: 如果您有任何问题,请在此处讨论或发送私人消息。
唉......我的灵魂就像掉了一块石头。幸运的是,"寻找的人总会找到的"(c) 这次起作用了。
我终于找到了上述函数变体的原型。
现在我可以说,非常感谢 教科书 作者科瓦廖夫、阿尔乔姆 和我不知道名字的7777877 所提供的详细方案。
附/附注: 在我自己解析这个函数的原型、了解其含义并进行实验时,我曾一度没有从 MQL4 中保存(不是故意的!)它的源代码,在此基础上,它最终被编译并以不同形式用于我在 MQL4 和 MQL5 中的代码。 我以前未公开或公开发布过该函数(或其其他变体)的代码。
我记得,我在网站上非常不幸地偶然发现了作品/搜索不起作用(或者是我的搜索,正如我现在意识到的那样,是错误的),这时我的良知提醒我去寻找来源。特别是,我记得我在论坛上看到过关于该计划的信息,但我不记得教科书。因此,我把这件事推到了 "以后"。
因此,在尊重他人工作的前提下,如果可能的话,我尽量立即复制信息,从哪里/从谁那里获取的信息。
因此,我由衷地庆幸,在没有任何外界提示或提醒的情况下,我自己找到了这一功能的主要来源--原型。
请公布修改后的指标代码,这对我来说是一片黑暗的森林,但我非常需要它!我自己搞不定。如果不难的话,请提供 mt5!!!! 的编译文件!
Kodobase中的指标版本已更改为1.01版,并已做了修改,现在可直接从该指标页面下载。
在考虑替换代码时,我设法删除了我的解释:
在 1.01 版中,ObjectsDeleteAll() 函数被另一个函数取代,该函数用于按名称前缀删除对象,运行速度更快,这有助于提高代码性能。
因此,在从第 1150 版正式过渡到另一个版本后(该版本发布时,ObjectsDeleteAll() 函数按名称前缀删除对象的功能尚未在文档中修复),最好将指标代码的版本更改为使用ObjectsDeleteAll() 的版本:
我更新了该指标的代码。其中包括,检测到并纠正了在图表上 开关显示指标线时 的错误(在关闭后开关显示线不起作用时存在问题)。
当前版本:1.39
我发现在 MT5(1.39 版)的这一指标代码中,没有添加类似 MT4 指标代码中在 prev_calculated=0 时重新计算数值的附加功能。也就是说,在使用1.39 版时,可能会出现在 prev_calculated=0 时指标表中出现零值的情况。
对不起。
现在,我已将新版本(1.42) 发送给大家。
由于 CodeBase 版主很忙,更新可能不会很快发布,因此我暂时将更正后的版本附在这里。
非常感谢 CodeBase 版主。
代码已于今天下午更新至1.42 版
附/附注:我删除了上面附带的文件。
昨天发布了1.45 版更新(我现在才登录)。
主要内容:我替换了从图表中删除指标的功能--修正了其中一个输入参数的值。


ID 精简信息 MA:
指标显示均线 (MA) 数值, 与数值之间的差价以及与 MA 之间的差价。
作者: Dina Paches