ONLY CANDLE / BAR - Wie katalogisiere oder trenne ich die Kerze? - BITTE KORRIGIEREN SIE MICH! - Seite 4

 

Ich habe das Gefühl, wir verlieren ein wenig die Kontrolle über den Code....

        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close

Nein, das ist mit Sicherheit nicht der richtige Ort.

   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
   if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }   
  } 

Diese "Fehlerbehandlung" macht nichts besser. Prüfen Sie es noch einmal.

bool Fun_New_Bar()                              // bool             

   {                                
   static datetime New_Time=0;      
   New_Bar=false;                   
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      New_Bar=true;                    
      }
   }

Dies ist nicht zum Spaß gedacht! Es sollte verwendet werden, um die ausgeführten Flaggen bei einem neuen Takt zurückzusetzen.

if(Bid==Close[1]+3*Point)  

Was haben wir über den Vergleich von Doubles gelernt und ob dies hier Sinn macht?

 

Sie haben also beschlossen, Ihren Beitrag zu löschen, auf den ich mich beziehe... Gut gemacht, das ist sehr hilfreich!

 

Sorry, aber gestern gab es Probleme mit dem Internet (mql4.com funktioniert nicht mehr). Ich war versuchen, etwas zu korrigieren und ... Zusammenbruch

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy
#define MAGICMA2  2001        // red strategy

//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+
bool New_Bar = false;

bool Fun_New_Bar()                              // bool             

   {                                
   static datetime New_Time=0;      
   New_Bar=false;                   
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      New_Bar=true;                    
      }
   }

//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

//--- FOR BLUE---------------------------------------------------------
int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)    // magic ma 1 ( is ==)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//--- FOR RED--------------------------------------------------------------
int OpenOrders_BULL6(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA2)    // magic ma 2 ( is ==)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }



//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
   return(true);
   } 

bool BULL6()
   {
   if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
   return(true);
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
//--------------------------- blue bull4 magicma1 
void OpenBULL41()
  {
   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
      return(true);
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }      
  }
  
void OpenBULL42()
  {
   int    result;
   
   for(int i=1;i<=OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)    // magic ma 1 ( is ==)
        {
         if(Ask>OrderOpenPrice()+2*Point)  
            {
             result=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
             return;
            }
          if (result == -1)
             {
             int e = GetLastError();
             Print(e);
             }    
        }
     }
  }  
//--------------------------- red bull6 magicma2 
void OpenBULL61()
  {
   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
   if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }   
  }
  
void OpenBULL62()
  {
   int    result;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }     
  }

void OpenBULL63()
  {
   int    result;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }    
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose_BULL4()
{

   if(OrderOpenPrice()+4*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)          // add: -1
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA1) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Blue);

      }
   }
} 

void CheckForClose_BULL6()
{

   if(OrderOpenPrice()+8*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA2) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);

      }
   }
}  
  
//+------------------------------------------------------------------+
//| flag                               |
//+------------------------------------------------------------------+ 
Fun_New_Bar();
if (New_Bar==false);
bool SignalBULL41Executed=false;
bool SignalBULL42Executed=false;
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;

if(Fun_New_Bar())
{
   SignalBULL41Executed=true;
   return(SignalBULL41Executed);
}


  
  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
if(BULL4())             
  if(!SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)
  {
    OpenBULL41();//do open buy position
    SignalBULL41Executed=true;
    if ( SignalBULL41Executed) CheckForClose_BULL4();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)
  {
    OpenBULL42();//do open buy position
    SignalBULL42Executed=true;
        if ( SignalBULL42Executed) CheckForClose_BULL4();       // I don't know it is the right place to close
  }
  
// ----------------bull6  
if(BULL6())             
  if(!SignalBULL61Executed && OpenOrders_BULL6(Symbol())==0)
  {
    OpenBULL61();//do open buy position
    SignalBULL61Executed=true;
        if ( SignalBULL61Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL62Executed && OpenOrders_BULL6(Symbol())==1)
  {
    OpenBULL62();//do open buy position
    SignalBULL62Executed=true;
        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL63Executed && OpenOrders_BULL6(Symbol())==2)
  {
    OpenBULL63();//do open buy position
    SignalBULL42Executed=true;
        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }   

  }
