Falls mein Beitrag doppelt erscheint, sorry- hatte eben geantwortet und sehe die Antwort hier nicht.
Du hast eine Funktion start() definiert aber nicht im OnTick aufgerufen.
Mit F2 brauchst Du vor dem Test natürlich Historiendaten, welche Du herunterladen musst.
Das Strategiefenster müsstest Du größer ziehen, die Zeitdaten (Test-Zeitraum und TF) müssen auf jeden Fall da sein.
//SNIP::::::::::::::::::: //--- input parameters //globale externe Variablen extern int MA_lang =200; extern int MA_kurz =50; extern double SL_prozent =0.666, HandelsLots =0.01, TP_prozent=1.5; extern int MagicNummer = 12345; //globale Variablen datetime PeriodenStartzeit; bool NeuePeriodeBegonnen,LongSignal,ShortSignal,OrderAngepasst; int LongOrder,ShortOrder; double StopLoss, TakeProfit; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- PeriodenStartzeit = Time[0]; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //Überprüfen ob neuer Periodenbeginn vorliegt if (PeriodenStartzeit !=Time[0]) {NeuePeriodeBegonnen =true; PeriodenStartzeit =Time[0]; } else NeuePeriodeBegonnen =false; //Marktdaten überprüfen double MAlang =iMA (NULL,0,MA_lang,0, MODE_SMA, PRICE_CLOSE,1); double MAlangVorperiode =iMA(NULL,0,MA_lang,0, MODE_SMA, PRICE_CLOSE,2); double MAkurz =iMA(NULL ,0,MA_kurz,0, MODE_SMA, PRICE_CLOSE,1); double MAkurzVorperiode =iMA (NULL ,0,MA_kurz,0, MODE_SMA, PRICE_CLOSE,2); //handelssignale ermitteln if(NeuePeriodeBegonnen == true) { //Buy Signal if (MAkurz>MAlang && MAkurzVorperiode<=MAlangVorperiode) {LongSignal =true;} else LongSignal =false; } //Sell Signal if (MAkurz<MAlang && MAkurzVorperiode>=MAlangVorperiode) {ShortSignal = true;} else {ShortSignal = false;LongSignal =false;} //Long Signale umsetzen if (LongSignal == true) //Evtl. Short Order schließen if (ShortOrder>0) { if (OrderSelect(ShortOrder, SELECT_BY_TICKET)==true) { bool ShortOrderGeclosed = OrderClose (ShortOrder,OrderLots(),Ask,10,Blue); if (ShortOrderGeclosed ==true) ShortOrder =0; } } {while (LongOrder<=0) { LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,10,0,0,"einfach Long",MagicNummer,0,Green); } } //Short Signale umsetzen if (ShortSignal == true) //Evtl. Long Order schließen if (LongOrder>0) { if(OrderSelect(LongOrder, SELECT_BY_TICKET)==true) { bool LongOrderGeclosed = OrderClose(LongOrder,OrderLots(),Bid,10,Blue); if (LongOrderGeclosed ==true) LongOrder =0; } } //Short Order eröffnen {while (ShortOrder<=0) { ShortOrder = OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,10,0,0,"einfach Short",MagicNummer,0,Red); } } //SL Long Deals setzen if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true) { if (OrderCloseTime()==0 && OrderStopLoss()==0) { StopLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_prozent/100)),Digits); OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow); } } //SL Short Deals setzen if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true) { if (OrderCloseTime()==0 && OrderStopLoss()==0) { StopLoss=NormalizeDouble(OrderOpenPrice()*(1+(SL_prozent/100)),Digits); OrderAngepasst=OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Yellow); } } //TP Long Deals setzen if (OrderSelect(LongOrder,SELECT_BY_TICKET) == true) { if (OrderCloseTime()==0 && OrderTakeProfit()==0) { TakeProfit=NormalizeDouble(OrderOpenPrice()*(1+(TP_prozent/100)),Digits); OrderAngepasst=OrderModify(OrderTicket(), OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange); } } //TP Short Deals setzen if (OrderSelect(ShortOrder,SELECT_BY_TICKET) == true) { if (OrderCloseTime()==0 && OrderTakeProfit()==0) { TakeProfit=NormalizeDouble(OrderOpenPrice()/(1+(TP_prozent/100)),Digits); OrderAngepasst=OrderModify(OrderTicket(), OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange); } } //Ticketnummern nach Closing auf 0 zurücksetzen if (OrderSelect(LongOrder,SELECT_BY_TICKET) ==true) { if (OrderTicket()>0 && OrderCloseTime()>0)LongOrder=0; } if (OrderSelect(ShortOrder,SELECT_BY_TICKET) ==true) { if (OrderTicket()>0 && OrderCloseTime()>0)ShortOrder=0; } //return (); // } //SNAP:::::::::::::::::
Ich vermute mal Du arbeitest mit einem MT5, die aktuelle Version des MT5 ist aber build 1881 (nicht 1601).
- Wenn Du bei einem Broker (bei MT5 kann es auch Metaquotes sein) eingeloggt wärst, würde sich das Terminal selbst updaten (inkl. allem anderen).
- Allerdings ohne Brokerverbindung gibt es keine historischen Daten inkl. allem Anderem wie Kontraktspezifikationen (kommen eben von dem) und damit keine Backtests.
- Wenn was nicht läuft wie erwartet, schau erst einmal nach was die Logs erzählen: (im Terminal die Tabs "Experten" und "Journal" und der des Strategietesters ("Journal").
Ich vermute mal Du arbeitest mit einem MT5, die aktuelle Version des MT5 ist aber build 1881 (nicht 1601).
- Wenn Du bei einem Broker (bei MT5 kann es auch Metaquotes sein) eingeloggt wärst, würde sich das Terminal selbst updaten (inkl. allem anderen).
- Allerdings ohne Brokerverbindung gibt es keine historischen Daten inkl. allem Anderem wie Kontraktspezifikationen (kommen eben von dem) und damit keine Backtests.
- Wenn was nicht läuft wie erwartet, schau erst einmal nach was die Logs erzählen: (im Terminal die Tabs "Experten" und "Journal" und der des Strategietesters ("Journal").
Hi Carl,
er verweist auf MT4 Anleitungen (Video-Playlist). Code ist mql4.
Ich habe es compiliert und getestet - auf Version 4.00, Build 1090.
Und jetzt kommen wir dem Problem auf die Schliche:
Wahrscheinlich versucht er gerade, eine mql4 Anleitung mit mql4 Code auf MT5 zum Laufen zu bekommen...
Nun ja...
Irgendwie scheint der Code fehlerhaft zu sein...
1.Woran liegt es, dass sich beim ersten Pfeil eine Order öffnet (obwohl doch gar kein Crossing entsteht)? und
2. Was kann man gegen die unzähligen Orders tun die sich beim Zweiten Pfeil öffnen und nach wenigen ticks wieder schließen (das Crossing wird wohl zulange als Crossing gezählt bzw. die Linien liegen zulange aufeinander)?
Die Stop Losses & Take Profits scheinen gar nicht erst zu funktionieren, wie man sieht die order läuft tagelang weiter bis zum nächsten Crossing...
Irgendwie scheint der Code fehlerhaft zu sein...
1.Woran liegt es, dass sich beim ersten Pfeil eine Order öffnet (obwohl doch gar kein Crossing entsteht)? und
2. Was kann man gegen die unzähligen Orders tun die sich beim Zweiten Pfeil öffnen und nach wenigen ticks wieder schließen (das Crossing wird wohl zulange als Crossing gezählt bzw. die Linien liegen zulange aufeinander)?
Die Stop Losses & Take Profits scheinen gar nicht erst zu funktionieren, wie man sieht die order läuft tagelang weiter bis zum nächsten Crossing...
Zu 1, die indicator repainten auch im backtest, da kann eine kreuzung gewesen sein
zz 2, dazu misst den code durchsuchen, generell weil er vermutlich schaut ob aktuell eine kreuzung ist, das ändert sich mitunter vei jedem tick
Hmm,
ist doch alles gut ;-)
Dieser Code ist so etwas sinnfrei, weil es keine äussere Bedingung gibt öffnet er immer mindestens einen Longtrade.
Die äusseren Klammern haben keine Bedeutung.
Wenn Du keine Margin mehr hast würde diese While-Schleife permanent versuchen einen Trade zu öffnen; Der Broker wird sich freuen wenn das Logbuch unnötig aufgeblasen wird ;-)
So geht das nicht vernünftig.
OnTick() wird dauernd durchlaufen, bei jedem Wert der reinkommt und Start() nur einmal bei der Initialisierung. Wurde ja auch gut korrigiert.
Witzigerweise kann man so einen EA, selbst wenn er funktionieren würde nur zum Spielen verwenden, da er mit Echtgeld mit dieser Strategie früher oder später das Konto plättet. Vermute es ist nur ein Versuch?!
Das Programm macht nur das was der Progger angestellt hat ;-)
Gruß Joe
{while (LongOrder<=0) { LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,10,0,0,"einfach Long",MagicNummer,0,Green); } }

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo, liebe Community,
Um mich in EA's einzuarbeiten habe ich den EA aus der Playlist im Anhang nachgebaut bzw. versucht nachzubauen. Oben musste ich jedoch die folgenden globalen Variablen definieren, um fehlerfrei durch das Kompilieren zu gelangen (was der Videoersteller nicht tun musste).
Mein Problem im Strategietester ist nun:
1) Zum einen sehe ich keine zeitraum-Einstekllungen (für den Backtest) in meinem Strategietester (was wahrscheinlich an der version liegen wird (Version 5.00 build 1601))
2) Zum anderen, & das ist das eigentliche Problem, zeigt der EA im Strategietester keine Tradesignal oder irgendwas brauchbares ausser den normalen chart an (Ich weiß, Moving Averages muss man natürlich selbst zufügen) Hoffe ich darf den code hier Posten: