错误、漏洞、问题 - 页 1669

 

MQ5程序在执行结束后,是否总是自动对其创建的所有句柄进行IndicatorRelease?

或者是否可以通过脚本通过IndicatorCreate运行指标,然后通过全局变量 传递其句柄以进一步处理指标?

 

https://www.mql5.com/ru/docs/basis/preprosessor/compilation

恒定

类型

描述

测试员_指示器

绳子

自定义指标的名称,格式为 "indicator_name.ex5"。如果相应的参数被指定为常数字符串,测试所需的指标将从iCustom() 函数调用中自动确定。对于其他情况(使用IndicatorCreate()函数 或在指定指标名称的参数中使用非常数字符串),该属性应该是

IndicatorCreate - 几乎(对输入参数的数量没有限制)粗制滥造?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
如果在iCustom+ChartIndicatorAdd之后调用IndicatrorRelease,会错误地返回true。正确。
 
fxsaber:
仪表是什么?
我们昨天讨论了这个问题,第1687页。:)但最好从第1686页的这个帖子中读到:https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 顺便说一下,那个人也在回答你的问题。只是事实证明,这个计划是这样的。调用指标的请求转到终端。也就是说,专家顾问或脚本不直接调用指标,终端作为中介。终端检查该指标是否已经以指定的参数存在。如果是这样,它将返回给调用该指标的程序,一个指向已经存在的指标的句柄(链接)。而在它的终端底土中,它在计数器中标明有这个指标的另一次调用。也就是说,它记录了这个指标有多少个手柄被返回。当有人做了IndicatorRelease,并不意味着其他用相同参数调用同一指标的人不再需要这个指标了。因此,终端机将计数器减少了一个,但却让指标处于激活状态,因为有其他人在使用它。这将持续到计数器被清零为止。当计数器被清零时,终端将从RAM中永久地删除该指标。
如果你试图创建一个包含IndicatorRelease的代码,但不调用指标本身,你将无法编译它,因为你必须向IndicatorRelease传递一个句柄,但如果你不从程序中调用指标,你将得不到句柄。
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 评论: 8
  • www.mql5.com
Форум трейдеров MQL5.community
 

BlackTomcat:
Вчера обсуждали, страница 1687. :) Но читать лучше вот с этого сообщения на 1686-й странице: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Кстати, человек на Ваш же вопрос отвечал. Просто получается, что схема такая. Запрос на вызов индикатора попадает в Терминал. Т.е. советник или скрипт не вызывают индикатор напрямую, терминал выступает посредником. В терминале происходит проверка, существует ли уже такой индикатор с указанными параметрами. Если да, то он возвращает программе, вызвавшей индикатор, хэндл (ссылку) на уже существующий индикатор. А в своих терминальных недрах помечает в счётчике, что был ещё один вызов на данный индикатор. Т.е. он ведёт учёт, сколько хэндлов на данный индикатор вернул. Когда кто-то делает IndicatorRelease, это не значит, что остальным, кто вызвал этот же индикатор с такими же параметрами, этот индикатор больше не нужен. Поэтому Терминал уменьшает счётчик на единицу, но оставляет индикатор активным, потому-что им ещё кто-то пользуется.

谢谢你!这变成了一个很大的节约。

如果你试图创建代码,其中包含IndicatorRelease,但不包含对指标本身的调用,我想,你将无法编译,因为你将需要向IndicatorRelease传递一个句柄,如果指标没有从程序中被调用,你将无法得到这个句柄。

该句柄可以通过全局变量传递。因此,有可能使用它。
 
fxsaber:


我可以通过全局变量传递手柄。因此,使用它是很有可能的。
你不一定要通过它。:)或者至少不要对以这种方式获得的句柄调用 IndicatorRelease()。如果你这样做,这将是你的错误,而不是语言错误,你同意吗?
 
Sergei Vladimirov:
而你没有。:)或者至少不要对以这种方式获得的句柄调用 IndicatorRelease()。如果你这样做,这将是你的错误,但不是语言的错误,你同意吗?

我将为自由市场写一个坏标签,在某一点上,它将只是通过整个正的int范围,并为每一个尝试 IndicatorRelease。

这样的脚本将涵盖所有使用iCustom而不使用ChartIndicatorAdd 的终端的专家顾问和指标。

 

同样,这将是你故意的行为,而不是语言错误。你为什么要这样写?

顺便说一下,这次谈话是从你的问题开始的,即在使用指示器手柄之前如何检查它。好吧,你不能检查它,但在试图使用一个封闭指标的句柄时,你会得到错误4807--只要在每次调用CopyBuffer() 后跟踪它,如果它返回-1。

 
fxsaber:
我可以通过全局变量传递手柄。所以很有可能使用它。
嗯...全局变量 用于什么?终端还是EA?我从来没有使用过终端的变量,所以我不打算讨论它。而至于EA的全局变量,是主要的方式。如果指标在OnInit中被初始化,但IndicatorRelease在OnDeinit中发生,那么只有全局变量(EA)我们才会传递手柄。
 
A100:
执行错误:'无效的指针访问'(*)
你的A::a在这里指的是什么?
原因: