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

 
Alexey Viktorov:

Juste comme ça.

Merci, juste ce dont j'ai besoin !

 

Bonjour !

Pourriez-vous me conseiller sur cette question ?

Je place un ordre en attente:

bool send1=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,NULL,MagicNumber,0,clrGreen);

Et ensuite, j'essaie de faire un stop suiveur après l'ouverture :

 {
 for(int i=0; i<OrdersTotal(); i++) 
  {
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  if(OrderType()==OP_BUY)
   {
  if(TrailingStop>0)  
    {                 
  if(Bid-OrderOpenPrice()>TrailingStop)
     {
  if(OrderStopLoss()<Bid-TrailingStop)
      {
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,clrRed);
      }
     }
    }
   }
  }
 }

Après son ouverture, l'ordre devient OP_BUY ? Quelle est l'astuce, pourquoi le suivi ne fonctionne pas dans ce cas ?

 
YanSay:

Bonjour !

Pourriez-vous me conseiller sur cette question ?

Je place un ordre en attente:

Et ensuite, j'essaie de faire un stop suiveur après l'ouverture :

Après son ouverture, l'ordre devient OP_BUY ? Quelle est l'astuce, pourquoi le suivi ne fonctionne pas dans ce cas ?

100500 raisons. La première évidence est que Bid-TrailngStop n'est pas normalisé. Il pourrait être encore plus proche du niveau d'arrêt et alors également opaque.
 
YanSay:

Bonjour !

Pourriez-vous me conseiller sur cette question ?

Je place un ordre en attente:

Et ensuite, j'essaie de faire un stop suiveur après l'ouverture :

Après son ouverture, l'ordre devient OP_BUY ? Quelle est l'astuce, pourquoi le suivi ne fonctionne pas dans ce cas ?

TrailingStop en pips ? Multiplier par Point alors.
 

J'ai posé la mauvaise question, désolé. Sorti de son contexte.

Surtout pour tester le code de suivi, les transactions s'ouvrent, mais le suivi ne fonctionne pas, quelle que soit la façon dont je l'ai tourné, l'impasse (

//Вводные
#define  MagicNumber 150
double SL=0;                        //Stop Loss
input int Trailing=100;             //Трэйлинг

//Код

void OnTick()
{
 if (OrdersTotal()==0)
 {
   if(TimeCurrent()>StrToTime("17:59")&&TimeCurrent()<StrToTime("18:01"))
  {
SL = Low[1]-Point; //Стоп лосс
bool send1=OrderSend (Symbol(), OP_BUY,1,Bid,30,SL,0,NULL,MagicNumber,0,clrNONE);
  }
 }
 if (OrdersTotal()>0)
   {
      for (int i=0; i<OrdersTotal (); i++)
    {
   bool select1=OrderSelect (i, SELECT_BY_POS);
   if (OrderMagicNumber() == MagicNumber && OrderSymbol () == Symbol())
     {
   if (OrderType()==OP_BUY)
      {
     if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))
     bool modify1=OrderModify (OrderTicket(),0,Ask-Trailing,OrderTakeProfit(),0,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay:

J'ai posé la mauvaise question, désolé. Sorti de son contexte.

Surtout pour tester le code de suivi, les transactions s'ouvrent, mais le suivi ne fonctionne pas, quelle que soit la façon dont je l'ai tourné, l'impasse (

J'ai répondu à votre question ci-dessus.
 
Vladislav Andruschenko:
J'ai répondu à votre question ci-dessus.
Merci beaucoup, ça m'a aidé !
 
YanSay:
Merci beaucoup, ça m'a aidé !

Vous avez toujours des problèmes là-bas.

La boucle est en avant, elle devrait être en arrière - l'avant sautera les positions après que l'une d'entre elles se ferme sur le chalut.

Il n'y a pas de contrôle de la distance minimale du stop (StopLevel) - il y aura des erreurs de modification si le stop est plus proche du prix que la distance minimale autorisée (n'oubliez pas le spread flottant).

Peut-être autre chose - regardé en diagonale - en passant, puisqu'on vous l'a déjà dit.

ZS. Regardez encore :

if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))

c'est le genre de vérification qui manque l'intérêt même de la vérification avec normalisation, car vous avez normalisé les deux valeurs et lorsque vous vérifiez, le résultat n'est pas normalisé à nouveau.

Vous devez vérifier la différence normalisée des deux valeurs doubles. Vous comparez deux valeurs normalisées.

 
Artyom Trishkin:

Vous avez toujours des problèmes là-bas.

La boucle est en avant ; elle doit être inversée - avec une boucle en avant, les positions seront sautées après que l'une d'entre elles se soit refermée sur le chalut.

Il n'y a pas de contrôle de la distance minimale du stop (StopLevel) - il y aura des erreurs de modification si le stop est plus proche du prix que la distance minimale autorisée (n'oubliez pas le spread flottant).

Peut-être autre chose - regardé en diagonale - en passant, puisqu'on vous l'a déjà dit.

ZS. Regardez encore :

c'est le genre de vérification qui manque l'intérêt même de la vérification avec normalisation, car vous avez normalisé les deux valeurs et lorsque vous vérifiez, le résultat n'est pas normalisé à nouveau.

Vous devez vérifier la différence normalisée de deux doubles valeurs. Vous comparez deux valeurs normalisées.

Comme ça ?

for (int i = OrdersTotal() - 1; i >= 0; --i)
if (NormalizeDouble((Ask-OrderStopLoss()>Trailing*Point),Digits))
 
the size of local variables is too large (more than 512 kb)
Que signifie l'erreur ?


J'ai une fonction avec deux objets :

bool              CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                      int dir);

L'une des classes a une structure comportant plus de 4000 champs (principalement des enums).

Que faire avec cette erreur ?

Raison: