Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Stop Order werden nicht umgesetzt (http://www.expert-advisor.com/forum/showthread.php?t=6423)

Karacho 21.05.19 17:41

Stop Order werden nicht umgesetzt
 
Hallo,

ich möchte, dass jeden Tag um 3 Uhr eine Stop Order gesetzt wird und habe deshalb den nachfolgenden Code geschrieben. Wenn ich diesen allerdings im Strategietester teste, wird nicht an jedem Tag eine Order gesetzt.

Ich denke, dass das Problem in der Zeile: double resultATR = ... liegt.

Wenn ich resultATR = 0.1 wähle, werden alle Stop Orders wie gewünscht umgesetzt.





void OnTick()
{

double resultATR = iATR(NULL,0,24,1);

double Einstiegskurs1 = Close[0] + resultATR;

SL1= 1;
Positionsgroesse = 0.01;


if(ZaehleStopKaufOrdern() == 0 && Hour() == 3 )// Order wird nur ausgeführt wenn noch keine offene Stop Order platziert wurde
{
datetime expiration = Time[0]+60*60;
EroeffneStopOrder(Symbol(),Positionsgroesse, Einstiegskurs1, "kauf", SL1, TP, expiration);
}

}





int ZaehleStopKaufOrdern()
{
int OrderZaehler=0;
for(int Zaehler = 0; Zaehler <= OrdersTotal()-1; Zaehler++)
{
if(OrderSelect(Zaehler,SELECT_BY_POS) == true)
{
if(OrderSymbol() == Symbol() && OrderType() == OP_BUYSTOP && OrderMagicNumber()==MagicNumber)
OrderZaehler++;
}
else
{
Print("OrderSelect ergab den FehlerCode: ",GetLastError());
}
}

return(OrderZaehler);
}







int EroeffneStopOrder (string markt, double Lots, double Eroeffnungskurs, string Handelsrichtung, double StopLoss, double TakeProfit, datetime expire)
{

if(Handelsrichtung == "kauf")
{

while(IsTradeContextBusy()) Sleep(10);
Ticketnummer = OrderSend(markt,OP_BUYSTOP, Lots, Eroeffnungskurs, Slipp, StopLoss, TakeProfit, "Stop-Kauf-Order",MagicNumber,expire,Green);

if(Ticketnummer == -1) {
FehlerCode = GetLastError();
string FehlerBeschreibung = ErrorDescription(FehlerCode);
string FehlerAusgabe = StringConcatenate("Eröffnung Stop-Kauf-Order:",FehlerCode,": ",FehlerBeschreibung);
Print(FehlerAusgabe);
}
}

if(Handelsrichtung == "verkauf")
{
while(IsTradeContextBusy()) Sleep(10);
Ticketnummer = OrderSend(markt,OP_SELLSTOP, Lots, Eroeffnungskurs, Slipp, StopLoss, TakeProfit, "Stop-Verkauf-Order", MagicNumber,expire,Red);

if(Ticketnummer == -1) {
FehlerCode = GetLastError();
string FehlerBeschreibung = ErrorDescription(FehlerCode);
string FehlerAusgabe = StringConcatenate("Eröffnung Stop-Verkauf-Order:",FehlerCode,": ",FehlerBeschreibung);
Print(FehlerAusgabe);
}
}

return(Ticketnummer);
}






Ich würde mich sehr freuen, Hilfe zu bekommen und Danke im Voraus!!

Leopold 22.05.19 14:23

Hallo,

welche Fehlermeldungen bekommst du?

Ich vermute mal, du müsstest Einstiegskurs an die Dezimalstellen des Symbols anpassen. (NormalizeDouble)

---Leopold---

Karacho 22.05.19 16:31

Hallo,

also eine Fehlermeldung erhalte ich nicht. Ich stelle nur beim Backtest fest, dass nicht jeden Tag die Stop Order erteilt wird.

"Einstiegskurs an die Dezimalstellen des Symbols anpassen" sagt mir jetzt nichts.
Wie müsste ich das machen ?

Vielen Dank im Voraus!

Leopold 22.05.19 16:39

Beispiel:

double Einstiegskurs1 = NormalizeDouble(Close[0] + resultATR, Digits);


aber sinnvoller wäre es vielleicht wenn du NormalizeDouble bei OrderSend integrierst. Dann musst du bei Kursberechnungen nicht immer darauf achten. NormalizeDouble solltest du generell verwenden für Preise (Open, StopLoss, TakeProfit, ...)

Info:
https://docs.mql4.com/convert/normalizedouble

https://docs.mql4.com/predefined/digitsvar

---Leopold---

Karacho 22.05.19 17:00

Hallo,

mit NormalizeDouble() hat es geklappt. Vielen Dank für Deine Hilfe !!


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:37 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum