[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 534

 
Alex007:
Puisque vous avez été expulsé d'un fil distinct, j'essaie de vous poser la question ici, car je n'ai pas trouvé de question similaire :

J'utilise mon conseiller expert sur MT4. Tout allait bien avant ce post. Aujourd'hui, j'ai décidé de désactiver l'EA, j'ai appuyé sur le bouton approprié de la barre d'outils et au lieu du smiley, il y avait une croix sur le graphique. Et soudain, après ça, un marché s'est ouvert. Un, deux... de plus en plus. J'ai ouvert les paramètres du conseiller expert et activé OnlyBuy dans la fenêtre correspondante (l'EA est toujours désactivé). Le marché a été conclu à nouveau, et il s'agissait d'une vente inversée ! Ensuite, je rouvre les paramètres et je désactive sa capacité à effectuer des transactions (non coché). Cela ne fonctionne pas non plus. Le conseiller expert vit en quelque sorte sa propre vie. Je contacte le service d'assistance et j'obtiens la réponse suivante :" Il s'agit très probablement d'un problème avec votre conseiller expert. Veuillez supprimer votre terminal et en installer un nouveau à partir de notre site sans installer d'autres EAs.
Chers conseillers experts, pourriez-vous nous donner votre avis sur cette question, en particulier sur la partie surlignée. J'aime particulièrement la formulation claire "très probablement". Comment est-ce possible et quel est le problème ?

Vous n'avez pas été mis à la porte, j'ai gentiment laissé entendre qu'il n'y avait pas assez de données.

"Ma voiture ne démarre pas. J'ai appelé le concessionnaire où je l'ai achetée, ils m'ont dit d'appeler le fabricant" - cela me semble correct.

 
Alex007:
Comme j'ai été expulsé d'un fil de discussion distinct, je vais essayer de la poser ici, car je n'ai pas trouvé de question similaire :

J'utilise mon conseiller expert sur MT4. Tout allait bien avant ce post. Aujourd'hui, j'ai décidé de désactiver l'EA, j'ai appuyé sur le bouton approprié de la barre d'outils et au lieu du smiley, il y avait une croix sur le graphique. Et soudain, après ça, un marché s'est ouvert. Un, deux... de plus en plus. J'ai ouvert les paramètres du conseiller expert et activé OnlyBuy dans la fenêtre correspondante (l'EA est toujours désactivé). Le marché a été conclu à nouveau, et il s'agissait d'une vente inversée ! Ensuite, je rouvre les paramètres et je désactive sa capacité à effectuer des transactions (non coché). Cela ne fonctionne pas non plus. Le conseiller expert vit en quelque sorte sa propre vie. Je contacte le service d'assistance et j'obtiens la réponse suivante :" Il s'agit très probablement d'un problème avec votre EA. Veuillez supprimer votre terminal et en installer un nouveau à partir de notre site sans installer d'autres EAs.
Chers conseillers experts, pourriez-vous nous donner votre avis sur cette question, en particulier sur la partie surlignée. J'aime particulièrement la formulation claire "très probablement". Comment est-ce possible et quel est le problème ?
Vous ne pouvez pas dire ce qui ne va pas sans revoir le code. La première chose qui me vient à l'esprit est que deinit() a une condition pour ouvrir une transaction après l'arrêt du programme. D'où vient une telle évaluation ?
 
Je suis désolé - il n'y a pas de miracles ! Je n'ai pas remarqué comment deux MT ont ouvert. J'échangeais avec l'un d'eux, et l'autre échangeait avec la paix. C'est aussi une malchance pour les vieux temps - il semble que je sois doué avec les ordinateurs, et voici quelque chose comme ça .....
 
VladislavVG:

Note - en MKL4, les priorités sont légèrement différentes de celles en C, lire commun. Il est donc préférable de mettre des parenthèses.

Merci ! Maintenant je comprends pourquoi les crochets.

Voici une vieille histoire. J'ai terminé le robot avec une chanson de ma propre composition. J'espère que ça marchera. Et soudain, 'fin du programme' - parenthèse gauche déséquilibrée C:\TeleTRADE\experts\variantprogram.mq4 (365, 1)

Comme toujours, j'ai regardé les parenthèses, je suis désolé. Je ne vois rien. Qu'est-ce que ça peut être encore ?

int Profit=0;                                
    for (i=0; i<OrdersHistoryTotal(); i++)
   {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
   {
    if(OrderSymbol()!= Symbol()) continue;
    if(OrderType()>=2)continue;
    Profit+=OrderProfit();     }}
    
 
 
 if(Profit>AccountBalance()){  
   for(i=0;i<=OrdersTotal();i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == true)
 { if(OrderSymbol(!= Symbol()) continue;
   if (OrderMagicNumber() != 450) continue;
   if(OrderType()==OP_SELL) 
  OrderClose(OrderTicket(),OrderLots(),Ask,6,Red);
   if(OrderType()==OP_BUY)
  OrderClose(OrderTicket(),OrderLots(),Bid,6,Red);}}} 
//----
   return(0);
  }
//+------------------------------------------------------------------+

//------- :  Коды ошибок
string ErrorDescript(int error_code){string error_string;switch(error_code){
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                               
 

Ugh ! ! Je pense que j'ai enlevé les parenthèses supplémentaires.

 
Dimka-novitsek:

Merci ! [Rires] Maintenant je sais pourquoi les crochets.

...

Les amis, pouvez-vous me dire si cela est autorisé ou si j'ai manqué quelque chose ?

if(OrderType()>=2)continue;
 
paladin80:

Les amis, pouvez-vous me dire si cela est autorisé ou si j'ai manqué quelque chose ?


Pourquoi pas, c'est un habitué de l'int

Une autre chose est que dans toute prochaine construction, les codes pour l'achat et la vente peuvent changer et le code cessera de fonctionner brusquement.

 
ilunga:

Pourquoi pas, c'est un int normal

De plus, dans la prochaine version, les codes d'achat et de vente peuvent être modifiés et le code cessera de fonctionner brusquement.

Oui, c'est logique. C'est mieux :

if(OrderType()=OP_BUY || OrderType()=OP_SELL) continue;
Dimych, si le compilateur indique un endroit où il manque une parenthèse, cela ne signifie pas que c'est l'endroit où il faut chercher. Parfois, si une parenthèse est mal placée (ou manquante) au début du code, l'erreur apparaîtra à la fin. Vous pouvez donc le chercher dans le commentaire /* ... */.
 
paladin80:

Oui, c'est logique. C'est mieux comme ça, alors :

Dimy, si le compilateur montre un endroit où il manque une parenthèse, cela ne veut pas dire qu'il faut chercher là. Parfois, si une parenthèse est mal placée (ou manquante) au début du code, l'erreur apparaîtra à la fin. Recherchez-la donc en commentant le code /* ... */.

Mais pas comme ça-) "=" n'est pas une condition, mais une opération d'affectation.

Alors ça devrait être comme ça :

if(OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;

ou encore mieux comme ceci (pour que vous n'ayez pas à l'utiliser deux fois)

int type = OrderType(); 
if(type!=OP_BUY && type!=OP_SELL) continue;
 
ilunga:

Pas comme ça...) "=" n'est pas une condition, mais une opération d'affectation.

Alors faites comme ça :

Ou mieux encore, comme ceci (pour que vous n'ayez pas à vous y reprendre à deux fois).

Le tien est meilleur, j'ai oublié de le mettre). On devrait probablement dire "||" au lieu de "&&".
Raison: