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

 
Wodzuuu:

Für diejenigen , die meine EA immer noch nicht verstehen, schreibe eine Geschichte: D hehehe


Das Ereignis ist Kerzen - bietet verschiedene Optionen für den Kauf und Verkauf oder Schließen.

Ich verstehe mehr, wenn ich mir Ihren Code ansehe, als wenn ich lese, was Sie geschrieben haben ... ;-)
 

Anstatt Fernsehsendungen als Zweitfunktion zu sehen, sollten Sie sich überlegen, das Buch zu lesen und zu verstehen. ;-)

Was Sie zu erreichen versuchen, ist einfach und wird in vielen Strategien verwendet, aber Ihr Code - und Ihre Geschichten - sind verwirrend und teilweise falsch - zumindest der Code.... nicht sicher über die Geschichten.

//Pseudo code

if(NewBar) ResetSignals();                //Set all SignalxExecuted to false
if(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
  SignalBuy1Executed=true;                //Set Signal to exectued to prevent a reuse in the same bar
}

if(SignalBuy2&&!SignalBuy2Executed&&OpenOrders()==2){
//do open buy position
  SignalBuy2Executed=true;                //Set Signal to exectued to prevent a reuse in the same bar
}

SignalBuy1=CheckForOpenBull42();          //Check for Signal1 condition is true
SignalBuy2=CheckForOpenBull62();	  //Check for Signal2 condition is true	

if(OpenOrders()>0)CheckForClose();        //Check any order needs to be closed


//and so on.....

Warum versuchen Sie nicht, vorerst nur ein Signal zu implementieren und sich auf den Code für die benötigten Funktionen zu konzentrieren? Wenn Sie einen guten Code für ein Signal haben, ist es wahrscheinlich einfach, die anderen Signale zu implementieren, und viele Funktionen sind dann bereits vorhanden.

Später könnten Sie Arrays und andere Funktionen verwenden, um den Code zu vereinfachen, aber die Vereinfachung Ihres obigen Codes sollte im Moment nicht Ihr größtes Problem sein.

 

Kronin Ja! Sie verstehen mich :), viele der Strategien in einem EA.
Ich muss 150 Strategien schreiben und sie müssen zur gleichen Zeit auf dem gleichen Graphen laufen und alle Strategien auf einmal ausführen . Wenn ich 150 EA gleichzeitig laufen lasse , wird mein PC explodieren - denke ich.

Danach ist es sinnlos , weil Sie nur eine Strategie EA und viele bereits innerhalb haben können .

Natürlich kann die Strategie nicht miteinander interferieren, und wenn man laufen die zweite kann auch laufen, und ich kann laufen strategie 1, und 3 und 5. und strategie (1,3,5) laufen im gleichen Moment haben.

Ich werde keine weiteren Geschichten mehr schreiben :)


Mein Code ist falsch - es ist bekannt, ich habe versucht , die beiden Strategien in einem einzigen EA zu setzen, der Code funktioniert gut , aber die Gesamtheit ist nicht gut funktionieren

IhrCode ist sehr interessant, ich werde ihn studieren, bitte geben Sie mir etwas Zeit

 

Hallo Freunde, nach einer langen Arbeit in Code und durch Informationen von Kronin Code ist strukturiert und funktioniert.
Code präsentiert zwei Strategien in einem einzigen EA


1.für eine kleine Kerze Kauf Szenario ist mit einem blauen Pfeil markiert , sind zwei Optionen für BUY
2. für die durchschnittliche Kerze Kauf Szenario Kerze ist mit einem roten Pfeil markiert , sind drei Optionen für BUY


Ich habe eine Situation zu , wo 1 Punkt = 1 Pip ist bequem ( das Problemzu lösen, ist für später)
Nicht verwenden Optionen , wenn (NewBar) ResetSignals () , weil ich denke, sie sind nicht die Ursache des Fehlers

Wenn Sie eine Funktion PART 2 in start() blaulöschen, wird eine Strategie funktionieren, und es funktioniert gut
Wenn Sie den Code PART1 und PART2 mit zwei Start-Strategien, aber sie werden überlappen. das ist Fehler

Könnten Sie einen Blick darauf werfen, Kronin?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA  20050610

//+------------------------------------------------------------------+
//| Check NEW BAR     WORK AT BARS  M15                                 |
//+------------------------------------------------------------------+
/*

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;                    
      }
   }
*/

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

int OpenOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
//---- return orders volume
   return(buys);
  }

//+------------------------------------------------------------------+
//| Calculate candle      These is condidion                         |
//+------------------------------------------------------------------+

// scenario 1 / EA 1  /  startegy 1 / blue

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

// scenario 2 / EA 2  /  startegy 2 / red

bool BULL6()
   {
   if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
   return(true);
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

// Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int    res;
   if(Bid==Close[1]+3*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return (true);
     }
   return (false);  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int    res;
   if(Ask>OrderOpenPrice()+4*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return;
     }
  }  
  
// Check for open for scenario 2 / EA 2  /  startegy 2
  
void OpenBULL61()
  {
   int    res;
   if(Bid==Close[1]+4*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
//-----------------------------------  
 
void OpenBULL62()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
  
//----------------------------------- 
void OpenBULL63()
  {
   int    res;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      res=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Red);
      return;
     }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose()
{
   RefreshRates();
   if(OrderOpenPrice()+4*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)       // I Have do -1 in "OrdersTotal()-1"
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 
/*
void CheckForClose2()
{
   RefreshRates();
   if(OrderOpenPrice()+6*Point< Ask)
   for (int i = OrdersTotal(); i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Black);

      }
   }
} 
*/
                                       
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
      
//------------------                                                          PART1      
           bool SignalBULL41Executed=false;
            if(BULL4() && !SignalBULL41Executed && OpenOrders(Symbol())==0)
               {
               OpenBULL41();//do open buy position
               SignalBULL41Executed=true;
               }
               
            bool SignalBULL42Executed=false;
            if(!SignalBULL42Executed && OpenOrders(Symbol())==1)
               {
               OpenBULL42();//do open buy position
               SignalBULL42Executed=true;
               }  
               
            if(OpenOrders(Symbol())>0)CheckForClose();  
            
//------------------                                                          PART 2
            
            bool SignalBULL61Executed=false;
            if(BULL6() && !SignalBULL61Executed && OpenOrders(Symbol())==0)
               {
               OpenBULL61();//do open buy position
               SignalBULL61Executed=true;
               }
               
            bool SignalBULL62Executed=false;
            if(!SignalBULL62Executed && OpenOrders(Symbol())==1)
               {
               OpenBULL62();//do open buy position
               SignalBULL62Executed=true;
               }  
               
           bool SignalBULL63Executed=false;
            if(!SignalBULL63Executed && OpenOrders(Symbol())==2)
               {
               OpenBULL63();//do open buy position
               SignalBULL63Executed=true;
               }                
               
//            if(SignalBULL61Executed && OpenOrders(Symbol())>0)CheckForClose2();                    
            
  }
//+------------------------------------------------------------------+
 
Wodzuuu:

Verwenden Sienicht dieOptionen if (NewBar) ResetSignals () , weil ich denke, dass sie nicht die Ursache des Fehlers sind.

Die Art und Weise, wie die Funktion Fun_NewBar() kodiert ist, lässt das nicht zu ... Sie müssen es so machen, dass sie vom Typ bool ist und einen bool-Wert zurückgibt ...

bool Fun_New_Bar()                
   {                                
   static datetime New_Time=0;      
                     
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      return(true);       // <---- we have a new bar so the function returns true
      }

   return(false);
   }
 

Ja , du hast Recht, gibt bool und es gibt int (bereits festgelegt) Ich sehe nicht vor. Dankeschön
Aber diese Funktion benutze ich nicht, es ist wie ein Text

Ich glaube nicht, dass dies auf Funktionen zutrifft , die mich vonzwei sich überschneidenden Strategien trennen . Ich sehe den Zusammenhang nicht . Oder vielleicht liege ich falsch?

//Pseudo code

if(NewBar) ResetSignals();                //Set all SignalxExecuted to false
if(SignalBuy1&&!SignalBuy1Executed&&OpenOrders()==1){
//do open buy position
  SignalBuy1Executed=true;                //Set Signal to exectued to prevent a reuse in the same bar
}
 

Schön zu sehen, dass Sie einige Fortschritte gemacht haben, aber es ist noch ein langer Weg :-)

