Wie programmiert man? - Seite 300

 

Overtrading verhindern

Hallo an alle,

Ich habe meine EA mit allen Ticks-Methode auf einem H4-Chart mit einem MACD-Kreuz, um Aufträge (unter anderem) zu initiieren und die Strategie-Tester öffnet etwa 200 Positionen in den ersten paar Minuten, so dass nach dem tun einige Lesung, die ich erkennen, dass ich brauche, um die Anzahl der Trades zu begrenzen, die es platziert, auf meinem System sollte es nicht platzieren mehr als 1 Handel alle 4 Stunden, weil ich warten, bis die Kerze zu schließen, bevor Hand mit iMACD(.PRICE_CLOSE...) auf den Kerzenschluss warte und diesen mit 0 für MACDMainCurrent & MACDSymbolCurrent und 1 für MACDMainPrevious & MACDSymbolPrevious verrechne.

Meine globalen Variablen sind:

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

Und ich habe diesen Code eingefügt, bevor mein EA auf Long- oder Short-Positionen prüft:

//--- Ermitteln, ob die Order bereits im H4-Zeitblock platziert wurde

wenn ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Prüfen, ob eine Long-Position (BUY) möglich ist

wenn (GlobalVariableGet (hasOrderedGV, false))

{

if ... (hier prüfe ich neben anderen Indikatoren auch das MACD-Kreuz).

Dann, wenn die Order erfolgreich geöffnet wurde:

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

usw. usw.

Kann mir jemand sagen, ob ich das richtig angehe? Ich wusste nicht, ob es vielleicht einen effizienteren oder genaueren Weg gibt, dies zu tun. Vielen Dank!

 

...

Warum zählen Sie nicht einfach, wie viele Aufträge Ihr EA bereits geöffnet hat, und wenn er bereits einen Auftrag geöffnet hat, öffnen Sie keinen neuen Auftrag?

Nur so eine Idee (und eine übliche und einfachste Methode, um die Anzahl der von einem EA geöffneten Orders zu begrenzen)

crsnape@btinternet.com:
Hallo an alle,

Ich habe meinen EA mit der All-Ticks-Methode auf einem H4-Chart getestet und dabei unter anderem ein MACD-Kreuz zur Initiierung von Aufträgen verwendet. Der Strategietester öffnet in den ersten Minuten etwa 200 Positionen, so dass mir nach einiger Lektüre klar wurde, dass ich die Anzahl der von ihm platzierten Trades begrenzen muss. In meinem System sollte er nicht mehr als einen Trade alle 4 Stunden platzieren, da ich auf das Schließen der Kerze warte, bevor ich iMACD(.PRICE_CLOSE...) auf den Kerzenschluss warte und diesen mit 0 für MACDMainCurrent & MACDSymbolCurrent und 1 für MACDMainPrevious & MACDSymbolPrevious verrechne.

Meine globalen Variablen sind:

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

Und ich habe diesen Code eingefügt, bevor mein EA auf Long- oder Short-Positionen prüft:

//--- Ermitteln, ob die Order bereits im H4-Zeitblock platziert wurde

wenn ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Prüfen, ob eine Long-Position (BUY) möglich ist

wenn (GlobalVariableGet (hasOrderedGV, false))

{

if ... (hier prüfe ich neben anderen Indikatoren auch das MACD-Kreuz).

Dann, wenn die Order erfolgreich geöffnet wurde:

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

usw. usw.

Kann mir jemand sagen, ob ich das richtig angehe? Ich wusste nicht, ob es vielleicht eine effizientere oder genauere Methode gibt? Danke!
 

Nur weil mein EA typischerweise mehrere Positionen gleichzeitig offen hat; so konnte ich nicht verwenden, sagen,

if (CountedOrders > 5)

Pause;

Oder etwas in der Art, weil ich nicht weiß, wie viele Positionen zu einem bestimmten Zeitpunkt offen sein werden. Ich muss es auf die Zeit beziehen, die ich denke.

 

I m befestigen diese EA zu meinem 5-stelligen mt4 Konto... Aber es öffnet sich kein Handel....

Bitte helfen Sie mir

Dateien:
dipu_2.mq4  5 kb
 

Pls ich brauche dis ea zu bearbeiten, um stoploss in 3 Schritten zu bewegen

dieser EA hat bereits eine Breakeven-Fähigkeit, aber ich möchte, dass dieser EA meinen

Stoploss von seinem ersten Breakeven-Punkt zu einem anderen +20 Pips, sobald mein Gewinn auf

+27pips und verschieben Sie es wieder zu +40pips, wenn es zu +50pips und sogar

mehr, wenn möglich.

Dateien:
 

Hallo Mladen,

danke für den Hinweis! Ich habe das Problem bereits gelöst.

Weißt du übrigens, welche Funktion MODE und SHIFT in iStochasticdo haben, oder gibt es eine Stelle, die mehr Informationen liefert? Ich habe mir die Dokumentation auf der mql4-Website durchgelesen, aber sie ergibt für mich keinen Sinn. Die Erklärung ist zu kurz.

Z.B..

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Strom + 1);

Was bewirkt der Strom + 0 usw.?

Vielen Dank und herzliche Grüße

Terrance

mladen:
Terrance Das ist eine Funktion. Hängen Sie sie an das Ende Ihres EAs und platzieren Sie Aufrufe an den Stellen, an denen Sie es für angebracht halten, zu prüfen, ob eine Order bereits zu einem aktuellen Takt geöffnet ist
 

Hallo würde jemand in der Lage sein, mir zu sagen, wo ich bin hier falsch bitte gehen? Ich erhalte den Fehlercode ')' falsche Parameteranzahl in der rot markierten Zeile - aber alle Parameter addieren sich...

wenn ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Prüfen, ob eine Long-Position (BUY) möglich ist

wenn (GlobalVariableGet (hasOrderedGV, false)) Danke

 

...

Terrance

MODE_MAIN bedeutet, dass Sie den Wert der stochastischen Zeile einlesen. MODE_SIGNAL bedeutet, dass Sie den Wert der stochastischen Signallinie einlesen.

SHIFT ist für alle Indikatoren gleich (auch für die benutzerdefinierten). Als Beispiel: SHIFT=0 bedeutet den Wert des aktuellen Balkens, SHIFT=1 bedeutet den Wert des ersten geschlossenen Balkens und so weiter ...

tkuan77:
Hallo Mladen,

Danke für den Hinweis! Ich habe das Problem bereits gelöst.

Wissen Sie übrigens, welche Funktion MODE und SHIFT in iStochasticdo haben, oder gibt es eine Stelle, die mehr Informationen liefert? Ich habe mir die Dokumentation auf der mql4-Website durchgelesen, aber sie ergibt für mich keinen Sinn. Die Erklärungen sind zu kurz.

Z.B..

iStochastic(NULL, 0, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Strom + 1);

Was bewirkt der Strom + 0 usw.?

Vielen Dank und schöne Grüße

Terrance
 

...

Der Fehler liegt darin, dass GlobalVariableGet() nur einen Parameter hat (den Variablennamen). Sie brauchen den zweiten Parameter (das"false", das Sie im Funktionsaufruf haben) nicht

crsnape@btinternet.com:
Hallo, kann mir jemand sagen, was ich hier bitte falsch mache? Ich erhalte den Fehlercode ')' Falsche Parameteranzahl in der rot markierten Zeile - aber alle Parameter summieren sich...

wenn ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Prüfung auf Möglichkeit einer Long-Position (BUY)

if (GlobalVariableGet (hasOrderedGV, false)) Thanks
 

Ich habe den Code wie folgt geändert, und er ist zumindest fehlerfrei - ist das in Ordnung?

if (GlobalVariableGet (hasOrderedGV) == false)

Grund der Beschwerde: