Universal MA Kreuz EA - Seite 106

 
mladen:
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.

 
BlackCoq:
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).

 
mladen:
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.

 
BlackCoq:
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 !"); } } } }
Nochmals vielen Dank.

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)

 
mladen:
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)

 
BlackCoq:
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 !"); } } } }[/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

Dateien:
 
mladen:
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)

 
BlackCoq:
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

 
mladen:
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.

 
BlackCoq:
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