EA läuft nicht auf mehreren Paaren, brauche Hilfe - Seite 2

 
Fernando Carreiro:

Ein weiterer sehr wichtiger Hinweis in Bezug auf die Verwendung Ihres EA auf mehrere Währungspaare oder Zeitrahmen.

Ihr Code verwendet weder die "Magic Number"-Auswahl noch prüft er das verwendete Symbol (oder die "Magic Number") bei der Überprüfung der offenen Aufträge in der Historie. Daher wird Ihr EA im Wesentlichen weder mit sich selbst noch mit anderen EAs korrekt funktionieren.

So wie es ist, können Sie diesen EA nur für sich selbst verwenden, ohne dass ein anderer EA läuft, nicht einmal selbst auf einem anderen Chart!

Vielen Dank, dass Sie mir bisher mit meinem Code geholfen haben und für Ihre Zeit, ich werde versuchen, die notwendigen Anpassungen vorzunehmen.
 
Keith Watford:

    bool ans;

   

         //You do not select an order

         if(OrderType()==OP_BUY)
         {
           while(fastma < slowma)                                 //Use if not while
           {
             ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
             if(ticket < 1)                                        //ticket is a local variable and has not been assigned a value
             {     
                if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                Print("Buy order closed : ", OrderClosePrice());   
             }   
             else
               Print("Error closing order : ", GetLastError());
               return(0);
           }
         }
Schreiben Sie den Codeabschnitt "Close Order" neu, damit er logisch ist. Sie sollten die Variable ticket hier überhaupt nicht verwenden.
Als ich das hier geschrieben habe, hatte ich die Variable ticket noch nicht. Ich wollte nur sehen, ob es sich auf die Funktionsweise des Codes auswirkt, wenn ich sie dort einfüge, und ich danke Ihnen für Ihren Beitrag und Ihre Zeit.
 
Matt_Townsend:
Vielen Dank für die Hilfe mit meinem Code so weit und Ihre Zeit, ich werde versuchen, die notwendigen Anpassungen zu machen.

Da Sie zu viele Logikprobleme in Ihrem EA haben, schlage ich vor, dass Sie sich den Beispielcode von MetaQuotes ansehen, nämlich"Moving Average.mq4" und/oder "MACD Sample.mq4", und darauf aufbauen, bis Sie die grundlegenden Prinzipien verstehen, wie ein EA funktioniert.

Ich habe die Dateien angehängt, aber Sie finden sie in Ihrem Ordner "MQL4\Experts".

Dateien:
 
Fernando Carreiro:

EDIT: Was den Code betrifft, so verwenden Sie OrderSelect, aber Sie gehen immer davon aus, dass es jedes Mal funktioniert. Und wenn es nicht funktioniert, verwenden Sie einfach weiterhin die Funktionen für die Bestelldetails wie OrderTicket() in Ihrem Abschluss, was fehlschlagen könnte, wenn die ursprüngliche OrderSelect() ebenfalls fehlschlägt.

Nachdem ich Ihre Bearbeitung bemerkt habe.....

hatte ich immer angenommen, dass ein OrderSelect() verloren geht, wenn es einen neuen Tick gibt.

Also habe ich nachgesehen und festgestellt, dass eine einmal ausgewählte Order auch bei nachfolgenden neuen Ticks ausgewählt bleibt.

Jeden Tag etwas Neues lernen :)

 
Keith Watford: Nachdem ich Ihre Editierung bemerkt habe.....

Ich hatte immer angenommen, dass ein OrderSelect() bei einem neuen Tick verloren geht.

Also habe ich nachgesehen und festgestellt, dass eine einmal ausgewählte Order auch bei nachfolgenden neuen Ticks ausgewählt bleibt.

Ich lerne jeden Tag etwas Neues :)

In der Praxis ist es jedoch von geringem Nutzen, da diese Details in der Zeit eingefroren werden, so dass Dinge wie OrderClosePrice() nicht aktualisiert werden, bis man sie erneut auswählt!
 
