Questions des débutants MQL5 MT5 MetaTrader 5 - page 414

 
Leanid Aladzyeu:

crache

perte possible de données due à la conversion de type .mq4 1697 29

type Doble à SL.

Le compilateur est strict de nos jours, cela devrait être comme ceci, MarketInfo retourne le type double

sl = NormalizeDouble(sl,(int)MarketInfo(Symbol(),MODE_DIGITS));
 
Alexey Volchanskiy:

Le compilateur est strict de nos jours, cela devrait être comme ceci, MarketInfo retourne le type double

La variable "sumbol" est correcte, je la considère comme une variable dans le wrapper du modificateur.

Merci j'ai mis(int) et tout est bon.

Je ne sais pas comment j'ai fait avant ; mon expérience dans l'écriture d'EAs est de 21 jours)).

Je ne sais pas depuis combien de temps j'écris mes EA et je ne sais pas comment le faire correctement).

 

Leanid Aladzyeu:

Je ne sais plus comment je faisais pour écrire des EA (je les écris depuis 21 jours)). Et mon EA se hisse constamment au sommet des EA gratuites))

Eh bien, vous avez beaucoup de chance, jusqu'à la version 600, l'ancien MQL4 était horrible ;)) Veuillez m'envoyer le lien vers mon EA, qui se trouve peut-être dans votre boîte aux lettres.
 
Alexey Volchanskiy:
Eh bien, alors vous avez beaucoup de chance, jusqu'à la version 600, l'ancien MQL4 était horrible ;)) Veuillez m'envoyer le lien vers le conseiller expert MQL4.
A mon surnom et à mon produit.
 

Pour une raison quelconque, il y a une erreur sur la dernière ligne.

'}' - tous les chemins de contrôle ne renvoient pas une valeur Expert4.mq4

Toute fonction non vide doit se terminer par l'opérateur return.

Je regarde juste ce code à partir du tutoriel vidéo, mais il se peut que ce soit pour une ancienne version.



#include#include <stderror.mqh>

//+------------------------------------------------------------------+
//|Expert4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#propriété lien ""
#propriété version "1.00"
#propriété stricte

int signal = 1 ;

int start()
{
si (signal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue) ;
}
retour(0) ;
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError() ;
err = 0 ;
bool exit_loop = false ;
int ticket = -1 ;

int Retry = 10 ;
int cnt = 0 ;
si (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, prix, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color) ;
err = GetLastError() ;

switch(err)
{
cas ERR_NO_ERROR :
exit_loop = true ;
pause ;

{ cas ERR_SERVER_BUSY :
cas ERR_NO_CONNECTION :
cas ERR_INVALID_PRICE :
cas ERR_OFF_QUOTES :
cas ERR_BROKER_BUSY :
cas ERR_TRADE_CONTEXT_BUSY :
cnt++ ;
pause ;

cas ERR_PRICE_CHANGED :


RefreshRates() ;
continuer ;

par défaut :
exit_loop +true ;
pause ;

}
si (cnt> Retry)
exit_loop = true ;


si (!exit_loop)
{
Sleep(1000) ;
RefreshRates() ;

}
sinon
{
si(err != ERR_NO_ERROR)
{
Print ("ERROR : " + err) ;

}

}

si(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES) ;
retour(ticket) ;
}

Print("Erreur : l'ouverture de l'ordre a échoué après" + cnt + "tentatives") ;
retour(-1) ;


}//while
}//if
}//exit
 
Mikhail Nikolaev:

Ici....

}


}


retour(ticket) ;

}

 
Mikhail Nikolaev:

Leanid Aladzyeu:

Insérer le code correctement dans le forum

 
Mikhail Nikolaev:

Pour une raison quelconque, il y a une erreur sur la dernière ligne.

'}' - tous les chemins de contrôle ne renvoient pas une valeur Expert4.mq4

Toute fonction non vide doit se terminer par l'opérateur return.

Je viens de voir ce code dans le tutoriel vidéo mais il se peut que ce soit pour des anciennes constructions.



#include#include <stderror.mqh>

//+------------------------------------------------------------------+
//|Expert4.mq4 |
//|Mikhail |
//||
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#propriété lien ""
#propriété version "1.00"
#propriété stricte

int signal = 1 ;

