Stops suiveurs et bénéfices suiveurs - page 5

 
Arav007:


3ème Trade's TP= 108.536 [ J'ai fixé ce TP à une telle distance que cela fonctionnera comme s'il n'y avait pas de TP].

Maintenant, selon mes exigences, lorsque le prix sera de 7 pip [103.603] de profit, le Stop Loss du 1er et du 2ème trade deviendra de 1 pip de profit [103.543] et celui du 3ème trade sera de 1 pip de profit.

1er et 2ème trade deviendront disons 1 pip de profit [103.543] et le Stop Loss du 3ème trade restera à 103.386.

Comme dans l'image ci-dessous :

Le 1er ordre GBPUSD a été clôturé avec un profit de 10 pips.

Le 2ème ordre est toujours en cours et son SL a été déplacé.

Pour le 3ème trade, le SL a été déplacé aussi, ce que je ne veux pas.

BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,0, "Buy Order",MagicNumber, 0,Blue);//tp 0
 
deVries:


Merci. C'est une autre façon, et une bonne façon, de ne pas fixer de TP.

Mais qu'en est-il du SL ? Comment puis-je le faire sans la méthode Variable Order Ticket?

Salutations

 
if(OrdersTotal()>0){
 

for(cnt=OrdersTotal()-1;cnt>=0;cnt--){
        
        if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
        if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber){
                
        
                sl     = OrderStopLoss(); // Stop Loss. 
                tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
                
                if(OrderType()==OP_BUY){

if (OrdersTotal()==3){

if (cnt==1){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}    // end of  if (OrdersTotal()==3)

else{    // Looking for 2nd option                           

if (OrdersTotal()==2){                           // 10 pips TP trade can be closed already

if(cnt== 0){

Fixed Stop Loss

}

else{

Trailing Stop Loss

}

}  // End of  if (OrdersTotal()==2)

}  // End of  else

 

Que pensez-vous de cela ? Est-ce que cela convient pour la partie Stop Loss?

 
Arav007:

Que pensez-vous de cela ? Est-ce que c'est correct pour la partie Stop Loss ?


Non, c'est faux.

mais ce que je déteste le plus c'est la façon dont je dois lire

c'est un codage illisible ce que vous avez ici changez votre style en écrivant votre code ! !!!

les lignes vides ne sont pas nécessaires c'est le même que le vôtre

pouvez-vous le faire comme ça ?

if(OrdersTotal()>0)
   {
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
     {
     if(!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() ==  MagicNumber)
        {
        sl     = OrderStopLoss(); // Stop Loss. 
        tStopLoss = NormalizeDouble(OrderStopLoss(), Digits); // Stop Loss. 
        if(OrderType()==OP_BUY)
           {
           if (OrdersTotal()==3) 
              {
              if (cnt==1)
                 {
                 Fixed Stop Loss     
                 }
               else{
                   Trailing Stop Loss
                   }
              }    // end of  if (OrdersTotal()==3)
           else{    // Looking for 2nd option                           
               if (OrdersTotal()==2)
                 {                           // 10 pips TP trade can be closed already
                 if(cnt== 0)
                   {
                   Fixed Stop Loss
                   }
                   else{
                       Trailing Stop Loss
                       }
                 }  // End of  if (OrdersTotal()==2)
   }  // End of  else

pas de lignes vides

il est facile de voir où commence '{' et où se trouve la partie du code où se termine '}'.

il peut arriver que vous ayez plus de 20 transactions ouvertes que vous ne pouvez pas utiliser dans la boucle si (OrdersTotal()==

ou si(cnt==

pourquoi faire cette boucle d'ordre

vous faites cette boucle d'ordre pour passer en revue toutes vos transactions une par une.

Ce que vous devez coder, c'est un BreakEven.

que fait un Stop Loss fixe ? ???

 
deVries:


Non, c'est faux.

mais ce que je déteste le plus, c'est la façon dont je dois lire.

c'est un codage illisible ce que vous avez ici changez votre style d'écriture de votre code ! !!!

les lignes vides ne sont pas nécessaires c'est le même que le vôtre

pouvez-vous le faire comme ça ? ?

pas de lignes vides

il est facile de voir où commence '{' et où se trouve la partie du code où se termine '}'.

il peut arriver que vous ayez plus de 20 transactions ouvertes que vous ne pouvez pas utiliser dans la boucle si (OrdersTotal()==

ou si(cnt==

pourquoi faire cette boucle d'ordre

vous faites cette boucle d'ordre pour passer en revue toutes vos transactions une par une.

Ce que vous devez coder, c'est un BreakEven.

que fait le Fixed Stop Loss ? ???


Désolé, en fait je me sens plus à l'aise avec les lignes vides. Quoi qu'il en soit, je vais le suivre en postant des codes ici.

Je pensais que 'OrdersTotal()' récupérait les ordres 'uniquement' de la paire à laquelle l'EA est attaché.

Mais il est probable qu'il récupère tous les ordres et que nous distinguions les ordres de la paire concernée des autres ordres.

en utilisant cette ligne :

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

N'est-ce pas ?

Par Stop Loss fixe, je veux dire que le Stop Loss "initial" ne bougera pas.

Salutations

 
deVries:


changez votre style en écrivant votre code ! !!!

Les lignes vides ne sont pas nécessaires


C'est une question d'opinion, mais il est généralement considéré comme une bonne pratique d'utiliser des lignes vides (aux endroits logiques) lors du codage. Quoi qu'il en soit, ce n'est pas vraiment quelque chose qui mérite d'être signalé lorsque d'autres codent de cette manière.

Si vous regardez le code source d'Apache ou du noyau Linux (deux projets Open très collaboratifs), vous verrez de nombreuses lignes vides.


SERVEUR WEB APACHE :

AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd,
                                                   void *struct_ptr,
                                                   const char *arg)
{
    int offset = (int)(long)cmd->info;

    *(const char **)((char *)struct_ptr + offset) = arg;

    return NULL;
}

LINUX KERNEL :


static int jz4740_musb_init(struct musb *musb)
{
 musb->xceiv = usb_get_phy(USB_PHY_TYPE_USB2);
 if (!musb->xceiv) {
 pr_err("HS UDC: no transceiver configured\n");
 return -ENODEV;
 }

 /* Silicon does not implement ConfigData register.
 * Set dyn_fifo to avoid reading EP config from hardware.
 */
 musb->dyn_fifo = true;

 musb->isr = jz4740_musb_interrupt;

 return 0;
} 
 
Arav007:


parfois une ligne vide peut être confortable mais pas si vous le faites après chaque ligne écrite

aussi la place des accolades rend la lecture du code plus facile


de MACD pour l'utiliser comme exemple

   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         //--- long position is opened
         if(OrderType()==OP_BUY)
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return;
                    }
                 }
              }
           }
         else // go to short position
           {

            //--- check for trailing stop
            if(TrailingStop>0)
              {
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     //--- modify order and exit
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return;
                    }
                 }
              }
           }
        }
     }

maintenant vous voyez comment comparer le graphique du prix de la devise avec le prix d'ouverture de l'ordre de votre transaction.

vous devez aussi faire quelque chose comme ça...

 
ydrol:

C'est une question d'opinion, mais il est généralement considéré comme une bonne pratique d'utiliser des lignes vides (aux endroits logiques) lors du codage. Quoi qu'il en soit, ce n'est pas vraiment quelque chose qui mérite d'être signalé lorsque d'autres codent de cette manière.

Si vous regardez le code source d'Apache ou du noyau Linux (deux projets Open très collaboratifs), vous verrez de nombreuses lignes vides.


SERVEUR WEB APACHE :

LINUX KERNEL :

le point est qu'avec chaque ligne écrite une ligne vide

il devient difficile de lire de gros codes , vous devez faire défiler le code de haut en bas pour le lire.

et quand il n'y a pas non plus de logique pour placer { }, il est encore plus difficile de trouver des bugs.

 
deVries:


de MACD pour l'utiliser comme exemple

maintenant vous voyez comment comparer le prix du graphique de la devise avec le prix d'ouverture de l'ordre de votre transaction.

vous devez aussi faire quelque chose comme ça...


J'ai une telle fonction de comparaison de prix.

Comment puis-je comparer le 'Commentaire' de l'ordre sélectionné dans OrderSend() comme le numéro magique de l'ordre sélectionné ?

Par exemple, si je veux vérifier si OrderComment() correspond au commentaire de l'ordre sélectionné ?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red) ;

Maintenant, je peux comparer comme ça :

OrderComment()=="Sell Order" // ?

Je peux aussi définir le commentaire de la fonction OrderSend() comme ceci :

string comment_sell="Sell Order" ;

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red) ;

Et ensuite comparer :

if (OrderComment()=="comment_sell") // ?

Salutations

 
Arav007:


J'ai une telle fonction de comparaison de prix.

Comment puis-je comparer le 'Commentaire' de l'ordre sélectionné dans OrderSend() comme le numéro magique de l'ordre sélectionné ?

Par exemple, si je veux vérifier si OrderComment() correspond au commentaire de l'ordre sélectionné ?

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, "Sell Order",MagicNumber, 0,Red) ;

Maintenant, je peux comparer comme ça :

OrderComment()=="Sell Order" // ?

Je peux aussi définir le commentaire de la fonction OrderSend() comme ceci :

string comment_sell="Sell Order" ;

SellOrder=OrderSend(Symbol(), iOrderType_Sell, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice, comment_sell ,MagicNumber, 0,Red) ;

Et ensuite comparer :

if (OrderComment()=="comment_sell") // ?

Salutations


OrderComment peut être écrasé par votre courtier.

vous voulez... Maintenant, selon mes besoins, lorsque le prix sera de 7 pip [103.603] de profit, le Stop Loss du 1er et du 2ème trade deviendra de 1 pip de profit [103.603].

1er et 2ème trade deviendront disons 1 pip de profit [103.543] et le Stop Loss du 3ème trade restera à 103.386.

make extern int BreakEven = 7

         if(OrderType()==OP_BUY)
           {

            //--- check for BreakEven
            if(BreakEven>0)
              {
               if(Bid-OrderOpenPrice()>Point(*10)*BreakEven)
                 {
                  if(OrderStopLoss()<OrderOpenPrice())
                    {
                     //--- modify order
                     if(OrderTakeProfit()>Point)OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point(*10),OrderTakeProfit(),0,Green);
                    }
                 }
              }
           }

(* 10 ) correction chez un courtier à 5 chiffres pour obtenir la valeur du pip

Raison: