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

 

Bonsoir ! Je suis presque sûr que cette fonction produira exactement ce que je voulais, enfin presque. Mais la machine ne veut pas compiler, elle jure comme ceci

'}' - tous les chemins de contrôle ne renvoient pas une valeur htghtgfhthf.mq5 61 10 Il lui dit que j'ai un problème de logique, tous les retours ne sont pas spécifiés ici. Oui, ils le sont ! Au contraire, si nous les mettons après chaque opirateur de if, ce sera un non-sens, le programme produira immédiatement un résultat erroné. C'est court et précis. Si vous le pouvez, comment pouvez-vous le faire accepter ?

string OrderType() { 
 string Si="";

 long lo;
 bool Bull=false; 
 Bull =PositionGetInteger(POSITION_TYPE,lo);
 if ( Bull ) {
 if ( lo==POSITION_TYPE_BUY) Si="OP_BUY";
 if ( lo==POSITION_TYPE_SELL) Si="OP_SELL";
 return (Si); }


 // ENUM_ORDER_TYPE ORType;

 Bull =OrderGetInteger(ORDER_TYPE,lo);
 if ( Bull ) {
 if ( lo==ORDER_TYPE_BUY_LIMIT) Si="OP_BUY_LIMIT";
 if ( lo==ORDER_TYPE_SELL_LIMIT) Si="OP_SELL_LIMIT";
 if ( lo==ORDER_TYPE_BUY_STOP) Si="OP_BUY_STOP";
 if ( lo==ORDER_TYPE_SELL_STOP) Si="OP_SELL_STOP";
 return (Si); }

 }
 
Dimka-novitsek:

Bonsoir ! Je suis presque sûr que cette fonction produira exactement ce que je voulais, enfin presque. Mais la machine ne veut pas compiler, elle jure comme ceci

'}' - tous les chemins de contrôle ne retournent pas une valeur htghtgfhthf.mq5 61 10 Cela me dit que j'ai un problème de logique, tous les retours ne sont pas spécifiés à cet endroit. Oui, ils le sont ! Au contraire, si nous les mettons après chaque opirateur de if, ce sera un non-sens, le programme produira immédiatement un résultat erroné. C'est court et précis. Si vous le pouvez, comment pouvez-vous le faire accepter ?

Un conseil : apprenez l'anglais technique. Laissez-moi regarder le code.

Quant au sujet : la fonction doit retourner une valeur de type chaîne de caractères. À l'intérieur de la fonction, nous utilisons l'instruction if, qui contient les instructions de retour. Question : si l'instruction if détecte que Bull == false, que doit retourner la fonction ?

 
Bien sûr, Si="" ! Valeur vide.
 

Aha !!! Merci ! !!

Merci !!!!

 
Dimka-novitsek:

Bonsoir ! Je suis presque sûr que cette fonction produira exactement ce que je voulais, enfin presque. Mais la machine ne veut pas compiler, elle jure comme ceci

'}' - tous les chemins de contrôle ne retournent pas une valeur htghtgfhthf.mq5 61 10 Cela me dit que j'ai un problème de logique, tous les retours ne sont pas spécifiés à cet endroit. Oui, ils le sont ! Au contraire, si vous les mettez après chaque opirateur de si, il y aura un non-sens, le programme produira immédiatement un résultat incorrect. C'est court et précis. Si c'est le cas, comment faire pour qu'il accepte ?

tous les chemins de contrôle ne renvoient pas une valeur - il n'y a pas de contrôle total sur le retour de la valeur.

Cela signifie que dans la chaîne OrderType(), qui doit avoir une valeur de retour puisque le type est différent de void, il n'y a pas de sortie garantie avec une valeur de retour.

Bien que vous ayez défini jusqu'à 2 opérateurs de retour, mais les deux sont protégés par la condition if. Que se passera-t-il si les deux conditions sont fausses ?

Alors la machine peut sauter par la fenêtre à volonté.

D'ailleurs, dans cette fonction, il est plus judicieux d'utiliser un compteur switch, plutôt qu'une série de if, qui font essentiellement le même travail que le switch.

ZZZY Plus, il ne faut pas oublier que la position doit être présélectionnée, ainsi que l'ordre. De plus, il existe une fonction standard EnumToString pour convertir les énumérations en chaînes de caractères. Il n'est donc pas nécessaire de réinventer la roue.

 
MERCI ! !!
 
//+------------------------------------------------------------------+
//|                                                  Sample_Tick.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

int Tick_All;

MqlTick           last_tick;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   Tick_All=0;

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(!SymbolInfoTick(_Symbol,last_tick))
     {
      Print("Failed to get Symbol info!");
     }

   Tick_All++;
   Print(Tick_All,"   ",last_tick.bid,"   ",last_tick.ask,"  ",last_tick.last," ",last_tick.volume);
  }
//+------------------------------------------------------------------+


Je ne comprends pas pourquoi OnTick est appelé alors que le prix ne change pas ?????.

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

 
dentraf:

Je ne comprends pas pourquoi OnTick est déclenché alors que le prix ne change pas ?????.

2012.09.10 11:52:11 Sample_Tick (EURUSD,M5) 493 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:10 Sample_Tick (EURUSD,M5) 492 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:09 Sample_Tick (EURUSD,M5) 491 1.2787 1.2789 1.2788 300000
2012.09.10 11:52:07 Sample_Tick (EURUSD,M5) 490 1.2787 1.2789 1.2788 300000

L'heure de la dernière mise à jour des prix est-elle également inchangée ?
 
Yedelkin:
l'heure de la dernière mise à jour des prix ne change pas non plus ?

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 19 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19
2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 18 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:18

ou

2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 6 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 5 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:11
2012.09.10 15:37:12 Sample_Tick (EURUSD.m,M5) 4 1.27835 1.27845 1.27835 1000000 2012.09.10 14:37:10

 
dentraf:

2012.09.10 15:37:20 Sample_Tick (EURUSD.m,M5) 20 1.27841 1.27852 1.27841 2000000 2012.09.10 14:37:19

L'heure de changement de prix est GMT+3, je crois. A qui appartient ce serveur ?
Raison: