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

 
Wodzuuu:

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

Ja, aber ist die if-Anweisung in der Funktion BULL4() korrekt? Ich meine, suchst du nach der Kerze, die du berechnest?

Wodzuuu:

UND ICH SCHREIBE PROGRAMM für mich ist gut :) wie über Sie?

Es ist Ihr Programm, also muss es gut für Sie sein, nicht für mich.

Einige Kommentare:

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);   // <-- the else here is wrong. Use {} if you are unsure what is processed where
}


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

   for(int i=0;i<OrdersTotal();i++)   // <-- do it like you do it in the other loops!
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;  // <-- break? Why not using always the same code for the same thing? 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1) //     Look at the for loop you used in CheckForCloseBULL4().       
        {
         if(OrderType()==OP_BUY) buys++; // <-- why this additional if? Simplify it to: 
        }                                //     if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY) buys++;  
     }
   return(buys);
  }
 

Ich korrigiere letzte Fehler

bool CheckForCloseBULL41()
{
   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);                                                                              // <-- the else is correct now
}

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)                                                                     // Loop is correct and use the same code
     {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1 && OrderType()==OP_BUY)buys++;
     }
   return(buys);
  }

Ich füge eine zweite Kauf

Bedingung zu Open:

bool BULL42send()
   {
   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);
   }

Open und CheckForClose und Close der gleiche Code wie für BULL41 (nur andere Pips)

Die Startfunktion sieht so aus:

void start()
  {
   if(BULL4() && BULL41send() && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
     }
   if(BULL42send() && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }
//+------------------------------------------------------------------+

Und jetzt brauche ich Flag, Resetsignale und ändere die Startfunktion

Meine Vorstellung sagt:

Neue Bar:

bool New_Bar = false;

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

und der Start sieht so aus

void start()
  {
   bool SignalBULL41Executed=false;
   bool SignalBULL42Executed=false;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

Der Code funktioniert, aber vielleicht habe ich einige Fehler


	          
 

Ich vermisse ResetSignals(), so dass es nicht gut funktioniert

 
Wodzuuu:

Ich korrigiere die letzten Fehler
...
...
...

Der Code funktioniert, aber vielleicht habe ich einige Fehler


Ich habe nicht gesagt, dass das else in der CheckForCloseBULL41() Funktion falsch ist, weil es nicht schön formuliert war. Sie haben nichts geändert. Wenn mehr als eine der offenen Orders mit der unten stehenden übereinstimmt, werden Sie Probleme bekommen, da die Schleife nicht durch alle Orders läuft.

if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )

Sie brauchen die Signalflags nicht, solange Sie neue Aufträge nur bei einer bestimmten Anzahl von bereits geöffneten Aufträgen öffnen. Dies verhindert auch, dass der Code weitere Aufträge öffnet.

if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Ihre Funktion Fun_New_Bar() ist nicht korrekt.

 

1. sonstiges Problem

wenn dies nicht korrekt ist, werde ich erneut suchen.

bool CheckForCloseBULL41()
{
   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);
               }
            }
         }
    }    
   return(false); 
}

2. neues Bar-Problem

bool Fun_New_Bar()                
   {                                
   static datetime New_Time=0;      
                     
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      return(true);            
      }

   return(false);
   }

3. Reset Signal Problem

void start()
  {
   bool SignalBULL41Executed;
   bool SignalBULL42Executed;
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position
       SignalBULL41Executed=true;
     }
   if(BULL42send() &&  !SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)             
     {
       OpenBULL42();//do open buy position
       SignalBULL42Executed=true;
     }     
     

   if(CheckForCloseBULL41()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();
   if(CheckForCloseBULL42()==true && OpenOrders_BULL4(Symbol())==2) CloseBULL4();      
  }

wenn ich schlechte Punkte 2 und 3 geschrieben habe , habe ich keine Ideen , um sie zu beheben, ich werde für größte Anweisungen fragen, wenn ich könnte.

 

1. sonstiges Problem
Behoben

2. New Bar Problem
Behoben

3. Signal zurücksetzen Problem

void start()
  {
   bool SignalBULL41Executed;  //<-- if defined inside the start function, the flags get reset with every tick.
   bool SignalBULL42Executed;  //    define it outside in global scope.
   
   if(Fun_New_Bar()==true)
      {
      SignalBULL41Executed=false;
      SignalBULL42Executed=false;
      }   
   
   if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)             
     {
       OpenBULL41();//do open buy position   //<-- As far as I remember, you defined this as bool. Do only set the flag, if the function returns true.
       SignalBULL41Executed=true;            //    change to: if(OpenBULL41())SignalBULL41Executed=true;
     }
Die obigen Korrekturen beziehen sich auf die Flaggen. Aber die offene Frage ist, ob man sie braucht. Wenn Sie nur einen neuen Auftrag öffnen, wenn eine bestimmte Anzahl von Aufträgen bereits offen ist, brauchen Sie sie wahrscheinlich nicht. Das ist es, was ich mit dem gelb markierten Ausdruck meinte:
if(BULL4() && BULL41send() && !SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)

Aber keine Sorge, es funktioniert auch mit den Flags und man kann sie später eliminieren, wenn sich herausstellt, dass sie überflüssig sind.

 

Ich denke, dass die Flagge nicht erforderlich ist, aber eines Tages nützlich sein kann.

Wie kann man zwei EAin einem EA haben ?
Ich habe Kopien des EA BULL4gemacht und den BULL6 idex und die Abstände pips geändert.
Kopiere EA Bull4 + EA Bull6 zu neuem EA (alles nach der Ziffer ()) Änderungen innerhalb der Funktion start () und magicma2 vornehmen...

Mein EA funktioniert sehr gut, die Szenarien stören sich nicht gegenseitig. Ich bin sehr zufrieden.

Ich wollte Ihnen für Ihre Hilfe danken , ohne Ihre Hilfe und vor allem Ihre Unterstützung Kronin würde ich es nicht schreiben .

Das Thema ist meiner Meinung nach beendet.

Mit freundlichen Grüßen

 
Wodzuuu:

Mein EA funktioniert sehr gut, die Szenarien kommen sich nicht in die Quere . Ich bin sehr zufrieden.

Ich wollte Ihnen für Ihre Hilfe danken , ohne Ihre Hilfe und vor allem Ihre Unterstützung Kronin würde ich es nicht schreiben .

Gern geschehen. Danke für das nette Feedback.