Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1419

 
Alexey Viktorov:

¿No sería mejor leer la documentación con más atención?

CHART_BRINGING_TO_TOP

Mostrar el gráfico encima de todos los demás gráficos

bool sin


Esto significa que esta propiedad es de sólo escritura. Y tú estás tratando de leerlo.........

Además, no estás dando una respuesta completa a la pregunta

Es un guión o un indicador.
Es un indicador. E imprime el resultado inmediatamente cuando la ventana cambia, es decir, puede leer.
 
Valeriy Yastremskiy:

Y no entiendo el sentido del lamento. La condición es siempre verdadera.

La condición es siempre verdadera, pero no se conoce el número de gráficos

 
Valeriy Yastremskiy:

Si no entiendo lo que pasa, imprimo todo lo que tengo, a veces ayuda. Y no entiendo el sentido del velo. La condición es siempre verdadera.

En todo caso, tiene que hacerse de forma estática, de lo contrario se reinicia

string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
 
MakarFX:
Es un indicador. E imprime inmediatamente el resultado cuando la ventana cambia, es decir, puede leer.

¿No crees que se lee como un galimatías? Aunque sea inmutable, sigue siendo un galimatías.

Intenta imprimirlo cuando el horario cambie. Entonces es importante saber cómo cambia el gráfico activo. Si el indicador está en el gráfico del extremo izquierdo, ¿se cambia al siguiente de la derecha, luego se cambia al del extremo derecho y así caóticamente? ¿O sólo hay que trazar la salida del gráfico donde está el indicador y volver a él?

 
Alexey Viktorov:

¿No crees que se lee como un galimatías? Aunque sea inmutable, sigue siendo un galimatías.

Intenta imprimirlo cuando el horario cambie. Entonces es importante saber cómo cambia el gráfico activo. Si el indicador está en el gráfico del extremo izquierdo, ¿se cambia al siguiente de la derecha, luego se cambia al del extremo derecho y así caóticamente? ¿O sólo hay que trazar dejando el gráfico donde está el indicador y volviendo a él?

No sé lo que lee, pero imprime lo que necesita

2021.03.16 09:33:25.650 Label USDCHF,M15: EURGBP
2021.03.16 09:33:25.148 Label USDCHF,M15: EURGBP
2021.03.16 09:33:24.647 Label USDCHF,M15: EURGBP
2021.03.16 09:33:24.145 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:23.644 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:23.142 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:22.641 Label USDCHF,M15: USDCHF
2021.03.16 09:33:22.155 Label USDCHF,M15: USDCHF
2021.03.16 09:33:21.654 Label USDCHF,M15: USDCHF
2021.03.16 09:33:21.152 Label USDCHF,M15: EURGBP
2021.03.16 09:33:20.651 Label USDCHF,M15: EURGBP
2021.03.16 09:33:20.149 Label USDCHF,M15: EURGBP

Funciona en cualquier gráfico (el más a la izquierda, el más a la derecha, el del medio) y en cualquier orden de conmutación del gráfico

Prueba con

//+------------------------------------------------------------------+
//|                                                        Label.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(500);
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      string symbol01;
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            symbol01=ChartSymbol(currChart);      Print(symbol01);
           } 
         currChart=ChartNext(currChart);  i++;
        }
//--- 
  }
//+----------------------------------------------------------------------------+
 

Hecho así

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            symbol01=ChartSymbol(currChart);
           } 
         currChart=ChartNext(currChart);  i++;
        }
   PrintLabel();
//--- 
  }
//+----------------------------------------------------------------------------+
void PrintLabel()
  {
   if(symbol02!=symbol01){symbol02=symbol01; Print(symbol02);}
   return;
  }

Resultado

2021.03.16 10:00:05.075 Custom indicator Label USDCHF,M15: removed
2021.03.16 10:00:05.060 Label USDCHF,M15: uninit reason 1
2021.03.16 10:00:00.046 Label USDCHF,M15: USDCHF
2021.03.16 09:59:55.486 Label USDCHF,M15: EURCAD
2021.03.16 09:59:54.498 Label USDCHF,M15: CADCHF
2021.03.16 09:59:53.511 Label USDCHF,M15: EURGBP
2021.03.16 09:59:52.994 Label USDCHF,M15: GBPCHF
2021.03.16 09:59:51.991 Label USDCHF,M15: EURUSD
2021.03.16 09:59:48.945 Label USDCHF,M15: USDCHF
2021.03.16 09:59:48.428 Label USDCHF,M15: initialized
2021.03.16 09:59:47.046 Custom indicator Label USDCHF,M15: loaded successfully

¡¡¡Gracias a todos por su ayuda!!!

 
MakarFX:

No sé lo que lee, pero imprime lo necesario

Funciona en cualquier gráfico (de la izquierda, de la derecha, del medio) y en cualquier orden de cambio de gráfico

Prueba con

Lee 1 o 0. No sé cuán preciso es, pero sorprendentemente funciona...

Entonces aquí hay una solución lista

/***************************Timer function***************************/
void OnTimer()
 {
  static long chart_ID = 0;
  string symbol01;
  long currChart = ChartFirst();
  while(currChart >= 0)
   {
    if(chart_ID != ChartGetInteger(currChart, CHART_WINDOW_HANDLE) && ChartGetInteger(currChart,CHART_BRING_TO_TOP,0) == 1)
     {
      chart_ID = ChartGetInteger(currChart, CHART_WINDOW_HANDLE);
      symbol01 = ChartSymbol(currChart);
      Print(symbol01, " ", EnumToString(ChartPeriod(currChart)), " ", chart_ID);
     }
    currChart = ChartNext(currChart);
   }
 }/*******************************************************************/
 
MakarFX:

Hecho así

Resultado

¡¡¡Gracias a todos por su ayuda!!!

Si hay dos gráficos del mismo carácter o más,


no funcionará.

 
MakarFX:

No sé lo que lee, pero imprime lo necesario

Funciona en cualquier gráfico (de la izquierda, de la derecha, del centro) y en cualquier orden de cambio de gráfico

Prueba con

void OnTimer()
{
   long currChart=0,prevChart=ChartFirst();
   int i=0,limit=100;
   static long CurrID;
   while(i<limit) { // у нас наверняка не больше 100 открытых графиков
      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
      if(ChartGetInteger(currChart,CHART_BRING_TO_TOP))
         break;
      if(currChart<0) break;          // достигли конца списка графиков
      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
      i++;// не забудем увеличить счетчик
   }
   if(CurrID!=currChart) {
      Print(ChartSymbol(currChart));
      CurrID=currChart;
   }
}


P.D. Mientras escribía, los códigos ya han sido esbozados :)

 
Alexey Viktorov:

Lee 1 o 0. No sé qué fiabilidad tiene, pero sorprendentemente funciona...

Entonces aquí está la solución.

Funciona, gracias.

Vitaly Muzichenko:


P.D. Mientras escribía esto, el código ya estaba escrito :)

Omite la primera ventana del gráfico.

Alexey Viktorov:

Si hay dos cartas del mismo carácter o más,

no funcionará

Simplemente funciona como debería. ¡La cuestión es imprimir si un carácter cambia!