Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1419

 
Alexey Viktorov:

А может лучше почитать документацию повнимательней?

CHART_BRING_TO_TOP

Показ графика поверх всех других

bool   w/o


Это означает, что данное свойство только для записи. А вы его пытаетесь прочесть………

Плюс ко всему вы не даёте полный ответ на вопрос

Это скрипт или индикатор.
Это индикатор. И он сразу печатает результат при смене окна, т.е может прочитать.
 
Valeriy Yastremskiy:

И не понимаю сути вайл. Условие всегда истинно.

Условие всегда истинно, но не известно количество графиков

 
Valeriy Yastremskiy:

Если не понимаю что происходит, принтую все что есть, иногда помогает. И не понимаю сути вайл. Условие всегда истинно.

Если что, то нужно делать статиком, иначе обнуляется

string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
 
MakarFX:
Это индикатор. И он сразу печатает результат при смене окна, т.е может прочитать.

А вам не кажется, что читается какая-то белиберда? Хоть и неизменяемая, но всёже белиберда.

Попробуйте распечатать это при смене графика. Потом немаловажно знать как меняется активный график. Если индикатор на крайнем левом графике, вы переходите на следующий справа, затем переходите на крайний справа и так хаотично переключаете? Или надо просто отследить уход с графика на котором индикатор и возврат на него?

 
Alexey Viktorov:

А вам не кажется, что читается какая-то белиберда? Хоть и неизменяемая, но всёже белиберда.

Попробуйте распечатать это при смене графика. Потом немаловажно знать как меняется активный график. Если индикатор на крайнем левом графике, вы переходите на следующий справа, затем переходите на крайний справа и так хаотично переключаете? Или надо просто отследить уход с графика на котором индикатор и возврат на него?

Не знаю что читается, но печатается то что нужно

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

Работает на любом графике(крайний левый, правый, средний) и при любой очередности смены графика

Попробуйте

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

Сделал так

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

Результат

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

Всем спасибо за помощь!!!

 
MakarFX:

Не знаю что читается, но печатается то что нужно

Работает на любом графике(крайний левый, правый, средний) и при любой очередности смены графика

Попробуйте

Читает 1 или 0. На сколько это соответствует достоверности не знаю, но на удивление работает…

Тогда вот готовое решение

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

Сделал так

Результат

Всем спасибо за помощь!!!

Если будет два графика одного символа или больше,


то работать не будет

 
MakarFX:

Не знаю что читается, но печатается то что нужно

Работает на любом графике(крайний левый, правый, средний) и при любой очередности смены графика

Попробуйте

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. Пока писал, кодов уже набросали :)

 
Alexey Viktorov:

Читает 1 или 0. На сколько это соответствует достоверности не знаю, но на удивление работает…

Тогда вот готовое решение

Работает, спасибо.

Vitaly Muzichenko:


P.S. Пока писал, кодов уже набросали :)

Пропускает первое окно графика.

Alexey Viktorov:

Если будет два графика одного символа или больше,

то работать не будет

Как раз работает как надо. Суть - печатать если сменился символ!

Причина обращения: