Errores, fallos, preguntas - página 1669

 

¿El programa MQ5 siempre realiza automáticamente el IndicatorRelease de todas las manijas que creó después de la ejecución?

¿O es posible ejecutar el indicador a través de IndicatorCreate por un script, y luego pasar su mango a través de variables globales para el trabajo posterior con el indicador?

 

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

Constante

Tipo

Descripción

indicador_de_prueba

cadena

Nombre del indicador personalizado en el formato "nombre_del_indicador.ex5".Los indicadores necesarios para las pruebas se determinan automáticamente a partir de la llamada a la funcióniCustom(), si el parámetro correspondiente se especifica como una cadena constante. Para otros casos (uso de la funciónIndicatorCreate() o uso de una cadena no constante en el parámetro que especifica el nombre del indicador) esta propiedad debe ser

IndicatorCreate - casi (sin restricciones en el número de parámetros de entrada) rudimento?

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Основы языка / Препроцессор / Свойства программ (#property) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
IndicatrorRelease devuelve erróneamente true si se llama después de iCustom+ChartIndicatorAdd. Correcto.
 
fxsaber:
¿Qué es el contador?
Lo discutimos ayer, página 1687. :) Pero es mejor leer desde este post en la página 1686: https://www.mql5.com/ru/forum/1111/page1686#comment_2790746 Por cierto, el hombre estaba respondiendo a tu misma pregunta. Resulta que el esquema es así. La petición de llamar al indicador va a la Terminal. Es decir, el Asesor Experto o el script no llama directamente al indicador, el terminal actúa como intermediario. El terminal comprueba si este indicador ya existe con los parámetros especificados. Si es así, devuelve al programa, que ha llamado al indicador, un handle (enlace) al indicador ya existente. Y en su subsuelo terminal marca en el contador que hubo otra llamada de este indicador. Es decir, registra cuántas asas se han devuelto para este indicador. Cuando alguien hace el IndicatorRelease, no significa que otros que llamaron al mismo indicador con los mismos parámetros ya no necesitan este indicador. Por lo tanto, el Terminal disminuye el contador en uno, pero deja el indicador activo, porque alguien lo utiliza. Esto continuará hasta que el contador se ponga a cero. Cuando el contador se ponga a cero, el Terminal borrará definitivamente el indicador de la RAM.
Si intentas crear un código que contenga IndicatorRelease, pero que no llame al propio indicador, no lo compilarás, porque tienes que pasar un handle a IndicatorRelease, pero si no llamas al indicador desde el programa, no obtendrás el handle.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • comentarios: 8
  • www.mql5.com
Форум трейдеров MQL5.community
 

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

Gracias. Esto resulta ser un gran ahorro.

Si intentas crear un código que contenga IndicatorRelease, pero que no contenga la llamada del propio indicador, creo que no lo compilarás, porque necesitarás pasar el handle a IndicatorRelease, y si el indicador no ha sido llamado desde el programa, no obtendrás el handle.

El mango se puede pasar a través de variables globales. Por lo tanto, es posible utilizarlo.
 
fxsaber:


Puedo pasar la manija a través de variables globales. Por lo tanto, es muy posible utilizarlo.
No tienes que aprobarlo. :) O al menos no llame a IndicatorRelease() para el mango obtenido de esta manera. Si lo haces, será un error tuyo, no un fallo del lenguaje, ¿no te parece?
 
Sergei Vladimirov:
Y tú no. :) O, al menos, no llame a IndicatorRelease() para un manejador obtenido de esta manera. Si lo hace, será un error suyo, pero no un fallo de la lengua, ¿está de acuerdo?

Y escribiré una pestaña mala para el Mercado libre, que en un momento dado se limitará a recorrer todo el rango de int positivos y a probar IndicatorRelease para cada uno.

Dicho script cubrirá todos los Asesores Expertos e indicadores del terminal que utilizaron iCustom sin ChartIndicatorAdd.

 

De nuevo, esa sería su acción deliberada, no un error del lenguaje. ¿Por qué escribiste eso?

Por cierto, esta conversación comenzó con tu pregunta sobre cómo comprobar el mango del indicador antes de usarlo. Bueno, no se puede comprobar, pero al intentar usar un handle de un indicador cerrado, se obtendrá el error 4807 - sólo hay que rastrearlo después de cada llamada de CopyBuffer(), si devuelve -1.

 
fxsaber:
Puedo pasar el mango a través de variables globales. Así que es muy posible utilizarlo.
Um... ¿Variables globales para qué? ¿Terminal o EA? Nunca he trabajado con las variables de Terminal, así que no voy a discutirlo. Y en cuanto a las variables globales de EA, es la principal forma de hacerlo. Si los indicadores se inicializan en OnInit, pero el IndicatorRelease ocurre en OnDeinit, entonces sólo con las variables globales (EA) pasaremos los manejadores.
 
A100:
Error de ejecución: 'acceso de puntero no válido' (*)
¿A qué apunta A::a aquí?