BlackTomcat: Вчера обсуждали, страница 1687. :) Но читать лучше вот с этого сообщения на 1686-й странице: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Кстати, человек на Ваш же вопрос отвечал. Просто получается, что схема такая. Запрос на вызов индикатора попадает в Терминал. Т.е. советник или скрипт не вызывают индикатор напрямую, терминал выступает посредником. В терминале происходит проверка, существует ли уже такой индикатор с указанными параметрами. Если да, то он возвращает программе, вызвавшей индикатор, хэндл (ссылку) на уже существующий индикатор. А в своих терминальных недрах помечает в счётчике, что был ещё один вызов на данный индикатор. Т.е. он ведёт учёт, сколько хэндлов на данный индикатор вернул. Когда кто-то делает IndicatorRelease, это не значит, что остальным, кто вызвал этот же индикатор с такими же параметрами, этот индикатор больше не нужен. Поэтому Терминал уменьшает счётчик на единицу, но оставляет индикатор активным, потому-что им ещё кто-то пользуется.
MQ5程序在执行结束后,是否总是自动对其创建的所有句柄进行IndicatorRelease?
或者是否可以通过脚本通过IndicatorCreate运行指标,然后通过全局变量 传递其句柄以进一步处理指标?
https://www.mql5.com/ru/docs/basis/preprosessor/compilation
恒定
类型
描述
测试员_指示器
绳子
自定义指标的名称,格式为 "indicator_name.ex5"。如果相应的参数被指定为常数字符串,测试所需的指标将从iCustom() 函数调用中自动确定。对于其他情况(使用IndicatorCreate()函数 或在指定指标名称的参数中使用非常数字符串),该属性应该是
IndicatorCreate - 几乎(对输入参数的数量没有限制)粗制滥造?
仪表是什么?
如果你试图创建一个包含IndicatorRelease的代码,但不调用指标本身,你将无法编译它,因为你必须向IndicatorRelease传递一个句柄,但如果你不从程序中调用指标,你将得不到句柄。
BlackTomcat:
Вчера обсуждали, страница 1687. :) Но читать лучше вот с этого сообщения на 1686-й странице: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Кстати, человек на Ваш же вопрос отвечал. Просто получается, что схема такая. Запрос на вызов индикатора попадает в Терминал. Т.е. советник или скрипт не вызывают индикатор напрямую, терминал выступает посредником. В терминале происходит проверка, существует ли уже такой индикатор с указанными параметрами. Если да, то он возвращает программе, вызвавшей индикатор, хэндл (ссылку) на уже существующий индикатор. А в своих терминальных недрах помечает в счётчике, что был ещё один вызов на данный индикатор. Т.е. он ведёт учёт, сколько хэндлов на данный индикатор вернул. Когда кто-то делает IndicatorRelease, это не значит, что остальным, кто вызвал этот же индикатор с такими же параметрами, этот индикатор больше не нужен. Поэтому Терминал уменьшает счётчик на единицу, но оставляет индикатор активным, потому-что им ещё кто-то пользуется.
谢谢你!这变成了一个很大的节约。
如果你试图创建代码,其中包含IndicatorRelease,但不包含对指标本身的调用,我想,你将无法编译,因为你将需要向IndicatorRelease传递一个句柄,如果指标没有从程序中被调用,你将无法得到这个句柄。
我可以通过全局变量传递手柄。因此,使用它是很有可能的。而你没有。:)或者至少不要对以这种方式获得的句柄调用 IndicatorRelease()。如果你这样做,这将是你的错误,但不是语言的错误,你同意吗?
我将为自由市场写一个坏标签,在某一点上,它将只是通过整个正的int范围,并为每一个尝试 IndicatorRelease。
这样的脚本将涵盖所有使用iCustom而不使用ChartIndicatorAdd 的终端的专家顾问和指标。
同样,这将是你故意的行为,而不是语言错误。你为什么要这样写?
顺便说一下,这次谈话是从你的问题开始的,即在使用指示器手柄之前如何检查它。好吧,你不能检查它,但在试图使用一个封闭指标的句柄时,你会得到错误4807--只要在每次调用CopyBuffer() 后跟踪它,如果它返回-1。
我可以通过全局变量传递手柄。所以很有可能使用它。
执行错误:'无效的指针访问'(*)