//+------------------------------------------------------------------+
 

Es ist nicht einfach, Ihnen zu helfen. Warum versuchen Sie nicht, vorerst nur eine Strategie zu implementieren, aber mit einer richtigen, Open(), Close(), Count(), NewBar(), Signal()Funktion.

Der folgende Block befindet sich außerhalb der Startfunktion. Ich bin mir nicht sicher, ob dies erwünscht ist.

Fun_New_Bar();
if (New_Bar==false);               // <-- ???
bool SignalBULL41Executed=false;   // <-- This could be correct, but I am not sure you know why and
bool SignalBULL42Executed=false;   //     its not more an accident that you initalize it here.
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;

if(Fun_New_Bar())                  // <-- Your Fun_New_Bar() function doesn't return anything,
{                                  //     you set the global New_Bar variable with the function. 
   SignalBULL41Executed=true;      // <-- You should set it to false on a new bar.    
   return(SignalBULL41Executed);   // <-- ???
}
 

Ich denke dasselbe wie Sie, kleine Schritte. Nehmen wir nur eine Option BULL4
Manchmal sieht es für mich in der Codebasis wie Ea aus

https://www.mql5.com/en/code/9156 - interessant

Ich verstehe diese (aber nicht fühlen), es ist eine Flagge undich verstehe ihren Zweck

Was denken Sie? über kleine Schritte

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy


//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)   
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
      {
         return(true);
      } 
   else
      {
         return(false);
      } 
   }
//+------------------------------------------------------------------+
//| Condition send buy                                                 |
//+------------------------------------------------------------------+
 
bool BULL4send()
   {
   if( Bid==Close[1]+3*Point)
      {
         return(true);
      } 
    else
      {
        return(false);
      }
   }
 
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

bool OpenBULL41()
  {
      int    result;

      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
      if(result>0)
           {
            if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
      else
         {
            Print("Error opening BUY order : ",GetLastError()); 
            return(false);
         }
      return(true);       
   }
   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
   if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)             

     {
       OpenBULL41();//do open buy position
     }
  }
//+------------------------------------------------------------------+
 

Ja, kleine Schritte, damit die Fehler überschaubar sind...
Möchten Sie etwas Bestimmtes aus der Codebase EA hervorheben?

Ich werde das nicht noch einmal sehen - ich werde Ihnen nicht mehr helfen, wenn Sie die Korrekturschritte, zu denen ich - oder jemand anderes - geraten hat, weiter ignorieren:

if( Bid==Close[1]+3*Point)

Schlupf ist 0? Sie werden wahrscheinlich einen Fehler bekommen, aber die festgelegte Fehlerbehandlung wird ihn abfangen :-)

result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);

Das ist nicht falsch, aber nicht ideal und führt im schlimmsten Fall nicht zu dem, was Sie in der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen

for(int i=0;i<OrdersTotal();i++)

Wie hoch ist der Spread Ihres Brokers und wie viele Ziffern haben Sie für das Symbol, das Sie handeln möchten? Ich bin mir nicht sicher, ob Sie Point richtig verwenden (Lesen Sie auf der ersten Seite Ihres Threads).

 
kronin:

Ja, kleine Schritte, damit die Fehler überschaubar sind...
Möchten Sie etwas Bestimmtes aus der Codebase EA hervorheben?

Ich denke, nein, nichts zu sehen, ich verstehe, was ich geschrieben habe.

Ich werde das nicht mehr sehen - ich werde Ihnen nicht mehr helfen, wenn Sie weiterhin die Korrekturschritte ignorieren, die ich - oder jemand anderes - Ihnen empfohlen hat:

Ja. Ich weiß, was tun NormalizeDouble, ich denke, dass ich verstehe ( wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ), aber ich kann diese nicht schreiben, könnte das sein?

if ( NormalizeDouble ( abc(),0 ) )

