Auto-aprendizagem da linguagem MQL5 a partir do zero - página 76

 
MrBrooklin: .
if(Symbol_Main==_Symbol)
Por que dançar quando há uma solicitação direta para o símbolo do gráfico atual?
 
Konstantin Nikitin:
MrBrooklin: . Por que dançar quando há uma solicitação direta para o símbolo do gráfico atual?

Olá Konstantin, eu precisava comparar o símbolo que foi especificado nos parâmetros de entrada com o símbolo que a EA está tentando definir.

O código que você sugeriu também não funciona.

Cumprimentos, Vladimir.

 
MrBrooklin:

Olá Konstantin, eu precisava comparar o símbolo que foi especificado nos parâmetros de entrada com o símbolo que a EA está tentando definir.

O código que você sugeriu também não funciona.

Cumprimentos, Vladimir.

Em suas configurações, você especificou

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

Símbolo

A variável _Symbol armazena o nome do símbolo do gráfico atual.

Portanto, a verificação do símbolo no gráfico atual deve funcionar bem.

if(Symbol_Main==_Symbol)
 
Konstantin Nikitin:

Em suas configurações, você especificou

Símbolo

A variável _Symbol armazena o nome do símbolo do gráfico atual.

Portanto, a verificação do símbolo pelo gráfico atual deve ser bem sucedida.

Obrigado, Konstantin! Tudo funcionou! Eu cometi um erro ao corrigir o código. Agora eu o consertei e funcionou. Deus lhe conceda saúde e prosperidade!

Desejo a todos vocês um Feliz Ano Novo!

Cumprimentos, Vladimir.

 

O código deve ser parecido com este:

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: No parâmetro de entrada Symbol_Main, você deve especificar o nome do par de moedas, conforme prescrito por seu negociante forex. No meu caso, o símbolo GBPUSD tem o rfd final.

Tenha cuidado!

Cumprimentos, Vladimir.

 
MrBrooklin:

O código deve ser parecido com este:

Nota: No parâmetro de entrada Symbol_Main, você deve especificar o nome do par de moedas, conforme prescrito por seu negociante forex. No meu caso, o símbolo GBPUSD tem o rfd final.

Tenha cuidado!

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

E aproveite sua vida )))) Preste atenção que estou pedindo mesmo que não esteja completamente escrito o símbolo e o caso não é importante.

 
Konstantin Nikitin:

E aproveite sua vida )))) Note que eu peço mesmo que o símbolo e o caso não estejam completamente escritos não é importante.

Muito obrigado, Konstantin, pela grande dica! Certamente vou usá-lo em minha EA. Acho que esta função também será útil para iniciantes no aprendizado da linguagem de programação MQL5.

Ainda estou tão perto quanto rastejando para Pequim!

Cumprimentos, Vladimir.

 
Konstantin Nikitin:

E aproveite sua vida )))) Note que estou até mesmo pedindo um personagem que não esteja completamente escrito e não seja sensível a maiúsculas e minúsculas.

Por que você deve fazer troça de uma mente imatura? Seu código não atende em nada a essa exigência. Se você entrar apenas "eu" ou "eur" nos parâmetros de entrada, essa parte da condição

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

será cumprida não importa qual par de moedas contenha "EU" em seu nome e não importa o EUR como moeda base ou moeda cotada. E por que passar pelo SymbolName MarketWatch em busca do símbolo certo?

 
Alexey Viktorov:

Por que fazer tal troça de uma mente imatura? Seu código não atende em nada a essa exigência. Se apenas "eu" ou "eur" for inserido nos parâmetros de entrada, esta parte da condição

será cumprida não importa qual par de moedas contenha "EU" em seu nome e não importa o EUR como moeda base ou moeda cotada. E por que eu deveria passar pelo SymbolName of MarketWatch em busca do símbolo certo?

Olá Alexey! para ser honesto, não sou bom em programação, por isso tenho muita fé. Isso significa que o código fornecido por Konstantin deve ser retrabalhado?

Atenciosamente, Vladimir.

 
MrBrooklin:

O código deve ser parecido com este:

Nota: No parâmetro de entrada Symbol_Main, você deve especificar o nome do par de moedas, conforme prescrito por seu negociante forex. No meu caso, o símbolo GBPUSD tem o rfd final.

Tenha cuidado!

Sinceramente Vladimir.

Eu o faria desta maneira

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ão: