EA läuft nicht auf mehreren Paaren, brauche Hilfe

 
Ich bin sehr neu in der Codierung mql4, und haben meine erste EA abgeschlossen. Mein einziges Problem ist jetzt, dass ich es nicht dazu bringen kann, Trades für mehr als ein Paar zu öffnen. Im EA-Abschnitt auf dem Terminal neben dem Journal wird der Fehler "Ungültiges Ticket für die Orderclose-Funktion" angezeigt, obwohl der EA nur für ein Paar Geschäfte öffnet und schließt. Könnte mir bitte jemand helfen?
 
Matt_Townsend:
Ich bin sehr neu in der Programmierung von mql4 und habe meinen ersten EA fertiggestellt. Mein einziges Problem ist, dass ich ihn nicht dazu bringen kann, Trades für mehr als ein Paar zu öffnen. Im EA-Abschnitt des Terminals neben dem Journal wird der Fehler "Ungültiges Ticket für die Orderclose-Funktion" angezeigt, obwohl der EA die Geschäfte für ein Paar problemlos öffnet und schließt. Kann mir bitte jemand helfen.

Wie sollen wir das wissen, wenn Sie uns weder Ihren Code noch Ihr Fehlerprotokoll zeigen?

Wir sind keine Gedankenleser! Wenn Sie unsere Hilfe wollen, müssen Sie Ihren Code sowie die Fehler, die er verursacht (die Ergebnisse im Protokoll), zeigen. Es wäre auch hilfreich zu wissen, welche Währungspaare und Zeitrahmen Sie testen, wenn wir einen Blick auf Ihren Code werfen.

Bitte beachten Sie auch, dass Sie auf dem MetaTrader 4 nur eine einzige Währung gleichzeitig im Strategy Tester testen können. Wenn Ihr EA mehrere Währungen gleichzeitig von einem einzigen Chart aus handelt, können Sie ihn nicht im Strategietester testen - nur auf einem Live-Demo- oder Echtgeldkonto!

 
Matt_Townsend: obwohl der EA den Handel mit einem Paar problemlos öffnet und schließt.
Deshalb empfehle ich
Handeln Sie nicht mehrere Währungen in einem EA
 
Matt_Townsend: Hier ist mein Code, und ich habe das Problem auf einer Live-Demo, ich habe sogar versucht zu sehen, ob ich mehrere Terminals verwenden könnte, um das Problem zu lösen. Vielen Dank für Ihr bisheriges Feedback.

Bitte bearbeiten Sie Ihren Beitrag und verwenden Sie die SRC-Schaltfläche, um Ihren Code hinzuzufügen! Kopieren Sie den Code nicht einfach als Standardtext, da er schwer zu lesen ist. Ich bin sicher, dass Sie aus anderen Threads ersehen können, wie es gemacht werden sollte. Bitte benutzen Sie den SRC-Button, um Ihren Code zu posten.

EDIT: Wie bereits angefragt - . .. Es wäre auch hilfreich zu wissen, mit welchen Währungspaaren und Zeitrahmen Sie testen ...

EDIT2: Wie bereits angefragt - ... sowie die Fehler, die es gibt (die Ergebnisse im Log) ...

 
Fernando Carreiro:
Bitte bearbeiten Sie Ihren Beitrag und verwenden Sie die SRC-Schaltfläche, um Ihren Code hinzuzufügen! Kopieren Sie den Code nicht einfach als Standardtext, da er schwer zu lesen ist. Ich bin sicher, Sie können aus anderen Threads ersehen, wie es gemacht werden sollte. Bitte verwenden Sie die SRC-Schaltfläche, um Ihren Code zu posten.
//+------------------------------------------------------------------+
//|                     Simple Moving Average Crossover Strategy.mq4 |
//|                                                 Matthew Townsend |
//+------------------------------------------------------------------+
#property version   "1.05"
#property strict
//---

//---Inputs
extern  double Lots         =0.01;
extern  int    FastMA       =5;
input   int    FastMAMode   =MODE_EMA;
extern  int    SlowMA       =8;
input   int    SlowMAMode   =MODE_SMA;

//+----------------------------------------+
//|undesirables                            |
//+----------------------------------------+
int init()
{
   //----
   //----
   return(0);
}

int deinit()
{
   //----
   //----
   return(0);
}
//+---------------------------------------------+
//|System start                                 |
//+---------------------------------------------+
int start()
{


    double fastma, slowma;
    int    ticket, total;
    //---define Ma's
    
    fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
    slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
    
    total = OrdersTotal();
    //---Start operations
    
    if(total < 1)
    {
       if(fastma > slowma)
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Buy order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       if(fastma < slowma)
       {
         ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
         if(ticket > 0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
            Print("Sell order opened : ", OrderOpenPrice());
         }
         else
           Print("Error opening order : ", GetLastError());
           return(0);
       }
       return(0);
    }
    bool ans;
    
        
         if(OrderType()==OP_BUY)
         {
           while(fastma < slowma)
           {
             ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
             if(ticket < 1)
             {      
                if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                Print("Buy order closed : ", OrderClosePrice());    
             }    
             else
               Print("Error closing order : ", GetLastError());
               return(0);
           }
         }
      if(OrderType()==OP_SELL)
        {
          while(fastma > slowma)
          {
             ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
             if(ticket < 1)
             {
               if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("Sell order closed : ", OrderClosePrice());
              
             }
             else
               Print("Error closing order : ", GetLastError());
               return(0);
          }
          
        }
    
    return(0);
}

//+-----------------------------------------------------------------------------------+
 
Fernando Carreiro:
Ich habe Sie gebeten, Ihren vorherigen Beitrag zu bearbeiten und nicht einen neuen hinzuzufügen, damit der Thread nicht so lang wird!
Tut mir leid, ich bin auch sehr neu in diesem Forum, kann ich die 2 Beiträge löschen?
 
Matt_Townsend:
Ich habe auf dem 1-Stunden-Zeitrahmen, EURUSD und 1 Stunde GBPUSD getestet.
Es gibt bereits zwei Compiler-Warnungen für den folgenden Code:
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...

Sie überprüfen das Ergebnis für die Close-Operation nicht richtig.

In Bezug auf die Logik gibt es mehrere Probleme mit Ihrem EA, aber so wie es im Moment aussieht, läuft er bei mir im Strategy Tester ohne Fehler, also liefern Sie bitte die Liste der Fehler, die Sie erhalten!

 
Fernando Carreiro:
Es gibt bereits zwei Compiler-Warnungen für den folgenden Code:
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...

Sie überprüfen das Ergebnis des Schließvorgangs nicht korrekt.

In Bezug auf die Logik gibt es mehrere Probleme mit Ihrem EA, aber wie es im Moment steht, läuft es ohne Fehler auf meinem Ende, so liefern Sie bitte die Liste der Fehler, die Sie erhalten!

Der einzige Fehler, den ich vom EA bekomme, ist einungültiges Ticket für die orderclose-Funktion, mit einer Zahl daneben. Ich würde gerne das aktuelle Protokoll zeigen, aber auf dem zweiten Chart, auf dem der EA läuft, tut er nichts, denn normalerweise würde er versuchen, sofort einen Handel zu eröffnen. Wenn, und wenn das Protokoll beginnt mit dem Fehler zu füllen, wie würde ich gehen über zeigt Ihnen das eigentliche Protokoll?
 
Matt_Townsend:
Die einzige Fehlermeldung, die ich vom EA bekomme, ist "invalid ticket for orderclose function", mit einer Zahl daneben. Ich würde gerne das aktuelle Log zeigen, aber auf dem zweiten Chart, auf dem der EA läuft, tut er nichts, denn normalerweise würde er versuchen, sofort einen Handel zu eröffnen. Falls und wenn sich das Protokoll mit dem Fehler füllt, wie würde ich vorgehen, um Ihnen das tatsächliche Protokoll zu zeigen?

Markieren Sie die betreffenden Zeilen mit Klick, Strg-Klick oder Umschalt-Klick (Standard-Windows-Bedienung), dann Rechts-Klick auf die Auswahl und wählen Sie "Kopieren"!

EDIT: In Bezug auf den Code, Sie sind mit dem OrderSelect, aber Sie sind immer davon ausgehen, 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, der fehlschlagen könnte, wenn der ursprüngliche OrderSelect() ebenfalls fehlgeschlagen ist. Wie ich schon sagte, haben Sie viele logische Probleme in Ihrem Code!

 

    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 für den Abschluss neu, damit er logisch ist; Sie sollten die Variable ticket hier überhaupt nicht verwenden.
 
Matt_Townsend:
Der einzige Fehler, den ich von der EA bekommen habe, ist einungültiges Ticket für die Orderclose-Funktion, mit einer Zahl daneben. Ich würde gerne das aktuelle Protokoll zeigen, aber auf dem zweiten Chart, auf dem die EA läuft, tut sie nichts, denn normalerweise würde sie versuchen, sofort einen Handel zu eröffnen. Wenn sich das Protokoll mit dem Fehler füllt, wie kann ich Ihnen dann das tatsächliche Protokoll zeigen?

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. So im Wesentlichen Ihre EA wird nicht korrekt funktionieren weder mit sich selbst noch andere EA's.

So wie es aussieht, können Sie diesen EA nur allein verwenden, ohne dass ein anderer EA läuft, nicht einmal selbst auf einem anderen Chart!

Grund der Beschwerde: