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

 

Bonjour à tous, juste un petit rappel sur le fil de discussion : Il y a une question dans le code :

int stoplevel;
int  MinimumUseStopLevel;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = fmax(SymbolInfoInteger(_Symbol,MODE_FREEZELEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = fmax(MinimumUseStopLevel, stoplevel);

Lors de la compilation, il génère un avertissement :"perte possible de données due à la conversion de type ...". De quoi a-t-il besoin ? Ce n'est pas si important, mais j'aimerais savoir.


Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Часто возникает необходимость преобразовать один числовой тип в другой. Не каждый числовой тип допустимо преобразовать в другой, допустимые преобразования в MQL5 показаны на схеме: Сплошные линии со стрелками обозначают преобразования, которые выполняются без потери информации. Вместо типа char может выступать тип bool (оба занимают в памяти 1...
 
Sayberix:

Bonjour à tous, juste un petit rappel sur le fil de discussion : Il y a une question dans le code :

Lors de la compilation, il génère un avertissement :"perte possible de données due à la conversion de type ...". De quoi a-t-il besoin ? Pas si critique, mais j'aimerais savoir.


Le moteur du site lui-même a inséré un lien vers la réponse, et on y trouve un exemple de conversion de type explicite ..........

//--- ускорение свободного падения
   double g=9.8;
   double round_g=(int)g;
   double math_round_g=MathRound(g);
   Print("round_g = ",round_g);
   Print("math_round_g =",math_round_g);
/*
   Результат:
   round_g = 9
   math_round_g = 10
*/
 
Sayberix:

Bonjour à tous, juste un petit rappel sur le fil de discussion : Il y a une question dans le code :

Lors de la compilation, il génère un avertissement :"perte possible de données due à la conversion de type ...". De quoi a-t-il besoin ? Ce n'est pas si crucial, mais j'aimerais savoir.


Vous avez non seulement un avertissement mais aussi une erreur. Etes-vous sûr que c'est ce code particulier que vous compilez ?

C'est comme ça que ça devrait être :

   int stoplevel=0;
   int MinimumUseStopLevel=0;

// Calculate stoplevel as max of either STOPLEVEL or FREEZELEVEL
   stoplevel = int(fmax(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL), SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL)));
// Then calculate the stoplevel as max of either this stoplevel or MinimumUseStopLevel
   stoplevel = int(fmax((int)MinimumUseStopLevel,(int)stoplevel));

C'est juste sans creuser dans le code - pour ne pas avoir d'erreurs et d'avertissements.

Et si tu y penses, tu mélanges le chaud et le mouillé.

 
Artyom Trishkin:

Non seulement vous avez un avertissement, mais vous avez aussi une erreur. Êtes-vous sûr que c'est le code que vous compilez ?

C'est comme ça que ça devrait être :

C'est juste sans creuser dans le code - pour ne pas avoir d'erreurs et d'avertissements.

Et si tu y réfléchis, tu mélanges les choses.

Merci.

Ne me grondez pas, je ne fais qu'apprendre - j'essaie de comprendre le code des autres. Il me semble que c'est le moyen le plus rapide d'apprendre.

Je ne comprends pas pourquoi il a besoin d'une conversion de type, si toutes les variables sont int et les valeurs de retour via symbolinfointeger ?

 
Sayberix:

Merci.

Ne me grondez pas trop, je ne fais qu'apprendre - j'essaie de donner un sens au code des autres. Il me semble que c'est le moyen le plus rapide d'apprendre.

Je ne comprends pas pourquoi il faut une conversion de type, si toutes les variables sont int et les valeurs de retour via symbolinfointeger ?

SymbolInfoInteger() renvoie une valeur longue
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
Документация по MQL5: Получение рыночной информации / SymbolInfoInteger
  • www.mql5.com
2. Возвращает true или false в зависимости от успешности выполнения функции.  В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром. Если функция используется для получения информации о последнем тике, то лучше использовать SymbolInfoTick(). Вполне возможно, что по данному символу с...
 

Bonne journée chers programmateurs !

Comment puis-je faire en sorte que mon EA ouvre des positions indépendamment des positions ouvertes manuellement ou d'autres positions ouvertes par un autre EA ? J'ai essayé de le faire avec de la magie, mais ça n'a pas marché. J'ai essayé de le faire avec de la magie, mais ça n'a pas marché :

datetime some_time=TimeCurrent();
extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                      
double SL=50;                                   
double TP=50;                       
double Lots=3;       

      
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
 
              
if ((Close[0]>High[1])&&(OrderMagicNumber() != MagicNumber)) 
{
send=OrderSend(Symbol3,OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(OrderMagicNumber() != MagicNumber))
{
send=OrderSend(Symbol3,OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}
 
Alexey Belyakov:

Bonne journée chers programmateurs !

Comment puis-je faire en sorte que mon EA ouvre des positions indépendamment des positions ouvertes manuellement ou d'autres positions ouvertes par un autre EA ? J'ai essayé de le faire avec de la magie, mais ça n'a pas marché. Voici le code :


Il vous manque des champs et aucun ordre n'est sélectionné pour vérifier le numéro.

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != _Symbol)continue;
      if(OrderMagicNumber() != magic)continue;     
n++;
}

if(n == 0){
OrderSend(_Symbol, _type, lot, price, 0, sl, tp, comment, magic, 0, clrNONE);
}
 
Comment retirer de l'argent d'un compte

 
Aide... Je l'ai mis et je ne peux pas l'enlever.
 
Georgiy Liashchenko:


Vous avez des champs manquants et l'ordre de vérification du numéro n'est pas mis en évidence.

Je l'ai fait. Je ne l'ai pas fait. Il s'ouvre par paquets. Magic l'ignore.


datetime some_time=TimeCurrent();
//extern string Symbol3 = ""; //Инструмент (""текущий по умолчанию)
extern int P=1;          //Таймфрейм
extern int MagicNumber = 100500;


int start()
{

int send;
                                     
double SL=200;                                   
double TP=200;                       
double Lots=1;       

int n = 0;
for(int i = OrdersTotal(); i >= 0; i--) 
{
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if(OrderSymbol() != "EURUSD")continue;
      if(OrderMagicNumber() != MagicNumber)continue;     
n++;
}
          
//&&(OrderMagicNumber() == MagicNumber)
//&&(OrdersTotal() ==0)&&    
             
if ((Close[0]>High[1])&&(n==0))
{
send=OrderSend("EURUSD",OP_BUY,Lots,Ask,3,Bid-SL*Point,Bid+TP*Point,MagicNumber);
}

if ((Close[0]<Low[1])&&(n==0))  
{
send=OrderSend("EURUSD",OP_SELL,Lots,Bid,3,Ask+SL*Point,Ask-TP*Point,MagicNumber);
}

return(0);
}