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

 
Arav007:


Désolé, je suis un peu confus.

if(iOpenOrders_Buy = 3)

Ici, si le total des ordres d'achat ouverts est égal à '3', le code passe à la partie suivante.

if(iOpenOrders_Buy > 0 )

Si le nombre total d'ordres d'achat ouverts est supérieur à '0', le code passe à la partie suivante.

if(iOpenOrders_Buy == 3)

Ensuite, si le nombre d'ordres d'achat ouverts est égal à 3, alors il ouvrira le BuyOrder_1, s'il est égal à '2', il ouvrira le BuyOrder_2 et ensuite leBuyOrder_3 si le nombre d'ordres d'achat ouverts est égal à 1.

Ai-je raison ?

double dTakeProfitPrice_1=10;

double dTakeProfitPrice_2=20;

double dTakeProfitPrice_3=0;
double BuyOrder_1,.......,.......;
if (Buy Condition Met && iOpenOrders_Buy == 0)
{

iOpenOrders_Buy = 3;

{

if(iOpenOrders_Buy  > 0) // we have to open new Buy orders

{

if(iOpenOrders_Buy == 3)
         {
         BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);
         if(BuyOrder_1 > 0).......
         

         }
if(iOpenOrders_Buy == 2)
         {
         BuyOrder_2=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",MagicNumber, 0,Blue);
....



if(iOpenOrders_Buy == 1)
         {
         BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",MagicNumber, 0,Blue);
....
}

Vous avez raison, regardez à nouveau le code modifié, est-ce que c'est correct ?
 
deVries:

Vous avez raison, regardez à nouveau le code modifié, est-ce que c'est correct ?


Je ne pense pas.

if (Condition d'achat remplie && iOpenOrders_Buy == 0)

Cela signifie que la 'Condition d'achat est remplie' et qu'il n'y a pas d'ordres d'achat ouverts, n'est-ce pas ?

alors le code passera à la ligne suivante où iOpenOrders_Buy = 3;

Donc il est dit à l'EA qu'il y a déjà 3 ordres ouverts ici, n'est-ce pas ?

Mais si j'entre dans le code en sachant qu'il n'y a pas d'ordres d'achat ouverts, alors pourquoi assigner iOpenOrders_Buy = 3; ?

De plus, l'objectif est que l'une des trois transactions continue à fonctionner et que seul un 'nouvel' ordre d'achat soit ouvert lorsque la dernière transaction sera fermée.

Cela doit donc être

if(iOpenOrders_Buy== 0) // Il n'y a pas d'ordre d'achat ouvert, nous devons donc ouvrir de nouveaux ordres d'achat.


Lorsque l'EA obtient la condition d'achat, il ouvre trois transactions avec des prises de profits différentes.

Ensuite, si deux des trades sont fermés de toute façon (soit par le TP ou le SL), le troisième continuera à fonctionner.

 double dTakeProfitPrice_1=10;

double dTakeProfitPrice_2=20;

double dTakeProfitPrice_3=0;

double BuyOrder_1,BuyOrder_2,BuyOrder_3;  

iMaxOrders=3; 

iOpenOrders_Buy = CntOrd(iOrderType_Buy,MagicNumber,Symbol());  //counting open buy orders. 

if (Buy Condition Met && iOpenOrders_Buy ==0) //Buy condition has met and there is no Open Buy Order

{ 

if(iOpenOrders_Buy < iMaxOrders) //This will Limit the desired number of orders; Though this is not necessary.

{

BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue); 

//First order opened with TP1 

BuyOrder_2=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",MagicNumber, 0,Blue);

//Second order opened with TP2  

BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",MagicNumber, 0,Blue);

////Third order opened with TP3  

} 

} 

else{

print ("There is already a Running Order")

} 

Que pensez-vous de cela ? Est-ce que cela fonctionnerait comme indiqué ci-dessus ?

Salutations

 
Arav007:


Je ne pense pas.


Que pensez-vous de cela ? Cela aurait-il le même effet que celui indiqué ci-dessus ?

Salutations

non, que se passe-t-il si les ordres ne sont pas exécutés, comment vérifiez-vous quelle transaction vous devez ouvrir si l'une d'entre elles échoue ?

pourquoi assigner iOpenOrders_Buy = 3; ?

vous devez ouvrir 3 nouveaux trades si les ordres réussissent, donnez une nouvelle valeur à iOpenOrders_Buy.

Si iOpenOrders_Buy devient 0, nous avons nos 3 transactions.

 
deVries:

non, que se passe-t-il si les ordres ne réussissent pas, comment vérifier quelle transaction vous devez ouvrir si l'une d'elles échoue ?

pourquoi assigner iOpenOrders_Buy = 3; ?

vous devez ouvrir 3 nouvelles positions si la fin des ordres réussit, ce qui donne une nouvelle valeur à iOpenOrders_Buy.

Si iOpenOrders_Buy devient 0, nous avons nos 3 transactions.

int iLastError;

 for (count=iMaxOrders; count>0; count--)

{

if (count==3) {

 BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_1>0) //Checking if the order was opened or not

{ 

Print( "Buy Order 1 Opened successfully");

}

else {

 Print( "Order Sending Error");

iLastError = GetLastError();

iMaxOrders=3; //Setting iMaxOrders to 3 again thus it goes back and try to open that order again

} 

}

 if (count==2) {

 BuyOrder_2=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_2>0) {

Print( "Buy Order 2 Opened successfully");

}

else {

 Print( "Order Sending Error");

iLastError = GetLastError();

iMaxOrders=2;

}  

}

if (count==1) {

 BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_3>0) {

Print( "Buy Order 3 Opened successfully");

}

else {

 Print( "Order Sending Error");

iLastError = GetLastError();

iMaxOrders=1;

}  

}

} 

