Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 112

 
Alexey Kozitsyn:
Je peux voir le code ?
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
 
Maksym Mudrakov:
...
extern string   SYMBOLS ="EURUSD,GBPUSD,EURGBP,EURJPY,USDJPY";
string symbolsArray[1];
...
void init(){
   StringToArray(SYMBOLS, symbolsArray);
...
}

int start(){
  Comment(symbolsArray[0]+"|"+symbolsArray[1]+"|"+symbolsArray[2]+"|"+symbolsArray[3]+"|"+symbolsArray[4]);
  //при запуске советника комментарий выводит правильную информацию, но через время один из элементов массива становится равным совсем другому значению
  ...
  return(0);
}

void StringToArray (string stringOfSymbols, string &arrayOfSymbols[]){
...//функция заносит в массив названия торговых инструментов, здесь ошибок нету (проверено)
}
La première chose que je ferais est d'ajouter #property strict, de corriger les erreurs/alertes (le cas échéant) et de remplacer init() et start() par OnInit() et OnTick().
 
Alexey Kozitsyn:
La première chose que je ferais est d'ajouter #property strict, de corriger les erreurs/alertes (le cas échéant) et de remplacer init() et start() par OnInit() et OnTick().
Merci !

J'ai obtenu 5 erreurs et 83 avertissements ))))
 
Maksym Mudrakov:
Merci !

5 erreurs et 83 avertissements sont sortis ))))
Essayez d'écrire dans une "nouvelle" langue et il y aura moins de fautes difficiles à trouver.
 
Alexey Kozitsyn:
Essayez d'écrire dans une "nouvelle" langue et il y aura moins de fautes difficiles à trouver.
Je suis tombé sur une telle construction dans le tutoriel MQL4 :

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
Pouvons-nous utiliser la "nouvelle" langue également, ou existe-t-il une solution plus moderne ?
 
Maksym Mudrakov:
Je suis tombé sur une telle construction dans le tutoriel MQL4 :

//--------------------------------------------------------------------
start()                    // Специальная функция start()
   {
   while(!IsStopped())     // До тех пор, пока пользователь..
      {                    // ..не прекратит исполнение программы
      RefreshRates();      // Обновление данных
      //......................Здесь указывается основной код программы
      Sleep(5);            // Небольшая пауза
      }
   return;                 // Управление возвращается терминалу
   }
//--------------------------------------------------------------------
peut-on l'appliquer également dans la "nouvelle" langue, ou existe-t-il une solution plus moderne ?
Est-ce dans un script ou un Expert Advisor ?
 
Alexey Kozitsyn:
C'est dans le scénario ou dans l'expert ?
Dans l'expert
 
Maksym Mudrakov:
dans l'examinateur.
Hum... alors ça dépend de ce qui se passe dans le code principal. Si l'envoi d'une commande est une mauvaise option !
 
Alexey Kozitsyn:
Hum... alors cela dépend de ce qui se passe dans le code principal. Si envoyer une commande est mauvais !
Oui, l'envoi d'une commande est possible. Il n'est pas clair pour moi si les cotations doivent être mises à jour de manière forcée, dans le cas où le conseiller expert est en cours d'exécution dans la fenêtre d'un instrument de négociation, mais envoie un ordre pour un autre instrument de négociation. Si, par exemple, les cours de l'EURUSD ne sont pas mis à jour et qu'au même moment, les nouveaux cours du GBPUSD sont reçus. Et si mon conseiller expert est exécuté sur EURUSD, et que je n'exécute pasRefreshRates(), alors le conseiller expert n'enverra pas d'ordre sur GBPUSD, jusqu'à ce que les cotations sur EURUSD soient mises à jour ?
 
Maksym Mudrakov:
Oui, la commande est en cours d'envoi. Il n'est pas clair pour moi si les cotations doivent être mises à jour de manière forcée dans le cas où l'EA est lancé dans la fenêtre d'un symbole mais envoie un ordre pour un autre symbole. Si, par exemple, les cours de l'EURUSD ne sont pas mis à jour et qu'au même moment, les nouveaux cours du GBPUSD sont reçus. Et si mon conseiller expert est exécuté sur EURUSD, et que je n'exécute pasRefreshRates(), alors le conseiller expert n'enverra pas d'ordre sur GBPUSD, jusqu'à ce que les cotations sur EURUSD soient mises à jour ?

Il existe plusieurs façons d'obtenir les prix actuels :

1. Pour n'importe quel symbole : si vous voulez obtenir les prix courants garantis, appelez SymbolInfoDouble() avec les identifiants corrects avant de les utiliser.

2. Pour le symbole actuel, vous pouvez également obtenir les prix actuels grâce aux variables prédéfinies Bid et Ask. Ils peuvent devenir obsolètes, donc si la fonction OnTick() s'exécute pendant une longue période, vous devez les rafraîchir en utilisant RefreshRates().