Nelly1966 Posted March 10, 2011 Report Share Posted March 10, 2011 Hallo alle zusammen, bin seit Tagen dabei eine Funktion zu meinem EA hinzuzufügen, aber ich kommen zu keinem vernünftigen Ergebnis. Vielleicht findet der ein oder andere Profi-Coder die Zeit, einen kurzen Blick darauf zu werfen. bool last_order_buy = false, bool last_order_sell = false; int OHT=OrdersHistoryTotal()-1; for(int i=OHT; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Zugriff auf historische Daten nicht möglich (",GetLastError(),")"); break; } if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderType()==OP_BUY) { Print("Letzte Order war ein Kauf"); last_order_buy = true; } if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderType()==OP_SELL) { Print("Letzte Order war ein Verkauf"); last_order_sell = true; } } Der EA soll nach einem abgeschlossenen Kauf nur einen Verkauf tätigen, danach wieder ein Kauf ... usw. Sell, Buy, Sell, Buy ... Da der EA auch nicht immer arbeitet, soll zu Tagesbeginn die Richtung egal sein, also nicht die entgegengesetzte Richtung zum letzten Trade des vorherigen Tages. Hierzu ist mir noch gar nichts eingefallen. Hier könnte ich einen Tipp gut gebrauchen. Vielen Dank allen im voraus. MfGNelly Quote Link to comment Share on other sites More sharing options...
Philipp Posted March 10, 2011 Report Share Posted March 10, 2011 Du durchläufst die Orderhistorie in der falschen Richtung. Die letzter Order deiner For-Schleife ist immer die erste "der Geschichte". nebenbei: Wozu überhaupt die For-Schleife? Dich interessiert doch nur die jüngste Order der Historie? Quote Link to comment Share on other sites More sharing options...
Nelly1966 Posted March 10, 2011 Author Report Share Posted March 10, 2011 (edited) Du durchläufst die Orderhistorie in der falschen Richtung. Die letzter Order deiner For-Schleife ist immer die erste "der Geschichte". nebenbei: Wozu überhaupt die For-Schleife? Dich interessiert doch nur die jüngste Order der Historie? Hallo Phillipp, wie wäre denn Dein Lösungsvorschlag? so in etwa? int OHT = OrdersHistoryTotal()-1; bool Buy = false; bool Sell = false; if(OHT == 0 || OrderType()==OP_SELL) Sell = true; if(OHT == 0 || OrderType()==OP_BUY) Buy = true; Dann wäre auch der tägliche "Neubeginn" gleich mit eingebaut, oder? Muss ich mal ausprobieren ... Edited March 10, 2011 by Nelly1966 Quote Link to comment Share on other sites More sharing options...
Nelly1966 Posted March 10, 2011 Author Report Share Posted March 10, 2011 Hallo Phillipp, wie wäre denn Dein Lösungsvorschlag? so in etwa? int OHT = OrdersHistoryTotal()-1; bool Buy = false; bool Sell = false; if(OHT == 0 || OrderType()==OP_SELL) Sell = true; if(OHT == 0 || OrderType()==OP_BUY) Buy = true; Dann wäre auch der tägliche "Neubeginn" gleich mit eingebaut, oder? Muss ich mal ausprobieren ... So funktioniert schon mal der beabsichtigte Wechsel zwischen Kauf & Verkauf, aber bei Tagesbeginn fängt er nicht neutral an, sondern nimmt die letzte Orderdes Vortages als Referenz. Hm ... hat hierzu jemand ne Idee? Muss da wahrscheinlich noch ne Zeitkomponente einbauen, oder? Quote Link to comment Share on other sites More sharing options...
Mythos Posted March 10, 2011 Report Share Posted March 10, 2011 Du durchläufst die Orderhistorie in der falschen Richtung. Die letzter Order deiner For-Schleife ist immer die erste "der Geschichte". Ist es garantiert das die "letzte" in der History auch die zuletzt geschlossene ist? AFAIR gibt MT da keinerlei Garantie wie die Orders geordnet sind. @Nelly deine späteren Vorschläge können aus meiner Sicht gar nicht funktionieren (zumindest der Codeteil) weil du gar keine Order auswählst. Um zu wissen welche Richtung die letzte geschlossene Order hatte müsstest du bei jeder Order die OrderCloseTime() überprüfen und die jüngste speichern. Aber gänge es nicht einfacher, wenn du dir mit einer static Variable merkst welche Order du als letztes eröffnet hast? Hängt jetzt natürlich von der Gesamtlogik des EAs ab. hth Quote Link to comment Share on other sites More sharing options...
Vola Posted March 10, 2011 Report Share Posted March 10, 2011 AFAIR gibt MT da keinerlei Garantie wie die Orders geordnet sind.Wenn ich das programmieren auch nicht kapiere, aber zumindest wird mein Abkürzungs Repertoiredank Tom-Next immer größer AFAIR Quote Link to comment Share on other sites More sharing options...
WOGO Posted March 10, 2011 Report Share Posted March 10, 2011 Da der EA auch nicht immer arbeitet, soll zu Tagesbeginn die Richtung egal sein, also nicht die entgegengesetzte Richtung zum letzten Trade des vorherigen Tages. Hierzu ist mir noch gar nichts eingefallen. Hier könnte ich einen Tipp gut gebrauchen.Ich weiß jetzt auch nicht, ob du als ersten Eintrag in der Orderhistory immer die letzte Order bekommst, aber du könntest sowas in der Art vesuchen. Habs jetzt nicht ausprobiert, aber nur mal als Ansatz. bool last_order_buy = false, bool last_order_sell = false; datetime latestorder=0; bool alloworder=false; int OHT=OrdersHistoryTotal()-1; for(int i=0; i<=OHT; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Zugriff auf historische Daten nicht möglich (",GetLastError(),")"); break; } latestorder=MathMax(OrderCloseTime(),latestorder); if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderType()==OP_BUY) { Print("Letzte Order war ein Kauf"); last_order_buy = true; } if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderType()==OP_SELL) { Print("Letzte Order war ein Verkauf"); last_order_sell = true; } } if(TimeDayOfYear(latestorder)!=DayOfYear()) alloworder=true; Über alloworder siehst du dann, ob heute schon eine Order war und kannst abhängig davon entscheiden, ob du eine neue Position erlaubst. EDIT: ähm, natürlich muss man in die richtige Richtung zählen ... Quote Link to comment Share on other sites More sharing options...
Mythos Posted March 10, 2011 Report Share Posted March 10, 2011 @WOGO: Hmmm also das funktioniert sicher nicht (von den Syntaxerrors mal abgesehen). Wenn WOGO Codeschnippsel gibt, geb ich auch ;) bool last_order_buy = false, bool last_order_sell = false; datetime latestorder=0; bool alloworder=false; int OHT=OrdersHistoryTotal()-1; for(int i=0; i<=OHT; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Zugriff auf historische Daten nicht möglich (",GetLastError(),")"); break; } if (OrderType()==OP_BUY && OrderCloseTime() > latestorder) { last_order_buy = true; last_order_sell = false; } if (OrderType()==OP_SELL && OrderCloseTime() > latestorder) { last_order_buy = false; last_order_sell = true; } latestorder=MathMax(OrderCloseTime(),latestorder); } if(TimeDayOfYear(latestorder)!=DayOfYear()) alloworder=true; Das sollte passen. Bei Bedarf nicht vergessen noch Abfragen obs überhaupt "deine" Order war dazupacken. Quote Link to comment Share on other sites More sharing options...
RAiNWORM Posted March 10, 2011 Report Share Posted March 10, 2011 Ist es garantiert das die "letzte" in der History auch die zuletzt geschlossene ist? AFAIR gibt MT da keinerlei Garantie wie die Orders geordnet sind.IMHO entspricht die Reihenfolge und auch die Selektion der angezeigten Tabelle in der MT4-Oberfläche. Ist also fast willkürlich. Quote Link to comment Share on other sites More sharing options...
Nelly1966 Posted March 10, 2011 Author Report Share Posted March 10, 2011 Vielen Dank Euch allen!!! Ihr habt mir sehr geholfen, waren viele gute - für mich völlig neue - Ideen dabei!!! Möge der Trend immer mit Euch sein ... http://smilies-world.de/smilies_pictures/2977.gif Nelly http://www.clicksmilies.com/s1106/travesmilies/smilie_bayer1.gif 1 Quote Link to comment Share on other sites More sharing options...
ajkonly Posted March 10, 2011 Report Share Posted March 10, 2011 Wenn ich das programmieren auch nicht kapiere, aber zumindest wird mein Abkürzungs Repertoiredank Tom-Next immer größer Wie recht du hast, ich lese hier immer gerne mit, aber ich verstehe nur Bahnhof! Aber ein Glück können das andere! Ich möchte mein Gehirn, auch nur noch ungern damit foltern!!! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.