Oui, il est tout à fait possible que 'Ordersend()' ne parvienne pas à ouvrir un ordre.

J'ai maintenant compris pourquoi

if(iOpenOrders_Buy > 0 ) // nous devons ouvrir de nouveaux ordres d'achat.

était utilisé dans votre code. Comme nous avons déjà défini iopendOrders=3, cela va le vérifier.

Mais plus tard, j'ai été confus sur la façon dont la valeur de iopendOrders va continuer à changer.

Probablement à cause de mon cerveau limité, je n'ai pas réussi à comprendre le mécanisme. J'ai donc essayé de mettre en œuvre votre logique de la manière ci-dessus.

Est-ce que c'est ce que vous avez indiqué dans votre code ?

Salutations

 
Arav007:

Oui, il est tout à fait possible que 'Ordersend()' ne parvienne pas à ouvrir l'ordre.

J'ai maintenant compris pourquoi

if(iOpenOrders_Buy > 0 ) // nous devons ouvrir de nouveaux ordres d'achat.

était utilisé dans votre code. Comme nous avons déjà défini iopendOrders=3, cela va le vérifier.

Mais plus tard, j'ai été confus sur la façon dont la valeur de iopendOrders va continuer à changer.

Probablement à cause de mon cerveau limité, je n'ai pas réussi à comprendre le mécanisme. J'ai donc essayé d'implémenter votre logique de la manière décrite ci-dessus.

Est-ce que c'est ce que vous avez indiqué dans votre code ?

Salutations


if (BuyOrder_1>0) //Checking if the order was opened or not

{ 

Print( "Buy Order 1 Opened successfully");
count = count - 1;
}

 
deVries:



S'il vous plaît ne vous dérange pas mais encore une fois je suis confus !

Si j'utilise

count=count-1 ; après

Print( "Buy Order 1 Opened successfully") ;

cela signifie que si le premier ordre d'achat a été ouvert, alors la valeur de count sera diminuée de 1.

Ainsi, en entrant dans la fonction suivante, voici la condition 'if' suivante :

if (count==2) {}

la valeur du compte est devenue '2'. [count=3-1=2]

Est-ce correct ?

 
Arav007:


S'il vous plaît ne vous dérange pas mais encore une fois je suis confus !

Si j'utilise

count=count-1 ; après

Print( "Buy Order 1 Opened successfully") ;

cela signifie que si le premier ordre d'achat a été ouvert, alors la valeur de count sera diminuée de 1.

Donc, en entrant dans la fonction suivante, voici la condition 'if' suivante :

if (count==2) {}

la valeur du compte est devenue '2'. [count=3-1=2]

Est-ce correct ?


essayez-le.... faire quelques tests
 
deVries:

Essayez-le.... faire quelques essais


Je suis fatigué et voici le résultat.

Je n'ai probablement pas pu placer le code "Fermeture de l'ordre de vente avant l'achat" au bon endroit. D'où l'obtention d'un ordre de vente et d'achat alors que c'est contraire au code d'origine.

Et il y a "4" ordres d'achat en tout !