int start()
{
si (signal == 1)
{
OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue) ;
}
retour(0) ;
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
double takeprofit,string comment=NULL,int magic=0,datetime expiration=0,color arrow_color=CLR_NONE)
{
int err = GetLastError() ;
err = 0 ;
bool exit_loop = false ;
int ticket = -1 ;

int Retry = 10 ;
int cnt = 0 ;
si (cmd == OP_BUY || cmd == OP_SELL)
{
while(!exit_loop)
{
ticket = OrderSend(symbol, cmd, volume, prix, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color) ;
err = GetLastError() ;

switch(err)
{
cas ERR_NO_ERROR :
exit_loop = true ;
pause ;

{ cas ERR_SERVER_BUSY :
cas ERR_NO_CONNECTION :
cas ERR_INVALID_PRICE :
cas ERR_OFF_QUOTES :
cas ERR_BROKER_BUSY :
cas ERR_TRADE_CONTEXT_BUSY :
cnt++ ;
pause ;

cas ERR_PRICE_CHANGED :


RefreshRates() ;
continuer ;

par défaut :
exit_loop +true ;
pause ;

}
si (cnt> Retry)
exit_loop = true ;


si (!exit_loop)
{
Sleep(1000) ;
RefreshRates() ;

}
sinon
{
si(err != ERR_NO_ERROR)
{
Print ("ERROR : " + err) ;

}

}

si(err == ERR_NO_ERROR)
{
OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES) ;
retour(ticket) ;
}

Print("Erreur : l'ouverture de l'ordre a échoué après" + cnt + "tentatives") ;
retour(-1) ;


}//while
}//if
}//exit

Mec, c'est vraiment si difficile de formater le code ? Je ne le regarde même pas par principe - c'est une douleur pour les yeux.
 
Je suis encore en retard, ça ne rentre pas.
 
Leanid Aladzyeu:
Je suis encore en retard, je n'arrive pas à l'adapter.

C'est bon, quel navigateur utilisez-vous ? Essayez d'en changer. J'ai FFox. J'ai donné la réponse dans les commentaires du code à la toute fin.

#include <stderror.mqh>
//+------------------------------------------------------------------+
//|                                                      Expert4.mq4 |
//|                                                          Mikhail |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Mikhail"
#property link      ""
#property version   "1.00"
#property strict

int signal = 1;

int start()
{
   if (signal == 1)
   {
      OrderSendX (Symbol(), OP_BUY, 0.2, Ask, 30, 0, 0, "Test", 123, 0, Blue);
   }
   return(0);
}
//+------------------------------------------------------------------+
int OrderSendX (string symbol, int cmd, double volume, double price, int slippage,double stoploss,
               double takeprofit, string comment=NULL, int magic=0, datetime expiration=0,color arrow_color=CLR_NONE)
{
   int err = GetLastError();
   err = 0;
   bool exit_loop = false;
   int ticket = -1;
  
   int Retry = 10;
   int cnt = 0;
   if (cmd == OP_BUY || cmd == OP_SELL)
   {
      while(!exit_loop)
      {
         ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment,magic, expiration, arrow_color);
         err = GetLastError();
        
         switch(err)
         {
            case ERR_NO_ERROR:
            exit_loop = true;
            break;
           
            case ERR_SERVER_BUSY:
            case ERR_NO_CONNECTION:
            case ERR_INVALID_PRICE:
            case ERR_OFF_QUOTES:
            case ERR_BROKER_BUSY:
            case ERR_TRADE_CONTEXT_BUSY:
            cnt++;
            break;
           
            case ERR_PRICE_CHANGED:
           
          
            RefreshRates();
            continue;
           
            default:
               exit_loop +true;
               break;
         
         }
         if (cnt> Retry)
            exit_loop = true;
          
           
         if (!exit_loop)
            {
               Sleep(1000);
               RefreshRates();
              
            }
            else
               {
                  if(err != ERR_NO_ERROR)
                  {
                  Print ("ERROR: " + err);
                 
                  }
            
               }
              
               if(err == ERR_NO_ERROR)
               {
                  OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES);
                  return(ticket);
               }
              
               Print("Error: order open failed after" + cnt + "atempts");
               return(-1);
           
           
}//while
}//if
// тут надо вернуть какое-то значение, компилятор не понимает, что у вас есть return-ы внутри while, он не умеет анализировать код. Он ожидает, что при выходе из функции будет возвращаться значение
}//exit