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
Versuchen Sie es mit einer Funktion wie der folgenden: Sie liefert Ihnen den genauen Betrag des Gewinns (oder Verlusts) der letzten Order
Vielen Dank für Ihre Hilfe, Mladen. Ich zwickt mit dem Code ein wenig, bis ich es ohne Fehler kompilieren, aber die EA immer noch stoppt und umgekehrt nach einem Verlust. Dies ist der genaue Code, den ich jetzt verwende:
{
double TempLastOrderProfit = 0;
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
{
CloseTime = OrderCloseTime();
}
}
if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0)
{
if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))
{
subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !");
}
}
}
double GetLastPL() gibt mir folgenden Fehler: '(' - Funktionsdefinition unerwartet.
Vielen Dank für deine Hilfe, Mladen. Ich habe ein wenig am Code herumgefeilt, bis er fehlerfrei kompiliert wurde, aber der EA stoppt immer noch und kehrt nach einem Verlust um. Dies ist der genaue Code, den ich jetzt verwende: double GetLastPL() Gibt mir den folgenden Fehler: '(' - function definition unexpected.
BlackCoq
Sie müssen alle logischen Vergleiche innerhalb der Schleife durchführen, da Funktionen wie OrderProfit() den Gewinn der aktuell ausgewählten Order aus einer Liste geschlossener Orders zurückgeben. Wenn dies nicht innerhalb der Hauptschleife geschieht (for(int i=OrdersHistoryTotal()-1;i>=0;i--)), dann wird nur die letzte ausgewählte Order getestet, was nicht bedeutet, dass es sich um die letzte Order handelt (metaquotes weist in seiner Dokumentation ausdrücklich darauf hin, dass die Orders in der Liste der geschlossenen (oder noch geöffneten) Orders nicht in einer bestimmten Reihenfolge stehen müssen - es liegt in der Verantwortung des Programmierers, die Reihenfolge zu überprüfen).
BlackCoq Sie müssen alle logischen Vergleiche innerhalb der Schleife durchführen, da Funktionen wie OrderProfit() den Gewinn der aktuell ausgewählten Order aus einer Liste geschlossener Orders zurückgeben. Wenn dies nicht innerhalb der Hauptschleife geschieht (for(int i=OrdersHistoryTotal()-1;i>=0;i--)), dann wird nur die zuletzt ausgewählte Order getestet, was nicht bedeutet, dass es sich um die letzte Order handelt (in der Dokumentation von metaquotes wird ausdrücklich darauf hingewiesen, dass die Orders in der Liste der geschlossenen (oder noch offenen) Orders nicht in einer bestimmten Reihenfolge stehen müssen - es liegt in der Verantwortung der Programmierer, die Reihenfolge zu überprüfen).
Nachdem ich viele Stunden mit dieser scheinbar einfachen Aufgabe gescheitert bin, habe ich mich entschlossen, viel mehr Programmieren zu lernen, bevor ich weitermache. Trotzdem vielen Dank für Ihre Hilfe!
Als ich dies versuchte, öffnete der EA überhaupt keine Positionen:
{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]
And with this, it would "stop and reverse" even if last trade was a loss:
[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }Nochmals vielen Dank.
Nachdem ich viele Stunden an dieser scheinbar einfachen Aufgabe gescheitert bin, habe ich mich entschlossen, mehr über Programmierung zu lernen, bevor ich weitermache. Trotzdem vielen Dank für Ihre Hilfe!
Als ich dies versuchte, eröffnete der EA überhaupt keine Positionen:
{ double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); } } { if(StopAndReverse==true && subTotalTrade()>0 && OrderProfit()>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]
And with this, it would "stop and reverse" even if last trade was a loss:
[PHP] { double TempLastOrderProfit = 0; datetime CloseTime = 0; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime) { CloseTime = OrderCloseTime(); TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission(); } } return(TempLastOrderProfit); { if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0) { if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true)) { subCloseOrder(); if(subTotalTrade()>0) subCloseOrder(); if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }BlackCoq
Wenn Sie die Funktion, die ich gepostet habe, so verwenden, wie sie ist, gibt sie Ihnen den exakten Gewinn der letzten geschlossenen Order zurück (Sie müssen nichts daran ändern)
BlackCoq Wenn Sie die Funktion, die ich gepostet habe, so verwenden, wie sie ist, liefert sie Ihnen den exakten Gewinn der letzten geschlossenen Order (es ist nicht nötig, etwas daran zu ändern)
Wenn ich versuche, die Funktion zu kopieren, erhalte ich zahlreiche Fehler, egal wie ich versuche, sie zu optimieren.
Dieser Code:
{
double GetLastPL()
{
double TempLastOrderProfit = 0;
datetime CloseTime = 0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime()>CloseTime)
{
CloseTime = OrderCloseTime();
TempLastOrderProfit = OrderProfit() + OrderSwap()+ OrderCommission();
}
}
return(TempLastOrderProfit);
{
if(StopAndReverse==true && subTotalTrade()>0 && TempLastOrderProfit>0)
{
if((LastTrade=="BUY" && SellCondition==true) || (LastTrade=="SELL" && BuyCondition==true))
{
subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !");
}
}
}
}Liefert mir die Fehler:
Kompilieren von 'universalMAcrossECNmartingaleSAR.mq4'...
'(' - Funktionsdefinition unerwartet (538, 20)
TempLastOrderProfit' - Variable nicht definiert (548, 15)
TempLastOrderProfit' - Variable nicht definiert (551, 15)
TempLastOrderProfit' - Variable nicht definiert (553, 52)
Wenn ich versuche, die Funktion zu kopieren, erhalte ich zahlreiche Fehler, egal wie ich versuche, sie zu optimieren.
Dieser Code:
if(IsTesting() && PrintControl==true) Print("STOP AND REVERSE !"); } } } }[/PHP]
Gives me the errors:
[PHP]
Compiling 'universalMAcrossECNmartingaleSAR.mq4'... '(' - function definition unexpected (538, 20)'TempLastOrderProfit' - variable not defined (548, 15)'TempLastOrderProfit' - variable not defined (551, 15)'TempLastOrderProfit' - variable not defined (553, 52)
BlackCoq
Diese Funktion muss vor jeder anderen Funktion eingefügt werden. Hier ist ein sehr einfaches Beispiel, das zeigt, wie sie funktioniert und wie sie verwendet werden sollte
BlackCoq Diese Funktion muss vor jeder anderen Funktion eingefügt werden. Hier ist ein sehr einfaches Beispiel, das zeigt, wie es funktioniert und wie es verwendet werden sollte
Ich bin sicher, dass ich hier etwas übersehe, aber selbst wenn ich versuche, die Funktion außerhalb einer anderen Funktion im EA zu kopieren, erhalte ich immer noch die folgenden Fehler:
'(' - Funktionsdefinition unerwartet (nach double GetLastPL())
TempLastOrderProfit' - Variable nicht definiert (554, 15)
TempLastOrderProfit' - Variable nicht definiert (557, 15)
Ich bin sicher, dass ich hier etwas übersehe, aber selbst wenn ich versuche, die Funktion außerhalb einer anderen Funktion im EA zu kopieren, erhalte ich immer noch die folgenden Fehler:
'(' - Funktionsdefinition unerwartet (nach double GetLastPL())
'TempLastOrderProfit' - Variable nicht definiert (554, 15)
'TempLastOrderProfit' - Variable nicht definiert (557, 15)Sory, aber ohne Ihren Code habe ich keine Ahnung, was Sie tun
Wie man an diesem Test-EA sehen kann, funktioniert es ohne Probleme
Sory, aber ohne Ihren Code habe ich keine Ahnung, was Sie tun, wie Sie von diesem Test EA sehen können, es funktioniert ohne Probleme überhaupt
Ich erhalte mehrere Fehler, wenn ich versuche, den EA zu kompilieren, den Sie auch angehängt haben. Verwenden wir unterschiedliche Versionen von MT4?
Ich hänge den EA an, dem ich versuche, die Funktion vor "Stop and Reverse" hinzuzufügen.
Ich erhalte mehrere Fehler, wenn ich versuche, den EA, den Sie angehängt haben, auch zu kompilieren. Benutzen wir unterschiedliche Versionen von MT4? Ich hänge den EA an, dem ich versuche, die Funktion vor "stop and reverse" hinzuzufügen.
Wenn Sie Build 509 verwenden, dann ersetzen Sie "void start(void)" durch "void start()" und Sie werden keine Kompilierungsfehler erhalten. Siehe die Beispiele für beide Builds, Build 509 und Build 610 (die Metaeditor-Version für Build 610 ist 887)
Auch das Anhängen des EA mit der bereits angehängten Funktion GetLastPL(). Alles was Sie tun müssen, ist einen Aufruf von GetLastPL() an einer Stelle im Code zu machen, wo Sie möchten, dass geprüft wird, ob der Gewinn der letzten Order positiv oder negativ war
_________________________
PS: Es wird sowohl in Build 509 als auch in Build 610 kompiliert. In 610 werden Sie 3 Warnungen erhalten, aber diese sind für den Betrieb des EA irrelevant