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)
-   -   OrderClose error 4051 (http://www.expert-advisor.com/forum/showthread.php?t=6873)

berlin 29.12.20 16:48

OrderClose error 4051
 
moin zusammen,

ich nutze zum testen von indikatoren meist die selbe code struktur. jetzt ist der bollinger in kombi mit dem rsi dran.

ich habe verschiedene dinge probiert und komme dennoch nicht weiter. er eröffnet einen trade, schliesst ihn aber nicht mehr. bei long und short (einzeln getestet)

in der execute long funktion wird das ticket zurückgegeben, wonach dann in der else if anweisung gefragt wird. verstehe einfach nicht warum er nicht schliesst.hab den code verglichen mit den anderen indikatoren die ich getestet hab und konnte keine auffälligkeiten feststellen.

ich danke für erfolgreiche hinweise zur ergreifung des fehlers :)

lieben gruss,
berlin

hier ist der Teil der checkt ob ein long in frage kommt:
if(IsTradingAllowed())
if(iClose(Symbol(),TimeframeBB,0) > bbLower1){
if(iClose(Symbol(),TimeframeBB,2) < bbLower2 && rsi2 < RSIuntenLong
&& iClose(Symbol(),TimeframeBB,1) < bbUpper1 && rsi1 < RSIuntenLong)
if(orderTicket <= 0){
orderTicket = executeLong();
}
}

else if(iClose(Symbol(),TimeframeBB,0) >= bbUpper0){
if(OrderSelect(orderTicket,SELECT_BY_TICKET) == true){
if(OrderType() == OP_BUY){
bool res = OrderClose(OrderTicket(),OrderLots(),Ask,10000,clr NONE);
orderTicket = 0;
}
}
}

und hier der execute long teil.
int executeLong(){
double entry = Ask;

//double tp = entry + TP * Point;
double sl =entry - SL * Point;

int ticket;
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10000,sl,0,Komm entar,Magic,0,clrNONE);
return ticket;
}

berlin 29.12.20 21:10

mit tp und sl
 
lasse ich den else if teil weg (der soll ja beim gegensignal schliessen). und ich verwende stattdessen den tp und sl. funktioniert es...
mh...

berlin 30.12.20 11:35

hab jetzt versucht anstatt iClose den Ask kurs als signal zeitpunkt zu wählen:



@traderdoc @trading-indikator

könnt ihr mir bitte sagen woran das liegt?

vielen dank und lieben gruss,
berlin

traderdoc 30.12.20 12:38

Zitat:

Zitat von berlin (Beitrag 44890)
moin zusammen,

ich nutze zum testen von indikatoren meist die selbe code struktur. jetzt ist der bollinger in kombi mit dem rsi dran.

ich habe verschiedene dinge probiert und komme dennoch nicht weiter. er eröffnet einen trade, schliesst ihn aber nicht mehr. bei long und short (einzeln getestet)

in der execute long funktion wird das ticket zurückgegeben, wonach dann in der else if anweisung gefragt wird. verstehe einfach nicht warum er nicht schliesst.hab den code verglichen mit den anderen indikatoren die ich getestet hab und konnte keine auffälligkeiten feststellen.

ich danke für erfolgreiche hinweise zur ergreifung des fehlers :)

lieben gruss,
berlin

hier ist der Teil der checkt ob ein long in frage kommt:
if(IsTradingAllowed())
if(iClose(Symbol(),TimeframeBB,0) > bbLower1){
if(iClose(Symbol(),TimeframeBB,2) < bbLower2 && rsi2 < RSIuntenLong
&& iClose(Symbol(),TimeframeBB,1) < bbUpper1 && rsi1 < RSIuntenLong)
if(orderTicket <= 0){
orderTicket = executeLong();
}
}

else if(iClose(Symbol(),TimeframeBB,0) >= bbUpper0){
if(OrderSelect(orderTicket,SELECT_BY_TICKET) == true){
if(OrderType() == OP_BUY){
bool res = OrderClose(OrderTicket(),OrderLots(),Ask,10000,clr NONE);
orderTicket = 0;
}
}
}

und hier der execute long teil.
int executeLong(){
double entry = Ask;

//double tp = entry + TP * Point;
double sl =entry - SL * Point;

int ticket;
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10000,sl,0,Komm entar,Magic,0,clrNONE);
return ticket;
}

Wahrscheinlich wurde orderTicket an der falsche Stelle deklariert. Wenn das lokal erfolgte ist beim nächsten else if orderTicket = 0.

traderdoc

berlin 30.12.20 13:15

vielen dank traderdoc,

eigentlich hab ich aber am orderTicket befehl nicht geändert.

ich fange nochmal bei null an und füge erstmal nur einen bezug auf den indikator hinzu.

ich melde ich :)

berlin 30.12.20 15:37

jetzt ist der error bei 4108
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab ihn jetzt mal aufs minimum reduziert um dem fehler näher zu kommen.

er eröffnet und schliesst jetzt auch so wie es angedacht ist. nur taucht im journal jetzt der error 4108 auf.

ich habe jetzt versucht orderTicket mit shortOrder oder longOrder auszutauschen. orderTicket an verschiedenen stellen weggenommen usw.

selbst wenn ich den logischen ablauf durchgehe finde ich nicht die stelle wo der fehler sitzt.

in den anhang hab ich jetzt mal den code in den anhang reingepackt. vielleicht hilft es euch ja den übeltäter aufzuspüren.

vielen dank und lieben gruss,
berlin

berlin 30.12.20 16:28

selbst wenn ich folgende zeilen direkt am anfang der on tick funktion platziere. ändert es nichts an dem fehler. die zeilen sind eigentlich auch nicht nötig da ja der code ansich an jeder stelle mit dem orderticket arbeitet um es auf 0 oder >0 zu setzen



if(OrderSelect(longOrder,SELECT_BY_TICKET) && OrderCloseTime() > 0) longOrder = 0;
if(OrderSelect(shortOrder,SELECT_BY_TICKET) && OrderCloseTime() > 0) shortOrder = 0;

berlin 30.12.20 19:33

tester mit blick aufs journal
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich wollte mal schauen bei welchem trade der fehler zuerst auftaucht.

für mich erstaunlich ist das er vom ersten trade an auftaucht. zu dem zeitpunkt sollte doch das orderticket eigentlich so und so auf 0 sein.

mysteriös....


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:21 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