Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2153

 

Коллеги, здравствуйте.

В коде нужно указать разрешение/выписать запрет на торговлю определенными парами.

Т.е. чтобы советник мог торговать только на конкретных указанных парах. А при попытке поставить советника на график или запустить тест на паре, которая не разрешена, выдавал сообщение/аллерт о запрете торгов этой парой.

Подскажите, пожалуйста, какие есть варианты реализации этой идеи.

На другом форуме предложили прописать, перед проверкой сигнала на вход, следующее:

if(Symbol() == "EURUSD" ||

   Symbol() == "NZDCAD") return ;

Но эффекта никакого. Возможно я как-то иначе прописываю.

 
Nikolay Shorin #:

Коллеги, здравствуйте.

В коде нужно указать разрешение/выписать запрет на торговлю определенными парами.

Т.е. чтобы советник мог торговать только на конкретных указанных парах. А при попытке поставить советника на график или запустить тест на паре, которая не разрешена, выдавал сообщение/аллерт о запрете торгов этой парой.

Подскажите, пожалуйста, какие есть варианты реализации этой идеи.

На другом форуме предложили прописать, перед проверкой сигнала на вход, следующее:

if(Symbol() == "EURUSD" ||

   Symbol() == "NZDCAD") return ;

Но эффекта никакого. Возможно я как-то иначе прописываю.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Symbol() == "EURUSD" || Symbol() == "NZDCAD") {}
   else {Alert("Wrong Symbol!"); ExpertRemove();}
   
//---
   return(INIT_SUCCEEDED);
  }
 
Tretyakov Rostyslav #:

Правильно ли понимаю расшифровку: если символ это EURUSD или NZDCAD то ок, иначе выдается аллерт Wrong Symbol! ?

И возник такой момент. Если в коде (ниже приведу) прописать именно так (см. код), то он да, запрещает торговлю на парах кроме, к примеру, этих 2. Но при запуске бэктеста он просто пустой прогон делает, без результатов. Тут же вопрос возникает, риторический скорее: будет ли советник вживую торговать с таким кодом? Раз в тестах молчит.

Это нужно отдельно прописать разрешение на тест? 

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
  
  if(Symbol() == "EURUSD" || Symbol() == "NZDCAD") {}
   else {Alert("Wrong Symbol!"); ExpertRemove();}
   
//---
   return(INIT_SUCCEEDED);
  
   if(!IsDllsAllowed())
     {
      Alert("Make Sure DLL Import is Allowed");
      ExpertRemove();
      return(INIT_FAILED);
     }
   ///if(TimeCurrent()>expDate)
     {
     /// MessageBox("The version has expired, contact forexea333@gmail.com");
      //ExpertRemove();
     /// return(INIT_FAILED);
     }
 

Nikolay Shorin #:

Но при запуске бэктеста он просто пустой прогон делает, без результатов.

Это не пустой прогон, советник не работает

2023.03.11 11:07:05.960 2023.02.06 00:00:00  Moving Average GBPUSD,H1: ExpertRemove function called
2023.03.11 11:07:05.960 2023.02.06 00:00:00  Moving Average GBPUSD,H1: Alert: Wrong Symbol!

Вы не внимательны

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Symbol() == "EURUSD" || Symbol() == "NZDCAD") {}
   else {Alert("Wrong Symbol!"); ExpertRemove();}

   if(!IsDllsAllowed())
     {
      Alert("Make Sure DLL Import is Allowed");
      ExpertRemove();
     }
   
//---
   return(INIT_SUCCEEDED);
  }
 
Почему
if(Symbol() == "EURUSD" || Symbol() == "NZDCAD") {}
   else {Alert("Wrong Symbol!"); ExpertRemove();}

а не

if(Symbol() != "EURUSD" && Symbol() != "NZDCAD") {Alert("Wrong Symbol!"); ExpertRemove();}
?
 
JRandomTrader #:
Почему

а не

?
Так тоже можно
 
Tretyakov Rostyslav #:

А для чего ExpertRemove() в OnInit()? Это чем-то лучше, чем return(INIT_FAILED)?

 
Tretyakov Rostyslav #:

Это не пустой прогон, советник не работает

Вы не внимательны

Ниже, в блоке инициализации, под закомментированной строчкой, разделяющей две части блока, в его конце стояло как раз выделенное желтым...Вот поэтому и молчал. Сейчас всё ок.

Спасибо, помогли!)

А теперь ещё такие ошибки возникают. Первые 2 понял как решить, там просто нужно будет временно создать папку в апп дата (у меня портабл терминалы, поэтому так).

С другой стороны, ошибка после знака +, точнее 2, в одном месте почти, из-за чего - вопрос. Вроде всё объявлено. Но ворчит чего - вопрос.

Что забавно - если закинуть код в папку терминала и запустить терминал, либо нажать обновить, всё ок компилируется и работает. По сути можно "работает - не трогай", но чтобы сюрпризов потом не вылезло, интересно узнать причину и как исправить, если нужно вообще исправлять.



 
JRandomTrader #:
Почему

а не

?

Тут скорее кому как удобнее писать код, чтобы потом его понимать и читать)

 
Nikolay Shorin #:

Ниже, в блоке инициализации, под закомментированной строчкой, разделяющей две части блока, в его конце стояло как раз выделенное желтым...Вот поэтому и молчал. Сейчас всё ок.

Спасибо, помогли!)

А теперь ещё такие ошибки возникают. Первые 2 понял как решить, там просто нужно будет временно создать папку в апп дата (у меня портабл терминалы, поэтому так).

С другой стороны, ошибка после знака +, точнее 2, в одном месте почти, из-за чего - вопрос. Вроде всё объявлено. Но ворчит чего - вопрос.

Что забавно - если закинуть код в папку терминала и запустить терминал, либо нажать обновить, всё ок компилируется и работает. По сути можно "работает - не трогай", но чтобы сюрпризов потом не вылезло, интересно узнать причину и как исправить, если нужно вообще исправлять.



Откуда берется эта фун-ция ErrorDescription?
Причина обращения: