Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1419

 
Alexey Viktorov:

Wäre es nicht besser, die Dokumentation gründlicher zu lesen?

CHART_BRING_TO_TOP

Diagramm über allen anderen Diagrammen anzeigen

bool w/o


Dies bedeutet, dass diese Eigenschaft schreibgeschützt ist. Und Sie versuchen, es zu lesen.........

Außerdem geben Sie keine vollständige Antwort auf die Frage

Es ist ein Skript oder ein Indikator.
Sie ist ein Indikator. Und er gibt das Ergebnis sofort aus, wenn sich das Fenster ändert, d.h. er kann lesen.
 
Valeriy Yastremskiy:

Und ich verstehe nicht, was das Gejammer soll. Die Bedingung ist immer erfüllt.

Die Bedingung ist immer erfüllt, aber die Anzahl der Graphen ist nicht bekannt

 
Valeriy Yastremskiy:

Wenn ich nicht verstehe, was los ist, drucke ich alles aus, was ich habe, manchmal hilft das. Und ich verstehe den Sinn des Schleiers nicht. Die Bedingung ist immer erfüllt.

Wenn überhaupt, dann muss dies statisch geschehen, sonst wird es zurückgesetzt.

string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
 
MakarFX:
Sie ist ein Indikator. Und er gibt das Ergebnis sofort aus, wenn sich das Fenster ändert, d.h. er kann lesen.

Finden Sie nicht, dass es sich wie Kauderwelsch liest? Auch wenn es unveränderlich ist, ist es immer noch Kauderwelsch.

Versuchen Sie, ihn auszudrucken, wenn sich der Zeitplan ändert. Dann ist es wichtig zu wissen, wie sich das aktive Diagramm verändert. Wenn der Indikator ganz links im Diagramm steht, wechseln Sie dann zum nächsten Indikator auf der rechten Seite, dann zum Indikator ganz rechts und so weiter? Oder müssen Sie nur den Ausgang des Diagramms verfolgen, wo sich der Indikator befindet, und dorthin zurückkehren?

 
Alexey Viktorov:

Finden Sie nicht, dass es sich wie Kauderwelsch liest? Auch wenn es unveränderlich ist, ist es immer noch Kauderwelsch.

Versuchen Sie, ihn auszudrucken, wenn sich der Zeitplan ändert. Dann ist es wichtig zu wissen, wie sich das aktive Diagramm verändert. Wenn der Indikator ganz links im Diagramm steht, wechseln Sie dann zum nächsten Indikator auf der rechten Seite, dann zum Indikator ganz rechts und so weiter? Oder müssen Sie nur verfolgen, wie Sie das Diagramm, in dem sich der Indikator befindet, verlassen und zu ihm zurückkehren?

Ich weiß nicht, was er liest, aber er druckt, was Sie brauchen

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

Es funktioniert in jedem Diagramm (ganz links, ganz rechts, in der Mitte) und in jeder Reihenfolge der Diagrammumschaltung

Versuchen Sie

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

So wurde es gemacht

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

Ergebnis

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

Ich danke Ihnen allen für Ihre Hilfe!!!

 
MakarFX:

Ich weiß nicht, was er liest, aber er druckt, was er muss.

Funktioniert in jedem Diagramm (ganz links, ganz rechts, in der Mitte) und in jeder Reihenfolge des Diagrammwechsels

Versuchen Sie

Zeigt 1 oder 0 an. Ich weiß nicht, wie genau das ist, aber es funktioniert erstaunlicherweise...

Dann haben wir hier eine fertige Lösung

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

So wurde es gemacht

Ergebnis

Ich danke Ihnen allen für Ihre Hilfe!!!

Wenn es zwei oder mehr Graphen mit demselben Zeichen gibt,


wird es nicht funktionieren.

 
MakarFX:

Ich weiß nicht, was er liest, aber er druckt, was er muss.

Funktioniert in jedem Diagramm (ganz links, ganz rechts, in der Mitte) und in jeder Reihenfolge des Diagrammwechsels

Versuchen Sie

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. Während ich schreibe, sind die Codes schon skizziert :)

 
Alexey Viktorov:

Er zeigt 1 oder 0 an. Ich weiß nicht, wie zuverlässig er ist, aber er funktioniert erstaunlicherweise...

Dann ist hier die Lösung.

Es funktioniert, danke.

Vitaly Muzichenko:


P.S. Während ich dies schreibe, ist der Code bereits geschrieben worden :)

Überspringt das erste Kartenfenster.

Alexey Viktorov:

Wenn es zwei oder mehr Karten mit demselben Zeichen gibt,

es wird nicht funktionieren

Es funktioniert einfach so, wie es sollte. Es geht darum, zu drucken, wenn sich ein Zeichen ändert!

Grund der Beschwerde: