Close all Chart

 

Hola, Saludos: 

Estoy programando un script que ejecuta varias funciones:

1 cierra todos los charts abiertos menos uno.

2 abre un chart por cada activo forex.

3 aplico una plantilla a cada grafico.

4 elimino automaticamente los que no cumplen unas condiciones.

Problema:

todo esto se cumple perfectamente si el script se ejecuta desde el activo que se ha abierto en ultimo lugar. 

Si el script se ejecuta desde otro activo, cierra graficos desde el primero hasta el posterior al activo en que se ha ejecutado y se para, arrojando ("chart close failed, #4211).

Se para en cada grafico que he tenido activo tras la llamada automatica de charts.

Aclaración:

Si lo activo desde el ultimo chart abierto, lo realiza todo correctamente sin importar los objetos que he abierto en los charts anteriores.

Solicitud:

Alguien conoce una funcion que active el ultimo chart mediante programacion (porque no siempre se tiene claro cual de los charts es el ultimo)

 
mql4mrg:

Hola, Saludos: 

Estoy programando un script que ejecuta varias funciones:

1 cierra todos los charts abiertos menos uno.

2 abre un chart por cada activo forex.

3 aplico una plantilla a cada grafico.

4 elimino automaticamente los que no cumplen unas condiciones.

Problema:

todo esto se cumple perfectamente si el script se ejecuta desde el activo que se ha abierto en ultimo lugar. 

Si el script se ejecuta desde otro activo, cierra graficos desde el primero hasta el posterior al activo en que se ha ejecutado y se para, arrojando ("chart close failed, #4211).

Se para en cada grafico que he tenido activo tras la llamada automatica de charts.

Aclaración:

Si lo activo desde el ultimo chart abierto, lo realiza todo correctamente sin importar los objetos que he abierto en los charts anteriores.

Solicitud:

Alguien conoce una funcion que active el ultimo chart mediante programacion (porque no siempre se tiene claro cual de los charts es el ultimo)

Hola, no entendí del todo tu problema
Pero me da la impresión a mi, de que el script esta intentando cerrar incluso su propia ventana, y creo que es por eso que te da el error.

Pienso esto porque tal vez,  cuando se abre un chart nuevo, le asocia un ChartID, superior al anterior, 
Me imagino que estarás cerrando esos chartsID desde 0 hasta N, 
y entonces estarás "pasando" por el mismo chart abierto que esta ejecutando el script


Si es así, si quizás ese sea el problema, debes identificar el chart en el que quieres ejecutar el script, desde el mismo código, y omitirlo

Espero te sirva, o entonces amplíes la información

Saludos!!!

Puedes explicar con alguna imagen?


 
Miguel Antonio Rojas Martinez:

Hola, no entendí del todo tu problema
Pero me da la impresión a mi, de que el script esta intentando cerrar incluso su propia ventana, y creo que es por eso que te da el error.

Pienso esto porque tal vez,  cuando se abre un chart nuevo, le asocia un ChartID, superior al anterior, 
Me imagino que estarás cerrando esos chartsID desde 0 hasta N, 
y entonces estarás "pasando" por el mismo chart abierto que esta ejecutando el script


Si es así, si quizás ese sea el problema, debes identificar el chart en el que quieres ejecutar el script, desde el mismo código, y omitirlo

Espero te sirva, o entonces amplíes la información

Saludos!!!

Puedes explicar con alguna imagen?


Saludos Miguel Antonio: gracias por responder tan rapido. Si necesitas la imagen te la envío. Pero no creo que vaya a hacer falta porque has entendido bien el problema.

El problema es que empleando un bucle  "while", con las funciones ChartID() y ChartNext(), funciona perfectamente desde la ventana que tiene el ChartID() mas alto, porque empieza a eliminar de menor a mayor, pero como lo ejecute desde uno intermedio, se para al llegar al de activación. No encuentro un metodo más sencillo de exclusion de el de activacion de momento. Por eso mi pregunta es:

¿Existe alguna funcion en la que estando situado en el ChartID() 13025648560 pase el control al  13025648561  

Lo he intentado abriendo un nuevo elemento, porque normalmente se situa el control en el ultimo abierto, pero no se por que no funciona.

Conforme escribo esto se me esta ocurriendo hacer un array con los numeros de charts abiertos y como puedo pedir el array maximum y veré, ya os diré como ha ido. Pero de todas formas queria responder a tu atento interes. Saludos.



    


 

Amigo, 
cuando inicias el script capturas el ChartID,  en una variable,

Luego el codigo se empieza a ejecutar y cuando llegas  (con ChartNext())  a ese chartIdque has capturado, lo saltas, lo omites, y continua con los siguientes.



cuando lo resuelvas nos avisas

Saludos!!!

 
Miguel Antonio Rojas Martinez:

Amigo, 
cuando inicias el script capturas el ChartID,  en una variable,

Luego el codigo se empieza a ejecutar y cuando llegas  (con ChartNext())  a ese chartIdque has capturado, lo saltas, lo omites, y continua con los siguientes.



cuando lo resuelvas nos avisas

Saludos!!!

Correcto Miguel Antonio:

No he tenido siquiera que utilizar una variable nueva, tan solo he coolocado un condicionante IF { } que hace que en la sucesion dentro del bucle, cuando el valor de la variable "chart_corriente" que uso es igual al ChartID(), le asigno el ChartNext(chart_corriente) y automaticamente se lo salta, evitando el problema. Muchas gracias por tu inspiracion. Saludos.

Razón de la queja: