|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
OrderSelect
Hallo liebe Traderfreunde,
Ich brauche mal eine Tip, mein EA soll mit hilfe der Funktion OrderOpenPrice den Einstiegspreis der ersten geöffneten Order ermitteln und diesen dann für die folgenden Order zur Verfügung stellen. input int TP = 20; input int SL = 10; input int SL1 =20; input int TP1 =30; int BUY; double Price; double Price1; input double Distance=20; int ticket; double OP; void OnTick() { if (OrderSelect(ticket, SELECT_BY_TICKET)==true); {OP = OrderOpenPrice(); return;} Price=Ask; Price1=OP-Distance*Point; if (OpenPosCount(BUY)==0){ticket=OrderSend(Symbol(), OP_BUY, 0.86, Price, 3,Price-SL*Point,Price+TP*Point, "MarketOrder", 123456, 0, Blue); return(ticket);} if (OpenPosCount(BUY)==1){OrderSend(Symbol(), OP_SELL, 1.35, Price1, 3, Price1+SL1*10*Point, Price1-TP1*10*Point, "MarketOrder", 12356, 0, Red);} } int OpenPosCount(int BUY) { int OffenePositionen=0; for(int x=0;x<=OrdersTotal()-1;x++) { if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderSymbol()==Symbol()) OffenePositionen ++; } } return(OffenePositionen); } |
|
|||
|
|
|||
ACHSO... Der Wert von OrderOpenPreis soll neu berechnet werden wenn OrdersTotal = 0 ist
|
|
|||
Erklär bitte noch mal ganz genau, was das Ganze werden soll.
|
|
|||
jo
Also, ich eröffne eine Order, dann lasse ich über die Funktion OrderOpenPrice den Preis von der ersten Order ausgeben und weise ihn der Variablen OP zu .
Dann berechne ich das Einstiegslevel für eine zweite Order mit dem Preis der ersten Order. Das funktioniert auch bei der ersten Ausführung. Nun Löscht er aber die Variable nicht wenn alle Order geschlossen sind und eröffnet immer die zweite Order bei dem berechneten Preis der ersten Ausführung ... Price =Ask; Price1 = OP-(Distance*Point); Price3 = OP; if (OpenPosCount(BUY)==0){ticket=OrderSend(Symbol(), OP_BUY, 0.01, Price, 1,Price-SL*10*Point,Price+TP*10*Point, "MarketOrder", 123456, 0, Blue); return(ticket);} if (OpenPosCount(BUY)==1){OrderSend(Symbol(), OP_SELL, 0.03, Price1, 1, Price1+SL1*10*Point, Price1-TP1*10*Point, "MarketOrder", 12356, 0, Red);} int _OrdersTotal = OrdersTotal(); OP = 0.0; for(int z = _OrdersTotal - 1;z >= 0; z --) { if (OrderSelect(1, SELECT_BY_TICKET,MODE_TRADES)==true) { OP = OrderOpenPrice();}} return(OP); } |
|
|||
Vermutlich wegen SelectbyTicket. Denn das Ticket ist ja von der ältesten Order. Probiers mit SelectbyPos,modehistory.
Aber ich bin eher noch als Einsteiger zu deklarieren. |
|
|||
Hallo,
einfach wenn die 2. Order ausgeführt wird setzt du den Wert OP auf z.B. 0. Bei der if-Abfrage baust du dann ein dass eine Order nur eröffnet werden darf wenn OP > 0 oder so ähnlich. PS: (OrderSelect(1, SELECT_BY_TICKET,MODE_TRADES)==true) - verstehe ich nicht. Du willst doch immer nur die erste OFFENE Position abfragen oder? Ticketnummer gibt es immer nur einmal. Hier würdest du immer den OpenPrice der Order mit Ticketnummer 1 abfragen auch wenn diese geschlossen ist. ---Leopold--- |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|