Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 196

 
fxsaber:

Kein Hinweis darauf, woher die Stunde kommt (das gilt auch für mich). Vielleicht hängt es von der Zeitzone ab.


Das ist nicht mehr interessant.

Nicht erraten. Ich habe Moskau. Mit GMT nicht eine Stunde... Keine anderen Gedanken.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wie kann man die automatische Fehlerüberwachung im Terminal nutzen?

Renat Fatkhullin, 2021.01.22 16:12

Es gibt eine undokumentierte Möglichkeit, die Protokolle mit der Methode Print(NULL) zwangsweise auf die Festplatte zurückzusetzen

 

Andrey Khatimlianskii:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wie kann man die automatische Fehlerüberwachung im Terminal nutzen?

Renat Fatkhullin, 2021.01.22 16:12

Es gibt eine undokumentierte Möglichkeit, Protokolle durch Print(NULL) zwangsweise auf die Festplatte zurückzusetzen

Super!

 
Andrey Khatimlianskii:

fxsaber:

Super!

In der Eile zu teilen, ohne zu prüfen.

 
Andrey Khatimlianskii:

In meiner Eile zu teilen, ohne es zu überprüfen.


Was passiert, wenn die Zeichenkette zuerst auf Null gesetzt und dann gedruckt wird?
 

Option zum Anzeigen (nicht Aktivieren) des Charts (nur MT5)

// Показывает (не активирует) данный чарт.
bool ChartShow( const long Chart )
{
  const bool IsDocked = ChartGetInteger(Chart, CHART_IS_DOCKED);
  
  return(ChartSetInteger(Chart, CHART_IS_DOCKED, !IsDocked) && 
         ChartSetInteger(Chart, CHART_IS_DOCKED, IsDocked) &&
         ChartGetInteger(Chart, CHART_WINDOW_HANDLE));  
}


Beispiel für die Verwendung.

// Переключает чарты клавишами клавиатуры '<'/'>'.

#define  KEY_LEFT2 188  // '<'
#define  KEY_RIGHT2 190 // '>'

int GetExpertCharts( long &Charts[], const string ExpertName = NULL )
{
  int Amount = 0;
  
  for (long Chart = ChartFirst(); Chart != -1; Chart = ChartNext(Chart))
    if ((ExpertName == NULL ) || (ChartGetString(Chart, CHART_EXPERT_NAME) == ExpertName))
    {
      Amount = ArrayResize(Charts, Amount + 1, 10);
      
      Charts[Amount - 1] = Chart;
    }
    
  return(ArrayResize(Charts, Amount));
}

long ChartNextShow( const long Chart, const int Step = 1 )
{
  long ResChart = Chart;
  
  long Charts[];  
  const int Size = GetExpertCharts(Charts);
  
  if ((Size > 1) && (bool)(Step % Size))
    for (int i = 0; i < Size; i++)  
      if (Charts[i] == Chart)
      {
        ResChart = Charts[(i + ((Step > 0) ? Step : (Size - ((-Step) % Size)))) % Size];
        
        ChartShow(ResChart); // https://www.mql5.com/ru/forum/170952/page196#comment_20841674
        
        break;
      }

  return(ResChart);  
}

void OnChartEvent( const int id, const long &lparam, const double&, const string& ) 
{         
  static long Chart = ChartID();
  
  if (id == CHARTEVENT_KEYDOWN) 
    switch ((int)lparam)
    {
    case KEY_LEFT2:
      Chart = ChartNextShow(Chart, -1); // Показали чарт слева
      break;

    case KEY_RIGHT2:
      Chart = ChartNextShow(Chart); // Показали чарт справа
      break;
    }
}

Leider konnte keine Option zur Kartenaktivierung gefunden werden. Nur Anzeige.

 
Lösung für ein altes Problem.
/*
// https://www.mql5.com/ru/forum/1111/page2863#comment_18591240
#define VALUE 10

#define MACROS

#ifdef MACROS
  // Нужно VALUE увеличить в два раза.
#endif
*/

// https://www.mql5.com/ru/forum/1111/page2965#comment_20841725
#define  MACRO(  x, y, z )       enum nn##z { y = x };
#define  MACRO2( x, y )          MACRO( x, y, __LINE__ )

// https://www.mql5.com/ru/forum/1111/page2866#comment_18603128
#define  VALUE 10

MACRO2(VALUE, VALUE_TMP) // VALUE_TMP - поле enum, поэтому имя не должно повторяться.
#undef  VALUE
#define  VALUE (VALUE_TMP * 2)

void OnStart()
{
  Print(VALUE);
}

Diese Option ist besser als diese.

#define  MACRO3(x, y)            const int y = x;

MACRO3(VALUE, VALUE_TMP)

Eine Variable ist nicht erforderlich. Alle Werte werden zur Kompilierzeit festgelegt. Vielen Dank @A100!

 
fxsaber:

Leider konnte keine Option zur Kartenaktivierung gefunden werden. Nur die Anzeige.

Ich verstehe das nicht........., ist es das, was Sie meinen? Es ist ein Drehbuch.


ps; Und was ist das?

  const bool IsDocked = ChartGetInteger(Chart, CHART_IS_DOCKED);

Ich kann es in der Dokumentation nicht finden...

Dateien:
200.mq5  2 kb
 
Alexey Viktorov:

ps; Was ist das?

Ich kann es in der Dokumentation nicht finden...

Es ist ALT+D auf dem Diagramm.

 
Alexey Viktorov:

Ich verstehe das nicht......... Sie darüber sprechen? Es ist ein Drehbuch.

Danke, da habe ich etwas übertrieben. Natürlich haben wir oben die Kartenverwaltung, die vorher nicht möglich war. Aber mein Ziel war ein anderes.

// Активирует данный чарт.
bool ChartActivate( const long Chart )
{
  return(ChartSetInteger(Chart, CHART_BRING_TO_TOP, true) && ChartGetInteger(Chart, CHART_WINDOW_HANDLE));
}


Beispiel für die Verwendung.

// Переключает чарты с одним и тем же советником клавишами клавиатуры '<'/'>'.

void ChartNextActivate( const int Step = 1, const bool Expert = true )
{
  long Charts[];  
  // https://www.mql5.com/ru/forum/170952/page196#comment_20841674
  const int Size = GetExpertCharts(Charts, Expert ? ChartGetString(0, CHART_EXPERT_NAME) : NULL);
  const long Chart = ChartID();
  
  if ((Size > 1) && (bool)(Step % Size))
    for (int i = 0; i < Size; i++)  
      if (Charts[i] == Chart)
      {
        // https://www.mql5.com/ru/forum/170952/page197#comment_20845067
        ChartActivate(Charts[(i + ((Step > 0) ? Step : (Size - ((-Step) % Size)))) % Size]);
        
        break;
      }

  return;  
}

void OnChartEvent( const int id, const long &lparam, const double&, const string& ) 
{         
  if (id == CHARTEVENT_KEYDOWN) 
    switch ((int)lparam)
    {
    case KEY_LEFT2:
      ChartNextActivate(-1);
      break;

    case KEY_RIGHT2:
      ChartNextActivate();      
      break;
    }
}
Grund der Beschwerde: