Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1419

 
Alexey Viktorov:

Não seria melhor ler a documentação com mais atenção?

TABELA_BRING_TO_TOP

Exibir gráfico no topo de todos os outros gráficos

bool c/o


Isto significa que esta propriedade é somente escrita. E você está tentando lê-lo.........

Além disso, você não está dando uma resposta completa à pergunta

É um roteiro ou um indicador.
É um indicador. E imprime o resultado imediatamente quando a janela muda, ou seja, ele pode ler.
 
Valeriy Yastremskiy:

E eu não entendo o objetivo do lamento. A condição é sempre verdadeira.

A condição é sempre verdadeira, mas o número de gráficos não é conhecido

 
Valeriy Yastremskiy:

Se eu não entendo o que está acontecendo, eu imprimo tudo o que tenho, às vezes isso ajuda. E eu não entendo o sentido do véu. A condição é sempre verdadeira.

Se algo tem que ser feito de forma estática, caso contrário, ele é reiniciado.

string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
 
MakarFX:
É um indicador. E imprime imediatamente o resultado quando a janela muda, ou seja, ele pode ler.

Você não acha que parece uma algaraviada? Embora imutável, continua a ser uma algaraviada.

Tente imprimi-lo quando o horário mudar. Então é importante saber como o gráfico ativo muda. Se o indicador estiver na extrema esquerda, você muda para o próximo à direita, então mude para o da extrema direita e assim chaoticamente mude? Ou você só precisa rastrear a saída do gráfico onde está o indicador e retornar a ele?

 
Alexey Viktorov:

Você não acha que parece uma algaraviada? Embora imutável, continua a ser uma algaraviada.

Tente imprimi-lo quando o horário mudar. Então é importante saber como o gráfico ativo muda. Se o indicador estiver na extrema esquerda, você muda para o próximo à direita, então mude para o da extrema direita e assim chaoticamente mude? Ou você só precisa rastrear deixando a tabela onde está o indicador e retornando a ela?

Não sei o que se lê, mas imprime o que você precisa

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 em qualquer gráfico (mais à esquerda, mais à direita, mais ao meio) e em qualquer ordem de troca de gráfico

Tente

//+------------------------------------------------------------------+
//|                                                        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++;
        }
//--- 
  }
//+----------------------------------------------------------------------------+
 

Faça-o desta maneira

//+------------------------------------------------------------------+
//| 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

Obrigado a todos por sua ajuda!!!

 
MakarFX:

Não sei o que se lê, mas imprime o que precisa para

Funciona em qualquer gráfico (mais à esquerda, mais à direita, mais ao meio) e em qualquer ordem de mudança de gráfico

Tente

Lê 1 ou 0. Não sei se é preciso, mas surpreendentemente funciona...

Então aqui está uma solução pronta

/***************************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:

Faça-o desta maneira

Resultado

Obrigado a todos por sua ajuda!!!

Se houver dois gráficos com o mesmo caráter ou mais,


não vai funcionar.

 
MakarFX:

Eu não sei o que lê, mas imprime o que precisa

Funciona em qualquer gráfico (mais à esquerda, mais à direita, mais ao meio) e em qualquer ordem de mudança de gráfico

Tente

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.S. Enquanto escrevo, os códigos já foram esboçados :)

 
Alexey Viktorov:

Lê 1 ou 0. Não sei se é confiável, mas surpreendentemente funciona...

Então aqui está a solução.

Funciona, obrigado.

Vitaly Muzichenko:


P.S. Enquanto escrevia isto, o código já foi escrito :)

Salta a primeira janela do gráfico.

Alexey Viktorov:

Se haverá dois gráficos com o mesmo caráter ou mais,

não vai funcionar

Funciona do jeito que deveria. O objetivo é imprimir se um personagem mudar!