|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
High/Low NACH OrderOpenTime
Hallo,
kann mir jemand sagen, wie ich das High/Low NACH der Ordereröffnung ermitteln kann? Das High/Low der laufenden Kerze kann genauso gut vor der Ordereröffnung gewesen sein, deswegen hilft mir das Beispiel aus der Hilfe nicht weiter. Zitat:
Tmeframe M1 BarOpenTime: 10:27:00 OrderOpenTime: 10:27:32 High: 1,08500 vor oder nach OrderOpenTime? Low: 1,08400 vor oder nach OrderOpenTime? Es reicht also nicht, den Index der Kerze zu erhalten, in dem die Order eröffnet wurde. Im Moment bin ich planlos. Meine spontane Idee wäre, die Uhrzeit des High/Low der laufenden Kerze festzustellen und diese mit der OrderOpenTime zu vergleichen. Nur, keine Ahnung, wie. Es wäre super, wenn hier jemand eine Idee oder Lösung parat hätte. Vielen Danke schon mal! Gruß Werner |
|
|||
Zaghafter Lösungsansatz
Falls mal jemand über diesen Beitrag stolpert, ich teste gerade dieses Vorgehen: Es geht um eine Multicurrency-EA mit Ordermanagement (Hidden-SL, -Trailing, -BE, -Teilverkauf, -TP). Da sich die Variablen für die Preislinien sich ständig ändern (je nach selektierter Order) orientiere ich mich an iHighest, iLowest und OrderOpenPrice() der jeweiligen Order.
Die Ordermanagement-Funktion rufe ich auf und übergebe die Ticketnumber. Code:
//Anzahl der M1-Bars seit Ordereröffnung BarsAfterOpen=iBarShift(symbol,PERIOD_M1,OrderOpenTime(),false); if(BarsAfterOpen == 0) { // wenn innerhalb der selben Kerze der Ordereröffnung if(ask >= OrderOpenPrice()) { // wenn momentaner Preis >= Eröffnungspreis ... PeriodHighest = ask; // momentaner Preis ist der höchste PeriodLowest = OrderOpenPrice(); // tiefster Preis ist Eröffnungspreis } if(bid <= OrderOpenPrice()){ // siehe oben al reves PeriodHighest = OrderOpenPrice(); PeriodLowest = bid; } else { // wenn seit der Eröffnung mehr als 0 Kerzen vergangen sind PeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0)); PeriodLowest = iLow(symbol,PERIOD_M1,iLowest(symbol,PERIOD_M1,MODE_LOW,BarsAfterOpen,0)); } Code:
if(PeriodHighest > OrderOpenPrice()+trailingstart*point) { buystoplossprice= PeriodHighest - trailingdistance * point; } if(PeriodHighest > OrderOpenPrice() + breakevenpoints * point) { if(buystoplossprice < OrderOpenPrice()) buystoplossprice = OrderOpenPrice() + breakevengain * point; } etc., etc., etc. Code:
//---- schließt Order wenn unter/über SL/TP-Linie -------- if((bid <= buystoplossprice) || (ask >= buytakeprofitprice)) { bool ret=OrderClose(ticketnumber,OrderLots(),OrderClosePrice(),Slippage,Red); } Falls es so nicht klappen sollte, kann es immer noch als Inspiration dienen:-) Schönen Gruß Werner |
|
|||
Hi,
eine „quick and dirty“ Lösung. Schreibe das aktuelle High/Low parallel zum OrderSend in zwei Variablen. Danach brauchst Du nur zu prüfen, sind die danach auftretenden High/Low größer bzw. kleiner als die zuvor erfassten „OrderSend High/Low Variablen“. Grüße |
|
|||
Zitat:
Jetzt bin ich endlich fertig und der Code scheint auch sauber zu arbeiten. Es mussten doch noch einige Änderungen vorgenommen werden, an die ich anfangs nicht dachte und die mich fast zur Verzweiflung getrieben hätten. Vielleicht hilfts jemandem... Anzahl Kerzen nach Ordereröffnung: Code:
int BarsAfterOpen=iBarShift(symbol,PERIOD_M1,OrderOpenTime(),false); // Wenn BarsAfterOpen == 0 (also während der selben Minute der Eröffnung), liefert High/Low der Kerze einen unsinnigen Wert., Deswegen ... if(BarsAfterOpen < 1) BarsAfterOpen=1; //...BarsAfterOpen mindestens 1, bevor High/Low ermittelt wird double BuyPeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0)); Code:
double BuyInitPeriodHighest = NormalizeDouble(OrderOpenPrice() + (trailingstart*point), digits); double BuyPeriodHighest = iHigh(symbol,PERIOD_M1,iHighest(symbol,PERIOD_M1,MODE_HIGH,BarsAfterOpen,0)); if(BuyInitPeriodHighest >= BuyPeriodHighest) BuyPeriodHighest = BuyInitPeriodHighest; // wenn Candlehigh < trailingstart Schönen Gruß Werner |
Lesezeichen |
|
|