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

 
Alexey Kozitsyn:

Utiliser une variable de type énumération ENUM_TIMEFRAMES.

Merci !
 
Alexey Kozitsyn:

Utiliser une variable de type énumération ENUM_TIMEFRAMES.

Puis-je laisser seulement quelques-uns de tous les nombres premiers dans l'énumération ? Ainsi, lorsque je sélectionne dans les paramètres, je n'en vois que deux, par exemple.
 
barudkinarseniy:
Puis-je laisser seulement quelques-unes de toutes les primes dans la liste ? Ainsi, lorsque je sélectionne des paramètres dans les réglages, je n'en vois que deux, par exemple.

Vous pouvez le faire, mais vous devez écrire votre propre énumération.

enum ENUM_ORDER_TYPE
{
   Buy  = ORDER_TYPE_BUY,
   Sell = ORDER_TYPE_SELL
};

input ENUM_ORDER_TYPE typeOrder; // Выбери тип ордера

Pour mql4, au lieu de ORDER_TYPE_BUY, nous devrions écrire OP_BUY, respectivement pour Sell

 
Alexey Viktorov:

Vous pouvez le faire, mais vous devez écrire votre propre énumération.

Pour mql4, au lieu de ORDER_TYPE_BUY vous devriez écrire OP_BUY, respectivement pour Sell

Je l'ai eu, merci))
 
OlegKirill:

Veuillez m'indiquer comment corriger cette erreur

Modification de l'ordre #1506271459 buy 0.11 EURJPY at 122.824 sl : 0.000 tp : 0.000 -> sl : 0.000 tp : 122.843 failed [Invalid S/L or T/P].


 
Karputov Vladimir:
OlegKirill:

Veuillez m'indiquer comment corriger cette erreur

La demande de l'ordre #1506271459 acheter 0.11 EURJPY à 122.824 sl : 0.000 tp : 0.000 -> sl : 0.000 tp : 122.843 a échoué [Invalid S/L or T/P].


Cela dépend de ce dont il s'agit, si le stop est fixé à un niveau inférieur au minimum et que le terminal renvoie un stop nul, alors c'est difficile. Si le problème vient de l'échelon de prix, j'utilise cette fonction.

double normalize(string symbol,double value)
  {
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   if(ts==0)return(value);
   return(NormalizeDouble(value/ts,0)*ts);
  }

exemple d'utilisation lors de l'ouverture d'une position

   if(type==ORDER_TYPE_BUY)
     {
      double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      if(NormalizeDouble(normalize(_Symbol,ask),digits)!=NormalizeDouble(ask,digits))return;
      trade.Buy(volume,_Symbol,0,0,0,CommentOrder);
     }

exemple d'utilisation lors de la modification

         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
           {
            sl=NormalizeDouble(normalize(symbol,bid-sl*point),digits);
            tp=PositionGetDouble(POSITION_TP);
            //Print(__FUNCTION__,": sl = ",sl," tp = ",tp);
            if(sl>0)trade.PositionModify(tiket,sl,tp);
           }

..

 
Merci, je vais essayer.
 
A propos de mql5. Pourquoi, contrairement à mql4, TimeLocal() ne change que lors d'un nouveau tick / d'un nouveau décalage du graphique / d'un changement d'échelle du graphique, mais pas en continu ? De même avec GetTickCount etGetMicrosecondCount. Existe-t-il un moyen de faire en sorte que l'"horloge" TimeLocal se déplace uniformément et continuellement sans "tics" ?
 
Dream11:

Bonjour, voici le problème... il y a une fonction de trailing stop...

   double tr=0,MATrall=0,op=0,sl=0,
   ask   = NormalizeDouble(Ask,Digits()),
   bid   = NormalizeDouble(Bid,Digits());
   tr = NormalizeDouble(TrailingStop*Point(),Digits());
   MATrall = iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,1);
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==Symbol())
           {
             if(OrderMagicNumber()==Magic)
              {
              op    = NormalizeDouble(OrderOpenPrice(),Digits());
              sl    = NormalizeDouble(OrderStopLoss(),Digits());
                 if(OrderType()==OP_BUY)
                 {
                 if((bid-op)>tr)
                 if((bid-sl)>tr)
                 if ((bid-tr)>MATrall)
                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MATrall,Digits()),OrderTakeProfit(),0,clrRed)==false)
                 printf("ERROR BUY Modifi");
                 }
                  if(OrderType()==OP_SELL)
                 {
                 if((op-ask)>tr)
                 if((sl-ask)>tr || sl==0)
                 if((ask+tr)<MATrall)
                 if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MATrall,Digits()),OrderTakeProfit(),0,clrRed)==false)
                 printf("ERROR SELL Modifi");
                 }
              }
           }
        }
     }

Comment le modifier pour qu'il parcoure un nombre illimité de commandes au lieu d'une seule ...


 
loleg1991:
A propos de mql5. Pourquoi, contrairement à mql4, TimeLocal() ne change que lors d'un nouveau tick / d'un nouveau décalage du graphique / d'un changement d'échelle du graphique, mais pas en continu ? De même avec GetTickCount etGetMicrosecondCount. Peut-être existe-t-il un moyen de faire en sorte que l'"horloge" TimeLocal se déplace uniformément et continuellement sans "tics" ?
N'est-il pas possible de le faire avec OnTimer() ?