bool abc()

{

bool z,y,z;

x=Bid;

y=Close[1]

z=x-y+3*Punkt

return(z);

}

oder ?

If ( NormalizeDouble ((Close[1]-Bid) +3*Point),0 ) ;

Schlupf ist 0? Sie werden wahrscheinlich einen Fehler erhalten, aber die feste Fehlerbehandlung wird ihn abfangen :-)

Ich kann ohne Probleme +1 haben result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);

Fehlerbehandlung, gut, wir sehen, was nach sein wird

Das ist nicht falsch, aber nicht ideal, und im schlimmsten Fall bewirkt es nicht das, was Sie innerhalb der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen

SEHR GUTER ARTIKEL, den ich unbedingt zu Beginn lesen sollte :)

Wie hoch ist der Spread Ihres Brokers und wie viele Ziffern haben Sie für das Symbol, das Sie handeln wollen? Ich bin mir nicht sicher, ob Sie Point richtig verwenden (Lesen Sie auf der ersten Seite Ihres Threads).

Ich erinnere mich an diese. Ich habe Admiral Market Bid=1,29000 Ask = 1,29001. Das ist ein Problem, das ich kenne, aber ich habe keine Lösung in diesem Moment habe ich nicht das gute Beispiel gefunden.

Ich schreibe Code...

 
Wodzuuu:

Ja. Ich weiß, was NormalizeDouble tun, ich denke, dass ich verstehe (wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ) aber ich kann diese nicht schreiben, könnte das sein?


if (NormalizeDouble( abc(),0 ) )

bool abc()

{


Man kann nicht NormalizeDouble() a bool, der Hinweis steht im Funktionsnamen und auch in der Dokumentation....

doubleNormalizeDouble(double Wert,intZiffern)

 
RaptorUK:

Sie können NormalizeDouble() nicht als bool verwenden, der Hinweis steht im Funktionsnamen und auch in der Dokumentation.

Es ist schade, dass wir nicht normalisieren können, dass wahr sehr wahr ist :-(

Wodzuuu:
Ja. Ich weiß, was tun NormalizeDouble, ich Sache, die ich verstehe (wenn ich habe: euro/usd = 1.2390022129.....09.... Und wir brauchen: 1,29893 Ende! nicht unendlich ) aber ich kann diese nicht schreiben, könnte diese sein?

Nein, Sie müssen Bid oder Close[1] nicht normalisieren. Was ich meinte, ist, dass man sie einfach nicht auf Gleichheit vergleichen sollte.

Stellen Sie sich vor:
Close[1] = 1,31933
Neuer_Bar
Tick1, Bid = 1,31935
Tick2, Gebot = 1.31934
Tick3, Gebot = 1,31937
Tick4, Gebot = 1,31937
Tick5, Gebot = 1,31942


Ihr Code sucht nach einem Tick, bei dem Bid 1,31936 ist.

if( Bid==Close[1]+3*Point)

Dies würde nicht passieren, wenn Sie > verwenden.

Wodzuuu:
Ich kann +1 kein Problem haben result=OrderSend(Symbol(),OP_BUY,0.41,Ask, 1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);

Das macht es nicht viel besser. Alle Ihre Berechnungen in Points sollten nach meinem Verständnis Pips sein. Allerdings habe ich keine Erfahrung mit ECN-Brokern, so könnte es funktionieren.

Wodzuuu:

Das ist nicht falsch, aber nicht ideal und führt im schlimmsten Fall nicht zu dem, was Sie innerhalb der Schleife wollen. Am besten, Sie fangen gar nicht erst an, Schleifen von 0 bis OrdersTotal zu verwenden. Lesen Sie dies: Schleifen und Schließen oder Löschen von Aufträgen

SEHR GUTER ARTIKEL! Ich sollte diese am Anfang lesen :)

Stimme zu und es gibt noch viele sehr gute Artikel, die vom gleichen Autor geschrieben wurden. Auch das Buch ist nicht ein schlechter Ort zu beginnen.

Wodzuuu:

Ich habe Admiral Market Bid=1,29000 Ask = 1,29001. Dies ist ein Problem, das ich weiß,, aber ich habe keine Lösung in diesem Moment habe ich nicht das gute Beispiel gefunden.

Auf der Website Ihres Brokers wird angegeben, dass der minimale Spread für EURUSD 0,1 beträgt. Der durchschnittliche Spread ist 0,5. <-- Das ist in Pips gemeint! Also 0,1 ist 1 Punkt. 0,5 sind 5 Punkte.
In Ihrem Fall ist also ein Pip 10*Punkte. Der Spread verwirrt alle Ihre Minirechnungen, bei denen Sie nur 3 Punkte zu einem Kurs addieren.
Suchen Sie nach 'adjust for 5 digit broker' und Sie sollten eine Menge Beispiele finden.

 

HI :)

