Trailing Stops und Trailing Profit - Seite 2

 
Arav007:


Tut mir leid, ich bin ein wenig verwirrt.

if(iOpenOrders_Buy = 3)

Wenn die Gesamtzahl der geöffneten Kaufaufträge gleich "3" ist, wird der Code mit dem nächsten Teil fortfahren.

if(iOpenOrders_Buy > 0 )

Wenn die Anzahl der insgesamt eröffneten Kaufaufträge größer als 0 ist, wird mit dem nächsten Teil fortgefahren.

if(iOpenOrders_Buy == 3)

Wenn die Anzahl der geöffneten Kaufaufträge gleich 3 ist, dann wird BuyOrder_1 geöffnet , wenn sie gleich 2 ist, dann wird BuyOrder_2 geöffnet und dann wirdBuyOrder_3 geöffnet, wenn die Anzahl der geöffneten Kaufaufträge gleich 1 ist.

Liege ich richtig?

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);
....
}

Sie haben Recht, schauen Sie sich den geänderten Code noch einmal an, ist das in Ordnung?
 
deVries:

Sie haben Recht, schauen Sie sich den geänderten Code noch einmal an, ist das in Ordnung?


Das glaube ich nicht.

if (Kaufbedingung erfüllt && iOpenOrders_Buy == 0)

Das bedeutet, dass die Kaufbedingung erfüllt ist und es keine offenen Kaufaufträge gibt, richtig?

dann fährt der Code mit der nächsten Zeile fort, in der iOpenOrders_Buy = 3 ist;

Es wird also EA mitgeteilt, dass bereits 3 offene Aufträge vorhanden sind, richtig?

Aber wenn ich in den Code eingehe und weiß, dass es dort keine offenen Kaufaufträge gibt, warum weisen wir dann iOpenOrders_Buy = 3; zu?

Das Ziel ist auch, dass einer der drei Trades weiterläuft und nur ein neuer Kaufauftrag geöffnet wird, wenn der letzte Trade geschlossen wird.

Dies muss also sein

if(iOpenOrders_Buy== 0) // Es gibt keine geöffnete Kauforder, also müssen wir neue Kauforders öffnen


Wenn der EA die Buy-Bedingung erhält, wird er drei Trades mit unterschiedlichen Take Profits eröffnen.

Wenn dann zwei der Trades sowieso geschlossen werden (entweder durch TP oder SL), wird der dritte weiterlaufen.

 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")

} 

Was denken Sie darüber? Würde es das Gleiche tun, wie oben beschrieben?

Mit freundlichen Grüßen

 
Arav007:


Das glaube ich nicht.


Was denken Sie darüber? Würde es dasselbe bewirken wie oben beschrieben?

Mit freundlichen Grüßen

nein, was passiert, wenn ordersend nicht erfolgreich ist, wie überprüfen Sie, welchen Handel Sie öffnen müssen, wenn einer fehlschlägt

Warum weisen wir iOpenOrders_Buy = 3; zu?

Sie müssen 3 neue Trades eröffnen, wenn ordersend erfolgreich ist, machen Sie iOpenOrders_Buy zu einem neuen Wert

wenn iOpenOrders_Buy zu 0 wird, haben wir unsere 3 Abschlüsse

 
deVries:

nein, was passiert, wenn ordersend nicht erfolgreich ist, wie prüfen Sie, welchen Handel Sie eröffnen müssen, wenn einer fehlschlägt

Warum weisen wir iOpenOrders_Buy = 3; zu?

Sie müssen 3 neue Geschäfte eröffnen, wenn ordersend erfolgreich ist, setzen Sie iOpenOrders_Buy auf einen neuen Wert

wenn iOpenOrders_Buy 0 wird, haben wir unsere 3 Trades

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;

}  

}

} 

Ja, es ist sehr gut möglich, dass 'Ordersend()' die Order nicht öffnen kann.

Jetzt habe ich verstanden, warum

if(iOpenOrders_Buy > 0 ) // wir müssen neue Kaufaufträge öffnen

in Ihrem Code verwendet wurde. Da wir bereits iopendOrders=3 gesetzt haben, wird es überprüft.

Aber später habe ich verwirrt, dass, wie der Wert von iopendOrders wird ständig ändern.

Wahrscheinlich habe ich aufgrund meines begrenzten Gehirns den Mechanismus nicht herausgefunden. Also habe ich versucht, Ihre Logik auf die obige Weise zu implementieren.

Ist dies, was Sie in Ihrem gegebenen Code verwiesen haben?

Mit freundlichen Grüßen

 
Arav007:

Ja, es ist sehr gut möglich, dass 'Ordersend()' die Bestellung nicht öffnen kann.

Jetzt habe ich verstanden, warum

if(iOpenOrders_Buy > 0 ) // wir müssen neue Kaufaufträge öffnen

in Ihrem Code verwendet wurde. Da wir bereits iopendOrders=3 gesetzt haben, wird dies überprüft.

Aber später habe ich verwirrt, dass, wie der Wert von iopendOrders wird ständig ändern.

Wahrscheinlich habe ich aufgrund meines begrenzten Gehirns den Mechanismus nicht herausgefunden. Also habe ich versucht, Ihre Logik auf die obige Weise zu implementieren.

Ist dies, was Sie in Ihrem gegebenen Code verwiesen haben?

Mit freundlichen Grüßen


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

{ 

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

 
deVries:



Bitte haben Sie nichts dagegen, aber ich bin schon wieder verwirrt!

Wenn ich

count=count-1; nach

Print( "Kaufauftrag 1 wurde erfolgreich eröffnet");

bedeutet das, dass der Wert von count um 1 verringert wird, wenn der erste Kaufauftrag eröffnet wurde.

Wenn Sie also in die nächste Funktion einsteigen, hier die nächste 'if'-Bedingung:

if (count==2) {}

der Wert von count ist dafür '2' geworden. [count=3-1=2]

Ist das richtig?

 
Arav007:


Bitte haben Sie nichts dagegen, aber ich bin schon wieder verwirrt!

Wenn ich

count=count-1; nach

Print( "Kaufauftrag 1 wurde erfolgreich eröffnet");

bedeutet das, dass der Wert von count um 1 verringert wird, wenn der erste Kaufauftrag eröffnet wurde.

Wenn Sie also in die nächste Funktion einsteigen, hier die nächste 'if'-Bedingung:

if (count==2) {}

der Wert von count ist dafür '2' geworden. [count=3-1=2]

Ist das richtig?


Probieren Sie es aus.... machen Sie einige Tests
 
deVries:

probieren Sie es aus.... machen Sie einige Tests


Müde und dies ist das Ergebnis.

Wahrscheinlich konnte ich den Code "Closing Sell Order before buying" nicht an der richtigen Stelle platzieren. Daher bekomme ich Sell und Buy zusammen, obwohl es gegen den ursprünglichen Code ist.

Und es gibt insgesamt '4' Kaufaufträge!

Ich bin gescheitert :(

                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, vergessen iOpenOrders_Buy ==0 zu setzen

Teste es jetzt noch einmal damit.

 
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                                                      
Grund der Beschwerde: