Autoaprendizaje del lenguaje MQL5 desde cero - página 76

 
MrBrooklin: .
if(Symbol_Main==_Symbol)
Por qué bailar cuando hay una petición directa del símbolo del gráfico actual.
 
Konstantin Nikitin:
MrBrooklin: . Por qué bailar cuando hay una petición directa del símbolo del gráfico actual.

Hola Konstantin, necesitaba comparar el símbolo que se especificó en los parámetros de entrada con el símbolo que el EA está tratando de establecer.

El código que has sugerido tampoco funciona.

Saludos, Vladimir.

 
MrBrooklin:

Hola Konstantin, necesitaba comparar el símbolo que se especificó en los parámetros de entrada con el símbolo que el EA está tratando de establecer.

El código que has sugerido tampoco funciona.

Saludos, Vladimir.

En su configuración ha especificado

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

Símbolo

La variable _Symbol almacena el nombre del símbolo del gráfico actual.

Por lo tanto, la comprobación del símbolo en el gráfico actual debería funcionar bien.

if(Symbol_Main==_Symbol)
 
Konstantin Nikitin:

En su configuración ha especificado

Símbolo

La variable _Symbol almacena el nombre del símbolo del gráfico actual.

Por lo tanto, la comprobación del símbolo por parte del gráfico actual debería tener éxito.

¡Gracias, Konstantin! ¡Todo ha funcionado! He cometido un error al corregir el código. Ahora lo he arreglado y ha funcionado. ¡Que Dios te conceda salud y prosperidad!

Les deseo a todos un feliz año nuevo.

Saludos, Vladimir.

 

El código debería ser así:

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 значение означающее "неудачная инициализация"
     }
  }

Nota: En el parámetro de entrada Symbol_Main, debe especificar el nombre del par de divisas según lo prescrito por su proveedor de divisas. En mi caso el símbolo GBPUSD tiene la terminación rfd.

¡Tenga cuidado!

Saludos, Vladimir.

 
MrBrooklin:

El código debería ser así:

Nota: En el parámetro de entrada Symbol_Main, debe especificar el nombre del par de divisas según lo prescrito por su proveedor de divisas. En mi caso el símbolo GBPUSD tiene la terminación rfd.

¡Tenga cuidado!

Sinceramente, 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;
  }

Y disfruta de tu vida )))) Preste atención a que estoy pidiendo incluso símbolo no completamente escrito y el caso no es importante.

 
Konstantin Nikitin:

Y disfruta de tu vida )))) Tenga en cuenta que solicito incluso no completamente escrito símbolo y el caso no es importante.

Muchas gracias, Konstantin, por el gran consejo. Sin duda lo utilizaré en mi EA. Creo que esta función también será útil para los principiantes en el aprendizaje del lenguaje de programación MQL5.

¡Sigo tan cerca como arrastrándome a Pekín!

Saludos, Vladimir.

 
Konstantin Nikitin:

Y disfruta de tu vida )))) Tenga en cuenta que incluso estoy pidiendo un carácter que no está completamente escrito y no es sensible a las mayúsculas y minúsculas.

¿Por qué hay que burlarse de una mente inmadura? Su código no cumple el requisito en absoluto. Si sólo introduce "eu" o "eur" en los parámetros de entrada, esa parte de la condición

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

se cumplirá sin importar que el par de divisas contenga "EU" en su nombre y no importa que el EUR sea la moneda base o la cotizada. ¿Y por qué buscar el símbolo correcto en SymbolName MarketWatch?

 
Alexey Viktorov:

¿Por qué burlarse tanto de una mente inmadura? Su código no cumple el requisito en absoluto. Si sólo se introduce "eu" o "eur" en los parámetros de entrada, esta parte de la condición

se cumplirá sin importar que el par de divisas contenga "EU" en su nombre y no importa que el EUR sea la moneda base o la cotizada. ¿Y por qué debo recorrer el SymbolName de MarketWatch en busca del símbolo correcto?

Hola Alexey! Para ser sincero, no se me da bien programar, así que me tomo muchas cosas a pecho. ¿Significa esto que el código proporcionado por Konstantin debe ser reelaborado?

Sinceramente, Vladimir.

 
MrBrooklin:

El código debería ser así:

Nota: En el parámetro de entrada Symbol_Main, debe especificar el nombre del par de divisas según lo prescrito por su proveedor de divisas. En mi caso el símbolo GBPUSD tiene la terminación rfd.

¡Tenga cuidado!

Sinceramente, Vladimir.

Yo lo haría así

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 значение означающее "неудачная инициализация"
     }
  }
Razón de la queja: