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

 
Mikhail Rudyk:

le robot ne se tient que sur ce graphique mais négocie les mêmes options que pour les robots

Insérez cette ligne.

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 eror=Trade.Buy(lot,symbolName,bid,0,0,comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

mettre

mais je ne pense pas que réinitialiser l'erreur aidera.

 
Mikhail Rudyk:

mais je ne pense pas que réinitialiser l'erreur aidera.

Aussi.

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

void Open(int lot,string comment)
   {
               bool eror=false;
               int step=0;
               if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)==1)
                  {
                           while(eror==false&&step<10)
                              {
                                 double bid=SymbolInfoDouble(symbolName,SYMBOL_BID);
                                 ResetLastError();
                                 // eror=Trade.Buy(lot,symbolName,bid,0,0,comment); // закомментировать
                                 eror=OrderSend(symbolName, OP_BUY, lot, bid, 0, 0, 0, comment);
                                 step++;
                                 Sleep(200);
                                 if(eror==false)Print("error - ",GetLastError());
                              }
                  }
   }
 

J'ai déjà fait ça et ça a marché.

Mais le fait de l'erreur n'est toujours pas résolu.

Merci beaucoup pour votre aide

while(eror==false&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID) ;
ResetLastError() ;
eror=Trade.Acheter(lot,nom du symbole,offre,0,0,commentaire) ;
pas++ ;
Sleep(200) ;
si(eror==false)
{
Print("erreur - ",GetLastError()) ;
if(GetLastError()==4754){OnInit();}
}
}

 
Mikhail Rudyk:

le fait de l'erreur n'est pas résolu.

C'est pourquoi j'ai suggéré cette option.

 
fxsaber:

C'est pourquoi j'ai suggéré cette option.

Eh bien, je vais essayer.

Mais pourquoi la classe standard ne fonctionne-t-elle pas ?

 
Mikhail Rudyk:

Eh bien, je vais essayer.

Mais pourquoi la classe standard ne fonctionne-t-elle pas ?

Si la bibliothèque alternative fonctionne, on saura où creuser.

Je ne peux pas reproduire le problème avec chacune des bibliothèques.

 
Mikhail Rudyk:

J'ai déjà fait ça et ça a marché.

while(eror==false&&&step<10)
{
double bid=SymbolInfoDouble(symbolName,SYMBOL_BID) ;
ResetLastError() ;
eror=Trade.Acheter(lot,nom du symbole,offre,0,0,commentaire) ;
pas++ ;
Sleep(200) ;
si(eror==false)
{
Print("erreur - ",GetLastError()) ;
if(GetLastError()==4754){OnInit();}
}
}

Cela ne devrait pas fonctionner. 4754 se produit lorsque OrdersTotal est supérieur à zéro, mais OrderSelect ou OrderGetTicket se plantent.

C'est très rare, mais pas dans ce cas. Le serveur/symbole est si spécifique ici que la même chose se produit avec les positions, mais avec l'erreur 4753.

Déjà préparé à devoir faire des ajustements à la bible alternative, car les situations qui se présentent tirent beaucoup de logique vers le bas. Pour cela, vous envoyez un ordre de marché, il arrive sur le serveur, crée une position et la ferme à la même milliseconde. Et le terminal reçoit des informations rétroactivement à cause du ping.

J'ai été agréablement surpris que tout fonctionne parfaitement.


Serveur/symbole lui-même dodosil, l'erreur ne s'est pas produite.


SZY La pose ne peut pas être ouverte manuellement, seulement par MQL.

 

Je voulais dire que ça a aidé que le robot ne soit pas suspendu.

 
Mikhail Rudyk:

Je voulais dire que ça aidait le robot à ne pas s'accrocher

Puis montrer OnInit. Pour l'instant, ça ressemble à un non-sens.

Raison: