|
Expert-Advisors Expert-Advisors für Metatrader 4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ich darf das kurz korrigieren
Der EA schaut NICHT in die Zukunft. Auf dem Daily Chart wartet er bis 0:00 und öffnet ausschließlich dann Trades, wenn der OPEN und/oder (weiss ich grad nichtmehr) der CLOSE Preis der aktuellen Kerze innerhalb des HIGH/LOW der vorigen Kerze ist. Daher macht er auch gerne mehrere auf, aber nur dann, wenn noch Möglichkeit besteht Gewinne (oder Verluste ^^) zu machen. Warum sollte er auch Orders öffnen, wenn wir ein Gap im Kurs haben? |
|
|||
Ich werde den Code hier heute Abend noch mal posten und dann darf sich jeder erfreuen...oder vll postet ihn mal sirius
eigentlich ist ja auch egal wer...
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Zukunft??
Hallo und guten Tag Free99,
in dem mir vorliegenden Code schaut das Programm in die Zukunft, da es im Backtest Werte des aktuellen Zeitabschnittes verwendet, welche bei Bar-Wechsel um 0:00 im live-Betrieb noch gar nicht bekannt sein können. Im live-Betrieb ist bei Bar-Wechsel OPEN = HIGH = LOW = CLOSE und von da an wird jeh nach Kursbewegung HIGH und LOW an ihren Grenzwerten gespeichert und CLOSE ist innerhalb der gewählten TIME-Frame immer der aktuelle Kurs. d.h. Erst mit dem letzten TICK einer TIME-FRAME stehen HIGH; LOW und OPEN als gültige Werte zur Verfügung. Im Backtest sind hingegen alle 4 Werte zu Beginn einer Timeframe durch (0) für Berechnungen verfügbar ... was aber nicht der live-Situation entspricht. Der Unterschied, wann welche Daten zu welchem Zeitpunkt beim Backtest und LIVE(Demo) verwertbar sind, wird deshalb leicht übersehen.(so meine Erfahrung) an Mast93 ... stell bitte die mq4-File rein, damit alle die gleiche Grundlage an Information haben danke Grüße SIRIUS |
|
|||
Code:
double L=iLow(NULL,NULL,1); double H=iHigh(NULL,NULL,1); double C=iClose(NULL,NULL,0); double O=iOpen(NULL,NULL,0); und hier wird HIGH und LOW der LETZTEN Kerze bezogen... ich wüsste also nicht warum hier "orakelt" wird... Code:
if (H - C >= stopLevel && C - L >= stopLevel && O < H) High der letzten Kerze - Close Aktuelle (wie du richtig sagtest, der aktuelle Preis) sollte größer oder gleich dem stoplevel sein, welcher in diesem Fall aus MarketInfo(xx,MODE_STOPLEVEL) besteht und es muss Close aktuelle - Low letzte Kerze ... s.o. ... das sagt mir, dass der Kurs nicht zu nah an den geplanten Öffnungspositionen sein darf... O < H heisst hier für mich, weil es sich um den BUY Teil des EAs handelt, dass der OPEN Kurs aktuelle Kerze kleiner sein muss als das HIGH letzte Kerze beim Sell siehts genauso aus nur dass es sich hier um O > L handelt... der Kurs muss also zwischen H und L der LETZTEN KERZE sein... da wie oben schon gesagt der Code aus deinem kopiert ist, wird es bei dir genauso sein... nix mit Kaffeesatzleserei |
|
|||
Für all jene die ihn noch mal haben wollen...
Code:
extern double Lot = 0.01; extern bool MM = TRUE; extern double Risk = 0.5; //% extern int StopLoss = 5; extern int TakeProfit = 15; extern bool UseTrailing = false; extern int TrailingStopLoss = 5; extern int TrailingStep = 2.5; extern int MagicNumber = 8888; bool initialized = false; int MAX_TRAILING_STEP = 15; int init() { if (Digits == 5 || Digits == 3) { StopLoss = StopLoss * 10; TakeProfit = TakeProfit * 10; TrailingStopLoss = TrailingStopLoss * 10; TrailingStep = TrailingStep * 10; } double stopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); if (StopLoss < stopLevel) { Alert("StopLoss", stopLevel); return(-1); } if (TakeProfit < stopLevel && !UseTrailing) { Alert("TakeProfit", stopLevel); return(-1); } double minLot = MarketInfo(Symbol(), MODE_MINLOT); if (Lot < minLot) { Alert("minLot", minLot); return(-1); } double maxLot = MarketInfo(Symbol(), MODE_MAXLOT); if (Lot > maxLot) { Alert("maxLot", maxLot); return(-1); } double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP); for (double i = minLot; i <= maxLot; i+=lotStep) { if (i == Lot) { break; } if (i + lotStep > maxLot) { Alert("LotStep", lotStep); return(-1); } } if (UseTrailing) { if (TrailingStopLoss < stopLevel) { Alert("TrailingStopLoss", stopLevel); return(-1); } if (TrailingStep < MAX_TRAILING_STEP) { Alert("TrailingStep", MAX_TRAILING_STEP); return(-1); } } initialized = true; return(0); } int deinit() { initialized = false; return(0); } int start() { if (!initialized) { return(0); } if (DayOfWeek() == 0 || DayOfWeek() == 6) { return(0); } if (!IsTradeAllowed()) { return(0); } int ticket; int q = 0; double L = iLow(NULL, NULL, 1); double H = iHigh(NULL, NULL, 1); double C = iClose(NULL, NULL, 0); double O = iOpen(NULL, NULL, 0); double spred = MarketInfo(Symbol(), MODE_SPREAD) * Point; double sl = StopLoss * Point; double tp = TakeProfit * Point; if (UseTrailing) { TrailingPositions(TrailingStopLoss, TrailingStep, MagicNumber); } // if (O >= H || O <= L) { Comment("\\OP_BUYSTOP & OP_SELLSTOP\\"); return (0); } if (MM) Lot = AutoLot(Risk); for (q = 0; q < OrdersTotal(); q++) { if (OrderSelect(q, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUYSTOP) { return(0); } else if (OrderType() == OP_SELLSTOP) { return(0); } } } double stopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point; //ORDER BUY if (H - C >= stopLevel && C - L >= stopLevel && O < H) { double tpReal = 0; if (!UseTrailing) { tpReal = H + tp + spred * 2; } ticket = OrderSend(Symbol(), OP_BUYSTOP, Lot, H + spred * 2, 0, H - sl + spred * 2, tpReal, NULL, MagicNumber, iTime(Symbol(), Period(), 0) + Period() * 60); ChechAndPrintError(ticket); } else { Comment("\Sleeping.... Will wake up again at 0:00"); } //ORDER SELL if (H - C >= stopLevel && C - L >= stopLevel && O > L) { tpReal = 0; if (!UseTrailing) { tpReal = L - spred - tp; } ticket = OrderSend(Symbol(), OP_SELLSTOP, Lot, L - spred, 0, L - spred + sl, tpReal, NULL, MagicNumber, iTime(Symbol(), Period(), 0) + Period() * 60); ChechAndPrintError(ticket); } else { Comment("\Sleeping.... Will wake up again at 0:00"); } } void TrailingPositions(int trailingStopLoss, int trailingStep, int magicNumber) { double bid = 0; double ask = 0; for (int i = 0; i < OrdersTotal(); i++) { if (!(OrderSelect(i, SELECT_BY_POS)) || OrderSymbol() != Symbol() || OrderMagicNumber() != magicNumber) { continue; } bid = MarketInfo(OrderSymbol(), MODE_BID); ask = MarketInfo(OrderSymbol(), MODE_ASK); if (OrderType() == OP_BUY) { if (bid - OrderOpenPrice() > trailingStopLoss * Point) { if (OrderStopLoss() < bid - (trailingStopLoss + trailingStopLoss - 1) * Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), bid - trailingStopLoss * Point, OrderTakeProfit(), OrderExpiration()); } } } else if (OrderType() == OP_SELL) { if (OrderOpenPrice() - ask > trailingStopLoss * Point) { if (OrderStopLoss() > ask + (trailingStopLoss + trailingStep - 1) * Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), ask + trailingStopLoss * Point, OrderTakeProfit(), OrderExpiration()); } } } } } void ChechAndPrintError(int result) { if (result < 0) { int err = GetLastError(); Print("Expert+10 >> error(", err, ")"); } } double AutoLot(double ad_0) { double l_minlot = MarketInfo(Symbol(), MODE_MINLOT); double l_maxlot = MarketInfo(Symbol(), MODE_MAXLOT); double l_lotstep = MarketInfo(Symbol(), MODE_LOTSTEP); double LotSize = AccountBalance()/ MarketInfo(Symbol(), MODE_MARGINREQUIRED) * ad_0; LotSize = MathMin(l_maxlot, MathMax(l_minlot, LotSize)); if (l_minlot >= 0.01) LotSize = NormalizeDouble(LotSize, 2); else { if (l_minlot >= 1.0) LotSize = NormalizeDouble(LotSize, 1); else LotSize = NormalizeDouble(LotSize, 0); } if (LotSize < l_minlot) LotSize = l_minlot; if (LotSize > l_maxlot) LotSize = l_maxlot; return (LotSize); }
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
Lieber Sirius, ich würde mich freuen wenn Du Deine Änderungen hier posten würdest.
Vielen Dank Marc
__________________
Heute Weizen, Abends Corn morgen fangen wir an von vorn... |
|
|||
??
Hallo Free99,
jetzt ist ein Mißverständnis entstanden ... meine Beispiele bezogen sich auf die aus dem Internet gefunde Version, welche ich etwas genauer angesehen habe, um nicht auf das Kaffeelesen reinzufallen. Da ich die Grundidee interessant fand, habe ich natürlich daran weiter gearbeit ... um eigene Vorstellungen darin einzubauen. Frage an alle, wie kann ich den Beitrag von Free99 komplett lesen, bei mir ist der Text rechts abgeschnitten und ich kann den fehlenden Text nur erahnen? Grüße SIRIUS |
|
|||
Zitat:
Warum macht der 15vs5 sowas? Jetzt steht oben links in der Ecke das er schläft bis 00:00 Uhr! Auch komisch sowas! ^^ freundliche Grüße egoluxe |
|
|||
Zitat:
ich hab den 15vs5 in den D1 Chart gezogen! Ich schaue mir aber den Kursverlauf auf unterschiedlichen Timeframes an. Also quasi mal auf H1 oder M15 etc. Hat das irgentwelche Auswirkungen? Danke für Antworten! ;-) freundliche Grüße egoluxe |
Lesezeichen |
Stichworte |
ea, expert-advisor, metatrader, mt4 |
|
|