Zitat:
Zitat von RetepM
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
|
Guter Hinweis, danke!
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));
Hoch/Tief der Trailingstop-Linie muss
mindestens bei OrderOpenPrice() +- trailingstart liegen.
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
Wie gesagt, vom Code meines Originalposts ist nicht mehr viel übrig geblieben. Dafür ist meine Erkenntnis gewachsen.
Schönen Gruß
Werner