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 MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Möchte über EA den TakeProfit für eine Order setzen... (http://www.expert-advisor.com/forum/showthread.php?t=2500)

muruki 01.11.12 13:23

Möchte über EA den TakeProfit für eine Order setzen...
 
Hallo,
Ich habe mir einen TradeRequest aufgebaut und möchte
in diesem den TakeProfit setzen.

trReq.tp = trReq.price + 0.002;

dann über "OrderSend" schicke ich die Order los. Jedoch wird bei der eröffneten Position im MetaTrader 5 nicht der TP gesetzt. Im Debugger kann ich aber den richtigen Wert des TP erkennen. Woran könnte das liegen das der TP in der gekaufen Position immer noch auf 0,00000 steht?

Danke für eine Antwort.

bonenkai 01.11.12 14:28

Ich kann jetzt nur für MQL4 sprechen aber vllt. funktioniert die Lösung ja bei dir auch: Ich eröffne die Trades zunächst mit OrderSend, prüfe dann, ob die Eröffnung erfolgreich war und setze dann danach SL und TP mittels OrderModify.

muruki 01.11.12 15:44

Zitat:

Zitat von bonenkai (Beitrag 17579)
Ich kann jetzt nur für MQL4 sprechen aber vllt. funktioniert die Lösung ja bei dir auch: Ich eröffne die Trades zunächst mit OrderSend, prüfe dann, ob die Eröffnung erfolgreich war und setze dann danach SL und TP mittels OrderModify.

habe die Prüfung hinzugefügt. das funktioniert. Hast du ein Beispiel wie ich den TradRequest updaten kann?

trReq....
trReq....
OrderSend(trReq,trRez);

Prüfung

OrderModify(ticket,OrderOpenPrice(),Bid+StopLoss*P oint*platform_digital,Bid-TakeProfit*Point*platform_digital,0);//Modify it!

---> hab da so was in der Art gefunden, aber wie bekomme ich das Ticket zu dem trReq ..usw.

muruki 01.11.12 17:13

Aktueller Code, wobei "orderModify" nicht funktioniert.
Wie macht man es richtig? --> m_Trade stört mich.
und die Parameter in OrderModify sind nicht alle OK.


trReq....
trReq....
OrderSend(trReq,trRez);

if (trRez.retcode == 10009 || trRez.retcode == 10008) { // Order ist erfüllt oder plaziert
ulong ticket = trRez.order;
Alert("Eine Kauforder wurde erfolgreich durchgeführt mit dem Ticket: ", ticket,"!!");

m_Trade.OrderModify(ticket, aktTickkursBid, aktTickkursBid - 0.002, aktTickkursBid + 0.002, m_order.TypeTime(), m_order.TimeExpiration(), 0.00000);

} else {
Alert("Eine Kauforder konnte nicht abgeschlossen werden - Error: ", GetLastError());
ResetLastError();
return;
}

bonenkai 01.11.12 19:20

Ich kann dir nur ein Stück MQL4-Code als Beispiel anbieten, welches bei mir funktioniert.
In "ticket" erhältst du die Ticketnummer als Antwort der OrderSend-Funktion, die du dann in der OrderModify-Funktion einsetzen kannst. Alle anderen Variablen musst du natürlich auf deinen Code anpassen und mit für dich vernünftigen Werten versehen.


//**********************************************
ticket = OrderSend(symbol,OP_BUY,myLotSize,ask,orderslip,0, 0);
send_err = GetLastError();
if (send_err == 0)
{
OrderModify(ticket,bid,stoploss,takeprofit,0);
mod_err = GetLastError();
}

muruki 02.11.12 10:32

Zitat:

Zitat von bonenkai (Beitrag 17582)
Ich kann dir nur ein Stück MQL4-Code als Beispiel anbieten, welches bei mir funktioniert.
In "ticket" erhältst du die Ticketnummer als Antwort der OrderSend-Funktion, die du dann in der OrderModify-Funktion einsetzen kannst. Alle anderen Variablen musst du natürlich auf deinen Code anpassen und mit für dich vernünftigen Werten versehen.


//**********************************************
ticket = OrderSend(symbol,OP_BUY,myLotSize,ask,orderslip,0, 0);
send_err = GetLastError();
if (send_err == 0)
{
OrderModify(ticket,bid,stoploss,takeprofit,0);
mod_err = GetLastError();
}


Bei MQL 5 ist es nun wohl anders.
OrderModify() kennt er beim Kompilieren nicht (Funktion nicht definiert) --> oder muss ich noch was bestimmtest includen?

verwende ich:
datetime to_date = 0; //TimeCurrent();
m_Trade.OrderModify(ticket, aktTickkursBid, sl, tp, ORDER_TIME_GTC, to_date, 0.0);

dann bringt er mir folgende Meldung:
2012.11.02 10:23:02 CTrade::OrderSend: modify #23355496 at 1.28741 (sl: 1.28541 tp: 1.28941) [invalid request]

Im Testlauf kommt diese Meldung: 2012.11.02 10:37:22 2012.10.16 14:44:39 failed modify order #41 buy 0.00 at market sl: 0.00000 tp: 0.00000 -> 1.30448, sl: 1.30248 tp: 1.30648 [Invalid request]

Was ist denn da ungültig?
Das darf doch nicht so schwer sein den TakeProfit zu updaten.
Wenn man das manuell macht gehts ja auch ganz einfach ;)

Aber erst die Order senden und dann updaten scheint richtig zu sein. Nur ist irgendwas noch ungültig.
Danke für eure weitere Hilfe.

muruki 02.11.12 11:03

Verdammt ..... ich hab es raus bekommen :D :

LÖSUNG: m_Trade.PositionModify(my_symbol, sl, tp);

Vielen Dank trotzdem!

muruki 02.11.12 16:09

Zitat:

Zitat von muruki (Beitrag 17585)
Verdammt ..... ich hab es raus bekommen :D :

LÖSUNG: m_Trade.PositionModify(my_symbol, sl, tp);

Vielen Dank trotzdem!


Ich habe somit den TakeProfit einer Position updaten können.
Nun stellete ich mir die Aufgabe:

Gibt mir zu dieser Position alle Orders(Deals) und deren TakeProfits zu analysieren.

Gibt es überhaupt eine Möglichkeit sich zu einer Position alle offenen Orders zurück zu geben zu lassen?
So wie das wohl früher in MQL4 war?

In MQL5 ist es ja wohl so, das wenn ich eine Position schließe, alle dazugehörigen Orders mitgeschlossen werden. Das will ich aber nicht.

Jede Order soll einen TakeProfit haben und sich selber schießen.
Ist nicht mehr machbar oder?


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