Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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!
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);
}
}
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".
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 :)
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 :)
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
{
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 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())
}
}