J'ai échoué :(

                double OpenPrice=Ask;

                double  dTakeProfitPrice_1,dTakeProfitPrice_2,dTakeProfitPrice_3;
                dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits);
                dTakeProfitPrice_1 = NormalizeDouble(OpenPrice + TakeProfit_1 * dPip,Digits);
                dTakeProfitPrice_2 = NormalizeDouble(OpenPrice + TakeProfit_2 * dPip,Digits);
                dTakeProfitPrice_3 = NormalizeDouble(OpenPrice + TakeProfit_3 * dPip,Digits);
                
 for (int count=iMaxOrders; count>0; count--)

{

if (count==3) {

 BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_1>0) //Checking if the order was opened or not

{ 

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 1 sent successfully. Ticket=" + BuyOrder_1;
                                iLastError = 0;
                                count = count - 1; 

}

else {

 iLastError = GetLastError();
                                
                                sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 1. Error code=" + ErrorDescription(iLastError);

iMaxOrders=3; //Setting iMaxOrders to 3 again thus it goes back and try to open that order again

} 

}

 if (count==2) {

 BuyOrder_2=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_2>0) { 

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 2 sent successfully. Ticket=" + BuyOrder_2;
                                iLastError = 0;
                                count = count - 1; 

}

else {

 iLastError = GetLastError();
                                
                                sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 2. Error code=" + ErrorDescription(iLastError);

iMaxOrders=2; //Setting iMaxOrders to 2 again thus it goes back and try to open that order again

} 

}

if (count==1) {

 BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",MagicNumber, 0,Blue);

if (BuyOrder_3>0) {

sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 2 sent successfully. Ticket=" + BuyOrder_3;
                                iLastError = 0;
                                count = count - 1; 
}

else {

  iLastError = GetLastError();
                                
                                sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 2. Error code=" + ErrorDescription(iLastError);

iMaxOrders=1; //Setting iMaxOrders to 1 again thus it goes back and try to open that order again

}  

}
 

opps, j'ai oublié de mettre iOpenOrders_Buy ==0

Maintenant je le teste à nouveau avec ceci.

 
double OpenPrice=Ask;

double  dTakeProfitPrice_1,dTakeProfitPrice_2,dTakeProfitPrice_3;
dStopLossPrice = NormalizeDouble(OpenPrice - StopLoss * dPip,Digits);
dTakeProfitPrice_1 = NormalizeDouble(OpenPrice + TakeProfit_1 * dPip,Digits);
dTakeProfitPrice_2 = NormalizeDouble(OpenPrice + TakeProfit_2 * dPip,Digits);
dTakeProfitPrice_3 = NormalizeDouble(OpenPrice + TakeProfit_3 * dPip,Digits);
                
//some condition
if(Ask>High[1] && OrdersTotal()<1)int count=3; //(int count=iMaxOrders; count>0; count--)
{
iLastError = 0;
   if (count==3) 
    {
    BuyOrder_1=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_1, "Buy Order",MagicNumber, 0,Blue);
    if (BuyOrder_1>0) //Checking if the order was opened or not
      { 
      sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 1 sent successfully. Ticket=" + BuyOrder_1;
      count = count - 1; 
      }
     else {
          iLastError = GetLastError();                               
          sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 1. Error code=" + ErrorDescription(iLastError);
          iMaxOrders=3; //Setting iMaxOrders to 3 again thus it goes back and try to open that order again
          } 
    }

   if (count==2) 
    {
    BuyOrder_2=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_2, "Buy Order",MagicNumber, 0,Blue);
    if (BuyOrder_2>0) 
      { 
      sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 2 sent successfully. Ticket=" + BuyOrder_2;
      count = count - 1; 
      }
     else {
          iLastError = GetLastError();
          sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 2. Error code=" + ErrorDescription(iLastError);
          iMaxOrders=2; //Setting iMaxOrders to 3 again thus it goes back and try to open that order again
          } 
    }

   if (count==1) 
    {
    BuyOrder_3=OrderSend(Symbol(), iOrderType_Buy, LotSize,OpenPrice,Slippage,dStopLossPrice,dTakeProfitPrice_3, "Buy Order",MagicNumber, 0,Blue);
    if (BuyOrder_3>0) 
      {
      sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Buy order 2 sent successfully. Ticket=" + BuyOrder_3;
      iLastError = 0;
      count = count - 1; 
      }
     else {
          iLastError = GetLastError();                               
          sLog_CheckBuyConditions = sLog_CheckBuyConditions + sNL + "    Error sending buy order 2. Error code=" + ErrorDescription(iLastError);
          iMaxOrders=1; //Setting iMaxOrders to 3 again thus it goes back and try to open that order again
          }
    }  
}    //all code in red not needed