Wenn dieser Code schlecht war, weil ich Signale weitergegeben habe, hat er sich verbessert.Ich dachte, dass das Problem an einer ganz anderen Stelle liegt, nicht im Gleichheitszeichen '=='......... das '>=' ist natürlich die bessere Idee

if( Bid==Close[1]+3*Point)
if( Bid>=Close[1]+MyPips*3)

Frage 1. Muss ich MyPips in der Kerze verwenden, in dieser Funktion? bool BULL4()

DIGIT Problem.

Ich fand diese

https://www.mql5.com/en/forum/140097 von WHRoeder

https://www.mql5.com/en/forum/123736 von WHRoeder

Was ist Digit? in https://docs.mql4.com/predefined/variables/digits und https://docs.mql4.com/convert/doubletostr

Da Sie der Expertesind, hätte ich etwas sagen sollen, es könnte wichtig sein .
Jetzt benutze ich die MT4Plattform und ich sehe 4 Ziffern nach dem Komma (Bid-Ask= 0.0001 usualy). Im Moment haben wirin MQL4 programmiert lassen Sie es sein.
In MT5, sehe ich5 Ziffern nach dem Komma. Im Moment ist diese Spreizung für mich nichtwichtig. Wichtig ist, dass unser EA gut funktioniert.
Ich möchte zu diesem Zeitpunktnicht darüber reden (es sei denn, es ist notwendig)

AND I WROTE PROGRAM für mich ist gut :) wie über Sie?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy

//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+

// nothing yet, one moment

//+------------------------------------------------------------------+
//| These are adjusted for 5/4 digit brokers                           |
//+------------------------------------------------------------------+

double  MyPips;        // slippage and others

int init()
  {
    if (Digits == 5)    // Adjust for five (5) 
    {                
         MyPips=Point*10; 
    } 
    else                // Adjust for four (4, and ..)
    {
         MyPips=Point*1;  
    }
  }
 
//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)   
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
      {
         return(true);
      } 
   else
      {
         return(false);
      } 
   }

//+------------------------------------------------------------------+
//| Condition send buy                                                 |
//+------------------------------------------------------------------+
 
bool BULL4send()
   {
   if( Bid>=Close[1]+MyPips*3)
      {
         return(true);
      } 
    else
      {
        return(false);
      }
   }
 
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

bool OpenBULL41()
  {
      int    result;

      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,MyPips,Close[1]-25*MyPips,0,"",MAGICMA1,0,Blue);
      if(result>0)
           {
            if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
      else
         {
            Print("Error opening BUY order : ",GetLastError()); 
            return(false);
         }
      return(true);       
   }
   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

bool CheckForCloseBULL4()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            
   else return(false);
}

//+------------------------------------------------------------------+
//|  close                               |
//+------------------------------------------------------------------+

void CloseBULL4()
{
   int i;   
   for(i=OrdersTotal()-1;i>=0;i--)
      {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;  
   
      if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )  
   
         if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), MyPips*1,Black ) )               
            Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  
      } 
}

//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
   if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)             

     {
       OpenBULL41();//do open buy position
     }
     
   if(CheckForCloseBULL4()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();   
  }
//+------------------------------------------------------------------+
Grund der Beschwerde: