Самообучение языку MQL5 с полного нуля - страница 76

 
MrBrooklin: .
if(Symbol_Main==_Symbol)
Зачем танцевать, если есть прямой запрос символа текущего графика.
 
Konstantin Nikitin:
MrBrooklin: . Зачем танцевать, если есть прямой запрос символа текущего графика.

Здравствуйте, Константин! Мне нужно было сравнить тот символ, который был указан во входных параметрах, с тем символом, на который осуществляется попытка установить советник.

Код, который Вы предложили, тоже не работает.

С уважением, Владимир.

 
MrBrooklin:

Здравствуйте, Константин! Мне нужно было сравнить тот символ, который был указан во входных параметрах, с тем символом, на который осуществляется попытка установить советник.

Код, который Вы предложили, тоже не работает.

С уважением, Владимир.

В настройках у вас указан

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

_Symbol

В переменной _Symbol хранится имя символа текущего графика.

Так что проверка символа по текущему графику вполне должна пройти.

if(Symbol_Main==_Symbol)
 
Konstantin Nikitin:

В настройках у вас указан

_Symbol

В переменной _Symbol хранится имя символа текущего графика.

Так что проверка символа по текущему графику вполне должна пройти.

Спасибо, Константин! Всё заработало! При исправлении кода немного ошибся. Сейчас всё поправил и заработало. Дай бог Вам здоровья и благополучия!

Поздравляю Всех с наступающим Новым годом!

С уважением, Владимир.

 

Код должен выглядеть вот так:

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

Примечание: во входном параметре Symbol_Main нужно указывать имя валютной пары такое, какое прописано у Вашего форекс-дилера. В моём случае символ GBPUSD имеет окончание rfd.

Будьте внимательны!

С уважением, Владимир.

 
MrBrooklin:

Код должен выглядеть вот так:

Примечание: во входном параметре Symbol_Main нужно указывать имя валютной пары такое, какое прописано у Вашего форекс-дилера. В моём случае символ GBPUSD имеет окончание rfd.

Будьте внимательны!

С уважением, Владимир.

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

И радуйтесь жизни ))) Обратите внимание что запрашиваю даже не полностью написанный символ и не важен регистр.

 
Konstantin Nikitin:

И радуйтесь жизни ))) Обратите внимание что запрашиваю даже не полностью написанный символ и не важен регистр.

Огромное спасибо, Константин, за классную подсказку! Обязательно применю в своем советнике. Думаю, что и другим начинающим изучать язык программирования MQL5, также будет полезна эта функция.

Мне до Вашего уровня знаний, пока ещё, как до Пекина ползком!

С уважением, Владимир.

 
Konstantin Nikitin:

И радуйтесь жизни ))) Обратите внимание что запрашиваю даже не полностью написанный символ и не важен регистр.

Зачем-же так издеваться над неокрепшим умом? Ваш код абсолютно не отвечает требованию. Если во входные параметры ввести только "eu" или "eur" то эта часть условия

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

будет выполнена независимо от того какая это пара содержащая в названии "EU" и не важно EUR базовая валюта или котируемая. Да и зачем перебирать SymbolName MarketWatch в поиске нужного символа?¿?

 
Alexey Viktorov:

Зачем-же так издеваться над неокрепшим умом? Ваш код абсолютно не отвечает требованию. Если во входные параметры ввести только "eu" или "eur" то эта часть условия

будет выполнена независимо от того какая это пара содержащая в названии "EU" и не важно EUR базовая валюта или котируемая. Да и зачем перебирать SymbolName MarketWatch в поиске нужного символа?¿?

Здравствуйте, Алексей! Честно говоря, не силен в программировании, поэтому принимаю многое на веру. Это получается, что код, предоставленный Константином нужно доработать?

С уважением, Владимир.

 
MrBrooklin:

Код должен выглядеть вот так:

Примечание: во входном параметре Symbol_Main нужно указывать имя валютной пары такое, какое прописано у Вашего форекс-дилера. В моём случае символ GBPUSD имеет окончание rfd.

Будьте внимательны!

С уважением, Владимир.

Я-бы сделал так

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