Buenas noches! ¿Es posible hacer un bucle en el script? De forma que al terminar de abrir los gráficos volviera a empezar, en lugar de terminar el trabajo.
En principio, se puede. ¿Cuántos ciclos hay que hacer? O como un caleidoscopio: ¿todo el día?
Bueno, un día entero sería mejor.....
En ese caso, necesitas un EA en el que llamar a todo el carrusel en OnTimer(). Me lo pensaré.
Añadido. Corregido el texto.
De todos modos, aquí está el Asesor Experto. Lo principal es recordar que es un poco problemático apagar/descargar el Asesor Experto cuando se muestran infinitamente los gráficos :) . Por lo tanto, permítame recordarle que este Asesor Experto se muestra en la ventana "Navegador":

Ah, aquí está el Asesor Experto:
//+------------------------------------------------------------------+ //|Chart_bringing_to_top.mq5 //|Copyright © 2016, Vladimir Karputov || //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2016, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" #property description "The indicator switches all open charts after a certain interval." //--- parámetro de entrada //--- parámetro de entrada input uchar Seconds=3; // intervalo // intervalo //--- bool IsCicle=false; // true - in cicle // true - in cicle //+------------------------------------------------------------------+ //| Función de inicialización experta| //+------------------------------------------------------------------+ int OnInit() { //--- crear temporizador if(Seconds<3) { MessageBox("Interval must be greater than 3 seconds"); EventSetTimer(3); } else EventSetTimer(Seconds); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Función de desinicialización experta| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destruir temporizador EventKillTimer(); } //+------------------------------------------------------------------+ //| Función tick experto| //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Función temporizador| //+------------------------------------------------------------------+ void OnTimer() { //--- if(IsCicle) return; IsCicle=true; //--- uchar temp_second; if(Seconds<3) temp_second=3; // variables para el ID del gráfico long currChart,prevChart=ChartFirst(); //--- Mostrar el primer gráfico //--- Mostrar el primer gráfico ChartBringToTop(prevChart); Sleep((int)MathAbs(temp_second*1000)); int i=0,limit=100; //Print("GráficoPrimero = ",GráficoSímbolo(gráficoprevio)," ID = ",gráficoprevio); // Probablemente no tengamos más de 100 gráficos abiertos // Ciertamente no tenemos más de 100 cartas abiertas while(i<limit)// { // A partir del anterior, obtenemos un nuevo gráfico // Obtener el nuevo ID del gráfico utilizando el ID del gráfico anterior currChart=ChartNext(prevChart); if(currChart<0) break; // Ha llegado al final de la lista de gráficos // Ha llegado al final de la lista de gráficos //Print(i," ",ChartSymbol(currChart)," ID =",currChart); ChartBringToTop(currChart); Sleep((int)MathAbs(temp_second*1000)); // Recordar el ID del gráfico actual para ChartNext() // Guardemos el ID del gráfico actual para el ChartNext() prevChart=currChart; // No olvidemos aumentar el contador // No olvides aumentar el contador i++; } IsCicle=false; } //+------------------------------------------------------------------+ //| Envía un comando al terminal para mostrar el gráfico encima de todos los demás gráficos. ||| //| Envía un comando al terminal para mostrar el gráfico por encima de todos los demás || //+------------------------------------------------------------------+ bool ChartBringToTop(const long chart_ID=0) { //--- restablecer el valor de error ResetLastError(); //--- mostrar el gráfico encima de todos los demás if(!ChartSetInteger(chart_ID,CHART_BRING_TO_TOP,0,true)) { //--- envía el mensaje de error al registro de "Expertos". Print(__FUNCTION__+", Error Code = ",GetLastError()); return(false); } ChartRedraw(chart_ID); //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+
Gracias por su prontitud. Pero el Asesor Experto no funciona correctamente. Si hay más de dos gráficos abiertos, el Asesor Experto salta del 1er gráfico al último, saltándose el resto entre ellos. Y no hay transición del último al primer gráfico, es decir, el carrusel no funciona.
El terminal mantiene su propia contabilidad interna del orden de apertura de las cartas. Y si baraja los gráficos en el proceso de trabajo, no cambiará la contabilidad interna. Haga un experimento: cierre todos los gráficos, abra cinco nuevos y adjunte el Asesor Experto al gráfico número 3.
Lo he comprobado, todo sigue igual. Pasa del tercer gráfico al último y se detiene. No pasa del último al primero, no hay carrusel.
No sé si afecta - tengo mt4. He renombrado el archivo a mt4 y he hecho una compilación. El script anterior cambia correctamente....
EA versión 1.01. Corregido un error y sustituido el nombre de la variable. En lugar de
Seconds
ahora la variable tiene el nombre
Seconds_porque en MQL4 la palabra Segundos no se puede usar como nombre de variable. (Ayuda sobre Segundos).
El Asesor Experto se puede utilizar tanto en MetaTrader 5 y MetaTrader 4 (para MT4 sólo tiene que cambiar el nombre del archivo).
Un video del funcionamiento del EA - un caleidoscopio que cambia todos los gráficos disponibles en modo infinito:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Conmutación de gráficos:
Autor: Vladimir Karputov