Sie müssen beheben, was RaptorUK oben angegeben hat. Das Zurücksetzen der Signale ist wichtig, sonst stoppt der EA recht bald mit dem Eröffnen neuer Trades.
Ihre Implementierung ist falsch. Wenn Sie das SignalExecuted bei jedem Tick zurücksetzen, hat es keinen Sinn. Es werden vielleicht nicht mehr Trades eröffnet, weil Sie auch die OpenOrders filtern. Da Ihre Strategie aber mehrere offene Orders zulässt, kann ich mir vorstellen, dass Sie auch einen Algorithmus zum Schließen von Orders haben wollen, so dass das SignalExecuted-Flag bei einem neuen Bar zurückgesetzt werden muss (mit Ihrer Implementierung ist es nutzlos und Sie brauchen es nicht).

Wenn ich Sie richtig verstehe, werden Sie BULL4 nicht ausführen, wenn BULL6 auch wahr ist. Oder anders ausgedrückt, die blaue Strategie nur, wenn die rote Strategie nicht gültig ist, oder die kleine Kerze nur, wenn die mittlere Kerze nicht gültig ist.

if(BULL4()&&!BULL6(){             // <--- only strategy BULL4 is valid, we are looking at a 'small' bar.
  if(!SignalBULL41Executed && OpenOrders(Symbol())==0){
    OpenBULL41();//do open buy position
    SignalBULL41Executed=true;
  }
  if(!SignalBULL42Executed && OpenOrders(Symbol())==1){
    OpenBULL42();//do open buy position
    SignalBULL42Executed=true;
}
 

Nächste Schritte:

// Check for open for scenario 1 / EA 1  /  startegy 1 
 
bool OpenBULL41()
  {
   int    res;
   if(Bid==Close[1]+3*Point)  					                       // <--- equal makes no sense here and you should not compare doubles for equality. 
                                                                                                  Read (again): https://www.mql5.com/en/forum/136997 
     {
      res=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue); // <--- what is your plan with res? You are aware, it does include the ticket 
                                                                                                  number or -1, aren't you?

      return (true);                                                                   // <--- Even if OrderSend() fails you return true.
     }
   return (false);  
  }
  
//----------------------------------- 
bool OpenBULL42()
  {
   int    res;
   if(Ask>OrderOpenPrice()+4*Point) 							// <--- OrderOpenPrice() from a somewhere selected order may or may not work here 
                                                                                                  (may because only one order is open), but it is not nice coded. 
     {
      res=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA,0,Blue);
      return;
     }
  }  

Die CheckForClose() Funktion hat so ziemlich die gleichen Probleme und zusätzlich keinen Filter für die magische Zahl. Auch hier könnte OrderOpenPrice(), ausgewählt aus einer Order in der Buy Count, dazu führen, dass die falsche Order geschlossen wird (ich bin mir nicht sicher, ob es tatsächlich funktioniert).
Bitte lesen Sie auch noch einmal, was Raptor auf der ersten Seite dieses Threads geschrieben hat.

Aus Ihren Beiträgen und den Kommentaren im Code schließe ich, dass Sie wissen wollen, welcher Auftrag zu welcher Strategie gehört. Um das zu erreichen, können Sie eine zweite magische Zahl für die zweite Strategie definieren. Dann ist es einfacher, Aufträge entsprechend der Strategie zu schließen, die sie geöffnet haben.

 
kronin:

Nächste Schritte:

Aus Ihren Beiträgen und den Kommentaren im Code schließe ich, dass Sie wissen wollen, welcher Auftrag zu welcher Strategie gehört. Um das zu erreichen, können Sie eine zweite magische Zahl für die zweite Strategie definieren. Dann ist es einfacher, Aufträge entsprechend der Strategie zu schließen, die sie geöffnet haben

Wäre es nicht einfacher, 2 verschiedene Strategien in 2 separaten EAs laufen zu lassen, jede auf ihrem eigenen Chart?
 
RaptorUK:
Wäre es nicht einfacher, 2 verschiedene Strategien in 2 separaten EAs laufen zu lassen, jede auf ihrem eigenen Chart?

Ja, für 2, 3, 4, 5... einverstanden. Aber nach den Geschichten und diese:"Ich habe zu schreiben 150 Politiken und sie müssen zur gleichen Zeit auf dem gleichen Graphen laufen, und führen Sie alle Strategien auf einmal. Wenn ich 150 EA gleichzeitig laufen lasse , wird mein PC explodieren - denke ich."
Ich denke, er plant, viele Strategien mehr in einem EA laufen zu lassen....