Die direkte Verwendung von OrdersTotal und/oder das Fehlen einer Magic Number-Filterung in derOrderSelect-Schleife bedeutet, dass Ihr Code mit jedem EA inkompatibel ist (auch mit sich selbst auf anderen Charts und manuellem Handel). Symbol ist nicht gleich Ordersymbol, wenn eine andere Währung zu einem anderen separaten Chart hinzugefügt wird. - MQL4-Forum
 
Fernando Carreiro:

Ein weiterer sehr wichtiger Hinweis in Bezug auf die Verwendung Ihres EA auf mehrere Währungspaare oder Zeitrahmen.

Ihr Code verwendet weder die "Magic Number"-Auswahl noch prüft er das verwendete Symbol (oder die "Magic Number") bei der Überprüfung der offenen Aufträge in der Historie. Daher wird Ihr EA im Wesentlichen weder mit sich selbst noch mit anderen EAs korrekt funktionieren.

So wie es aussieht, kann man diesen EA nur alleine verwenden, ohne dass ein anderer EA läuft, auch nicht auf einem anderen Chart!


    for(int i=0;i<OrdersTotal();i++)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
         //---Check Order Type
         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
             Print("Order Closed : ", OrderClosePrice());
             return(0);
           }
           else
            Print("Error : ", GetLastError());
            return(0);
           break;
         }
      if(OrderType()==OP_SELL)
        {
          if(fastma > slowma)
          {
             if(OrderClose(OrderTicket(),Lots,Ask,10,clrNONE))
             Print("Order Closed : ", OrderClosePrice());
             return(0);
            
          }
          else
               Print("Error : ", GetLastError());
               return(0);
          break;
        }

      } 

Hier ist die OrderClose Abschnitt, ich bin nicht mehr immer die ungültige Ticket-Fehler, aber ich bin jetzt immer ungültigen Preis

Hier ist es direkt aus dem Log

2016.12.09 10:47:10.243 Simple Moving Average Crossover Strategy EURUSDi,H1: ungültiger Preis 1.05454000 für OrderClose Funktion


 
Matt_Townsend:

           {
             if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
             Print("Order Closed : ", OrderClosePrice());
             return(0);
           }

...

         {

             if(OrderClose(OrderTicket(),Lots,Ask,10,clrNONE))
             Print("Order Closed : ", OrderClosePrice());
             return(0);

 

Hier ist die OrderClose Abschnitt, ich bin nicht mehr immer das ungültige Ticket Fehler, aber ich bin jetzt immer ungültigen Preis

Hier ist es direkt aus dem Log

2016.12.09 10:47:10.243 Simple Moving Average Crossover Strategy EURUSDi,H1: ungültiger Preis 1.05454000 für OrderClose Funktion


Verwenden Sie nicht Bid/Ask beim Schließen, sondern OrderClosePrice(). Es wird automatisch der gute Preis sein.
 
Alain Verleyen:
Verwenden Sie beim Schließen nicht Bid/Ask, sondern OrderClosePrice(). Es wird automatisch der gute Preis sein.

Sollte ich es einfach in der OrderClose-Funktion ersetzen? und wenn ja sollte ich die OrderClosePrice in der Druckfunktion darunter entfernen?

Bearbeiten:

Das habe ich gerade getan, aber jetzt hält es keine Positionen mehr offen. Es werden nur Positionen geöffnet und geschlossen, obwohl es jetzt keine Probleme bei der Arbeit mit mehreren Paaren gibt.

 

         if(OrderType()==OP_BUY)
         {
           if(fastma < slowma)
           {
             if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
             Print("Order Closed : ", OrderClosePrice());
             return(0);
           }
           else
            Print("Error : ", GetLastError());
            return(0);
           break;
         }

Es gibt keine Notwendigkeit für die Rückgaben oder die Pause, da Sie die Schleife abschließen müssen.

Außerdem ist Ihr Fehlerausdruck davon abhängig, dass


           if(fastma < slowma)


false ist und nicht davon abhängt, ob OrderClose() fehlschlägt



   if(OrderType()==OP_BUY)
     {
      if(fastma<slowma)
        {
         if(OrderClose(OrderTicket(),Lots, OrderClosePrice(),10,clrNONE))
            Print("Order Closed : ",OrderClosePrice());
         else
            Print("Error : ",GetLastError())
        }
     }