Brauche Hilfe zur Order Selektierung
Hallo,
ich möchte gerne eine Strategie auf mehrere Werte laufen lassen. Da die Position auch vom EA verwaltet werden soll , bekomme ich probleme weil wenn ich ne for schleife laufen lasse um mir die offenen order anzeigen zu lassen, ignoriert er die Magicnumber , OrderComment und wtf ever ich Ihm auch sage, ich checks einfach ned warum!?!? als Beispiel: if(OrdersTotal() != 0 ) { int total=OrdersTotal(); for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS)==false) continue; Print(" Position: ",pos,"\n Order Comment : " , OrderComment(), "\n Order Symbol: ", OrderSymbol(),"\nMagic Number: " ,OrderMagicNumber()); if( OrderMagicNumber() == MagicNumber ) { Print ("EA: " + IntegerToString(MagicNumber) + " ist bereits mit einer Posi im Markt, Order verweigert"); // Order liegt bereits im Markt Order_EA =1 ; } else { Order_EA=2; } } } wenn ich ne Position offen habe, zeigt er mir mit Print auch die nachricht an, aber dennoch hinterlegt er bei der nächsten Kerze Order_EA mit der 2 .... was überseh ich hier?!? hab alles mögliche ausprobiert und verzweifle so langsam :(:(:( hoffe jem kann helfen LG |
Es ist immer sinnvoll den Aufruf der Orders mit der Letzten zu beginnen, d.h. die Variable pos zu decrementieren und nicht zu incrementieren. Desweiteren schrieb ich immer wieder: Schreibt den Code mittels des vorgesehenen Buttons # , dann kann man den Code viel besser lesen!
So, ich ordne, sortiere und fasse mal zusammen: Code:
for(int pos = OrdersTotal()-1; pos >= 0; pos--) { |
vielen Dank Doc, so hats geklappt
danke für den Hinweis mit dem code, werd ich das nächste mal tun ;) Ich versuche auch Teilverkäufe mit einzubauen, nach dem Teilverkauf, wird die offene Position aber nicht mehr als die gleiche erkannt und auch nicht mehr vom EA verwaltet, so das der EA bei erneutem Signal eine neue Order öffnet, obwohl die Teilposition, vom gleichen EA ja auch die gleiche MagicNumber hat, wenn man mit der Maus über die Positionsanzeige geht, wird einem die ID auch angezeigt. Woran liegt das, bzw wie kann man hier vorgehen,den wert ermitteln, damit der EA weiß, dass das noch die gleiche Posi ist??? LG |
Ich glaub da hilft "OrderModify" oder so. :confused:
|
Ich kenne den Rest Deines Programms nicht. Aber ich kann Dir sagen wie der u.g. Code funktioniert.
Es wird mit der zuletzt ins Orderbuch aufgenommenen Order begonnen. Entspricht die OrderMagicNumber der vergebenen MagicNumber, dann wird neben der Printmeldung die Variable Order_EA auf 1 gesetzt und die Selektion abgebrochen, denn der EA erkennt damit, dass eine Orde existiert. Wird eine Order selektiert, die nicht der MagicNumber entspricht, dann wird solange Order_EA auf 2 gesetzt, bis evtl. eine Order auftaucht, die der MagicNumber entspricht. D.h., wenn am Ende der Selektion die Variable Order_EA = 2 steht, dann gab es keine Market- oder PendingOrder, die der MagicNumber entsprach. Und wenn Du für jedes Chart eine andere MN vergibst, bedeutet das, dass in diesem Cahrt mit der MN keine Market- bzw. PendingOrder existiert. D.h. wiederum, unter Beibehält der MN, sollte auch nach einem Teilverkauf die Variable Order_EA = 1 stehen und damit signalisieren, dass noch eine Order existiert. traderdoc |
Liste der Anhänge anzeigen (Anzahl: 1)
@ MA-EA glaub du hast mich falsch verstanden ;) aber danke dennoch für den versuch.
@Doc ja genau das dachte ich ja auch, dass es auch bei Teilverkäufen sich ja immer noch um die gleiche MagicNumber handelt, die mir ja per MouseOver auch angezeigt wird wenn ich auf die offenen Positionen gehe. Im Bild sieht man , das der EA das ignoriert und ne neue Order aufmacht. Freitag Abend konnte ich auch keine weiteren Tests mehr machen, war nicht mehr viel los. hier mal mein Code, vllt entdeckst du ja nen Fehler den ich übersehe. Code:
|
Mal abgesehen von der unterschiedlichen Basis bei der SL- und TP-Berechnung, denn auch bei der TP-Berechnung ist bei einer BuyOrder vom Ask auszugehen, denn dort liegt im Endeffekt der OpenPrice, sollte der Rückgabewert der Funktion OrderSend() mit int deklariert werden, denn hinter diesem Rückgabewert verbirgt sich die TicketNumber.
Die Slippage ist gleich 0!!. Das wird im Demo gut gehen, aber nicht auf inem Realkonto. Definitiv besitzt auch die Order nach der Teilschließung noch dieselbe MagicNumber. Arbeitest Du mit ein und demselben Währungspaar gleichzeitig auf verschiedenen Timeframes? Ansonsten kann ich nichts weiter feststellen. Eine Unbekannte bleiben die anderen Funktionen, deren Code nicht einsehbar ist. traderdoc |
hey doc,
ja das mit der Slippage und dem Bid/Ask is mir bewusst, EA läuft noch ned rund, deswegen hab ich das noch so stehen lassen, auf demo geht ja alles :D Der EA soll auf mehrere Werte laufen, nie auf einen wert mit verschiedenen TimeFrames. MagicNumber hab ich mit extern double angelegt, damit ich nicht für jeden wert einen eigen EA schreiben brauch. Danke für den Tipp mit mit der intialisierung der OrderSend Funktion, OrderModify müsste demnach auch mit Bool initialisiert werden oder?! Habs so aus den Docs entnommen |
" MagicNumber hab ich mit extern double angelegt, damit ich nicht für jeden wert einen eigen EA schreiben brauch."
Das verstehe ich nicht. Die MagicNumber sollte unbedingt mit int deklariert werden. traderdoc |
moin , sorry für die Verwirrung, klar mit extern int, war wohl der Uhrzeit geschuldet :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 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