Die Sprache MQL5 von Grund auf selbst erlernen - Seite 76

 
MrBrooklin: .
if(Symbol_Main==_Symbol)
Warum tanzen, wenn es eine direkte Anfrage für das aktuelle Kartensymbol gibt?
 
Konstantin Nikitin:
MrBrooklin: . Warum tanzen, wenn es eine direkte Anfrage für das aktuelle Kartensymbol gibt?

Hallo Konstantin, ich musste das Symbol, das in den Eingabeparametern angegeben wurde, mit dem Symbol vergleichen, auf das der EA zu setzen versucht.

Der von Ihnen vorgeschlagene Code funktioniert ebenfalls nicht.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hallo Konstantin, ich musste das Symbol, das in den Eingabeparametern angegeben wurde, mit dem Symbol vergleichen, auf das der EA zu setzen versucht.

Der von Ihnen vorgeschlagene Code funktioniert ebenfalls nicht.

Mit freundlichen Grüßen, Vladimir.

In Ihren Einstellungen haben Sie angegeben

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

_Symbol

Die Variable _Symbol speichert den Namen des aktuellen Diagrammsymbols.

Die Prüfung des Symbols im aktuellen Diagramm sollte also problemlos funktionieren.

if(Symbol_Main==_Symbol)
 
Konstantin Nikitin:

In Ihren Einstellungen haben Sie angegeben

_Symbol

Die Variable _Symbol speichert den Namen des aktuellen Diagrammsymbols.

Die Symbolprüfung durch das aktuelle Diagramm sollte also erfolgreich sein.

Danke, Konstantin, es hat alles geklappt! Beim Korrigieren des Codes ist mir ein Fehler unterlaufen. Ich habe es jetzt korrigiert und es funktioniert. Gott gebe Ihnen Gesundheit und Wohlstand!

Ich wünsche Ihnen allen ein gutes neues Jahr!

Mit freundlichen Grüßen, Vladimir.

 

Der Code sollte wie folgt aussehen:

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   if(Symbol_Main==_Symbol) //если график валютной пары совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

Hinweis: Im Eingabeparameter Symbol_Main sollten Sie den Namen des Währungspaares angeben, wie er von Ihrem Devisenhändler vorgegeben wird. In meinem Fall hat das GBPUSD-Symbol die Endung rfd.

Seien Sie vorsichtig!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Der Code sollte wie folgt aussehen:

Hinweis: Im Eingabeparameter Symbol_Main sollten Sie den Namen des Währungspaares angeben, wie er von Ihrem Devisenhändler vorgegeben wird. In meinem Fall hat das GBPUSD-Symbol die Endung rfd.

Seien Sie vorsichtig!

Mit freundlichen Grüßen, Vladimir.

void OnStart()
  {
     Print(CheckSymbol("eurus"));
  }
//+------------------------------------------------------------------+
string CheckSymbol(const string _symboll)
  {
   string symbol = _symboll;
   if(!StringToUpper(symbol))
      return NULL;
//---
   for(int i=0; i<SymbolsTotal(false); i++)
     {
      string s = SymbolName(i, false);
      if(!StringToUpper(s))
         continue;
      if(s == symbol || StringFind(symbol, s, 0) >= 0 || StringFind(s, symbol, 0) >= 0)
         if(SymbolSelect(symbol, true))
            return SymbolName(i, false);
     }
//---
   return NULL;
  }

Und genießen Sie Ihr Leben )))) Achten Sie darauf, dass ich auch nicht vollständig geschriebene Symbole verlange und die Groß- und Kleinschreibung keine Rolle spielt.

 
Konstantin Nikitin:

Und genießen Sie Ihr Leben )))) Beachten Sie, dass ich auch nicht vollständig geschriebenes Symbol beantrage und Groß- und Kleinschreibung nicht wichtig ist.

Vielen Dank, Konstantin, für den tollen Tipp! Ich werde es sicherlich in meinem EA verwenden. Ich denke, dass diese Funktion auch für Anfänger beim Erlernen der Programmiersprache MQL5 nützlich sein wird.

Ich bin immer noch so nah an Peking dran wie ein Krabbler!

Mit freundlichen Grüßen, Vladimir.

 
Konstantin Nikitin:

Und genießen Sie Ihr Leben )))) Beachten Sie, dass ich sogar nach einem Zeichen frage, das nicht vollständig geschrieben ist und bei dem die Groß- und Kleinschreibung keine Rolle spielt.

Warum sollte man sich über einen unreifen Geist lustig machen? Ihr Code erfüllt die Anforderung überhaupt nicht. Wenn Sie bei den Eingabeparametern nur "eu" oder "eur" eingeben, wird dieser Teil der Bedingung

|| StringFind(s, symbol, 0) >= 0)

wird unabhängig davon erfüllt, welches Währungspaar "EU" in seinem Namen enthält, und es spielt keine Rolle, ob EUR die Basiswährung oder die notierte Währung ist. Und warum sollte man auf der Suche nach dem richtigen Symbol durch SymbolName MarketWatch gehen ?

 
Alexey Viktorov:

Warum sollte man sich über einen unreifen Geist lustig machen? Ihr Code erfüllt die Anforderung überhaupt nicht. Wird in den Eingabeparametern nur "eu" oder "eur" eingegeben, wird dieser Teil der Bedingung

wird unabhängig davon erfüllt, welches Währungspaar "EU" in seinem Namen enthält, und es spielt keine Rolle, ob EUR die Basiswährung oder die notierte Währung ist. Und warum sollte ich den SymbolName von MarketWatch durchgehen , um das richtige Symbol zu finden?

Hallo Alexey, um ehrlich zu sein, bin ich nicht gut im Programmieren, also vertraue ich auf vieles. Bedeutet dies, dass der von Konstantin bereitgestellte Code überarbeitet werden sollte?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Der Code sollte wie folgt aussehen:

Hinweis: Im Eingabeparameter Symbol_Main sollten Sie den Namen des Währungspaares angeben, wie er von Ihrem Devisenhändler vorgegeben wird. In meinem Fall hat das GBPUSD-Symbol die Endung rfd.

Seien Sie vorsichtig!

Mit freundlichen Grüßen Vladimir.

Ich würde es folgendermaßen machen

input string Symbol_Main="GBPUSD";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   if(StringFind(_Symbol, Symbol_Main, 0) == 0) //если график валютной пары содержит входной параметр
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }