Ich brauche Hilfe, um einen kleinen Fehler zu finden.

 

Ich war dabei eine tra-il ing EA, wenn ich auf Demo getestet ich feststellen, dass nur die Kaufaufträge bekam es richtig (ich denke), während die Verkaufsaufträge nur verschoben Stop-Loss ONCE. Ich kann aber immer noch nicht erkennen, wo das Problem liegt.

** Bearbeitet den Code **

 

Ihr Code-Format macht es schwer zu lesen, aber für eine Sache, wie können Sie diese in einem Trailing-Stop verwenden. Der Auftrag muss noch offen sein, also gibt es kein OrderClosePrice()

 ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= ( StartTrailingStop + CummulativeValue )
 

Aber Kaufaufträge funktionieren gut

 
Nun, ohne zu wissen, welche Abbildung ..... ist, haben Sie diesen Code geschrieben, weil Sie wussten, dass OrderClosePrice == 0 bei offenen Aufträgen ist, so dass OrderClosePrice - OrderOpenPrice einen negativen Wert hat, wenn der Auftrag noch offen ist?
 

Nein, habe ich nicht, alle meine anderen Skripte mit nur OrderClosePrice - OrderOpenPrice oder umgekehrt funktioniert gut.

 
Okay, ich habe versucht, auf einem anderen kaufen, um es jetzt nicht. Es hat auch gerade Stop Loss ONCE verschoben.
 

OK, ja, Sie haben recht, ich wusste nicht, dass OrderClosePrice dem aktuellen Preis folgt, wenn eine Order noch offen ist, also sollte OrderClosePrice der aktuelle Geldkurs bei Kauforders sein. Ich denke, das muss eine undokumentierte Funktion sein.

 


Die Kaufaufträge sehen gut aus, aber der Verkaufsauftrag hat den Stop-Loss nur einmal verschoben ... Es sollte mindestens zweimal bewegen.

 

Kann mir jemand helfen, ich bin eigentlich sehr nah dran. Ich persönlich glaube nicht, dass in meiner Programmierung etwas nicht stimmt, aber ich weiß einfach nicht, warum es nicht immer richtig funktionieren wird.

Es ist eine lange EA, seit ich alles in 1 kombiniert habe, entschuldigt mich ein bisschen, meine Augen sind jetzt ziemlich verschwommen.

Abbildung gibt den Wert der Punkte für jede bestimmte Paare .

Dies ist der nachlaufende Teil .

//+------------------------------------------------------------------+
//| Program's global variables                                       |
//+------------------------------------------------------------------+
   extern double StartTrailingStop = 15.0 ;
   extern double TrailingStop = 5.0 ;
   extern double CummulativeValue = 5.0 ;
   extern int    NumberOfTrail = 10 ;
   double Figure ;
//+------------------------------------------------------------------+

   
//+------------------------------------------------------------------+
//| Program's sub-function                                           |
//+------------------------------------------------------------------+
   double PointsDetection()    {              Figure = 0.0 ;                                             if ( MarketInfo ( OrderSymbol() , MODE_POINT ) == 0.01 || MarketInfo ( OrderSymbol() , MODE_POINT ) == 0.001 )          {             Figure = 0.01 ;          }          else          {             if ( MarketInfo ( OrderSymbol() , MODE_POINT ) == 0.0001 || MarketInfo ( OrderSymbol() , MODE_POINT ) == 0.00001 )             {                Figure = 0.0001 ;             }          }             return ( Figure ) ;    }


//+------------------------------------------------------------------+
//| Program's sub-function                                           |
//+------------------------------------------------------------------+
   void ProcessTrailingStop()
   {
      
      bool Result ;
      
      
      
      
      
         for ( int x = ( OrdersTotal() - 1 ) ; x >= 0 ; x-- )
         {
            if ( OrderSelect ( x , SELECT_BY_POS , MODE_TRADES ) == True )
            {
               PointsDetection() ;
               
               
               

                  if ( OrderType() == OP_BUY )
                  {
                     for ( int xai = 0 ; xai < NumberOfTrail ; xai++ )
                     {
                        if ( xai == 0 )
                        {
                           if ( ( ( ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= StartTrailingStop ) && ( ( OrderStopLoss() == 0 ) || ( OrderStopLoss() < ( OrderOpenPrice() + ( TrailingStop * Figure ) ) ) ) )
                           {
                              Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() + ( TrailingStop * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                           }
                        }
                        
                        
                        
                        if ( xai == 1 )
                        {
                           if ( ( ( ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= ( StartTrailingStop + CummulativeValue ) ) && ( OrderStopLoss() == ( OrderOpenPrice() + ( TrailingStop * Figure ) ) ) )
                           {
                              Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() + ( ( TrailingStop + CummulativeValue ) * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                           }
                        }
                        
                        
                        
                        if ( xai >= 2 )
                        {
                           if ( ( ( ( OrderClosePrice() - OrderOpenPrice() ) / Figure ) >= ( StartTrailingStop + ( CummulativeValue * xai ) ) ) && ( OrderStopLoss() == ( OrderOpenPrice() + ( ( TrailingStop + ( CummulativeValue * ( xai - 1 ) ) ) * Figure ) ) ) )
                           {
                              Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() + ( ( TrailingStop + ( CummulativeValue * xai ) ) * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                           }
                        }
                     }
                  }
                  else
                  {
                     if ( OrderType() == OP_SELL )
                     {
                        for ( int xaii = 0 ; xaii < NumberOfTrail ; xaii++ )
                        {
                           if ( xaii == 0 )
                           {
                              if ( ( ( ( OrderOpenPrice() - OrderClosePrice() ) / Figure ) >= StartTrailingStop ) && ( ( OrderStopLoss() == 0 ) || ( OrderStopLoss() > ( OrderOpenPrice() - ( TrailingStop * Figure ) ) ) ) )
                              {
                                 Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() - ( TrailingStop * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                              }
                           }
                           
                           
                           
                           if ( xaii == 1 )
                           {
                              if ( ( ( ( OrderOpenPrice() - OrderClosePrice() ) / Figure ) >= ( StartTrailingStop + CummulativeValue ) ) && ( OrderStopLoss() == ( OrderOpenPrice() - ( TrailingStop * Figure ) ) ) )
                              {
                                 Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() - ( ( TrailingStop + CummulativeValue ) * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                              }
                           }
                           
                           
                           
                           if ( xaii >= 2 )
                           {
                              if ( ( ( ( OrderOpenPrice() - OrderClosePrice() ) / Figure ) >= ( StartTrailingStop + ( CummulativeValue * xaii ) ) ) && ( OrderStopLoss() == ( OrderOpenPrice() - ( ( TrailingStop + ( CummulativeValue * ( xaii - 1 ) ) ) * Figure ) ) ) )
                              {
                                 Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() - ( ( TrailingStop + ( CummulativeValue * xaii ) ) * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                              }
                           }
                        }
                     }
                  }

            }
         }
 

Vielleicht gibt es :

 ( OrderStopLoss() == ( OrderOpenPrice() - ( TrailingStop * Figure ) )

https://forum.mql4.com/45053

Vielleicht sollte es so kodiert werden, um Serverfehler zu vermeiden:

 figure = PointsDetection();

if ( ( ( ( OrderOpenPrice() - OrderClosePrice() ) / Figure ) >= StartTrailingStop ) && ( ( OrderStopLoss() == 0 ) || ( OrderStopLoss() >= OrderOpenPrice() ) || ( OrderStopLoss() > ( OrderOpenPrice() - ( TrailingStop * Figure ) ) ) ) )
                              {
                                 Result = OrderModify ( OrderTicket() , OrderOpenPrice() , ( OrderOpenPrice() - ( TrailingStop * Figure ) ) , OrderTakeProfit() , 0 , Color ) ;
                                 if( result == true ) break;                               
 }


für den Kaufauftrag:

( OrderStopLoss() < ( OrderOpenPrice() + ( TrailingStop * Figure ) )
 

Ich habe es versucht, aber es hat immer noch nicht geklappt .... Warum sollte man break in einer if-Anweisung verwenden?

Bei Verkaufsaufträgen sollte es minus sein und bei Kaufaufträgen sollte es plus sein ....