Moin,
ich bin neu beim Programmieren in MQL5 und wollte mal fragen wie ich folgenden Code wohl so ändern kann, dass das Programm innerhalb der while Schleife
nicht unendlich oft bei Ereignis einen Alert aussendet, sondern nur ein Mal und dann auf die nächste Kerze des Charts auf dem ausgewählten Timeframe wartet.
Ich weiß nicht ganz wie ich das Problem lösen kann, ich hab auch schon im Forum gesucht. Die Schleife ist von Zeile 67 bis 138.
PS. Ach und wo ich schonmal dabei bin. Meint ihr das die Abfrage nach dem Simple Moving Average so funktionieren würde, oder gibt es da irgendwelche offensichtlichen Fehler?
Gruß, Sven.
https://www.mql5.com/de/code/768
Gruß
- www.mql5.com
Vielen Dank für die schnelle Antwort. Ich denke mal das die While schleife sowieso redundant ist, da sich das ganze ja in der onCalculate Funktion befindet, nicht?
Habe ich das richtig verstanden das ich Diese Abfrage einfach als Ersatz zu der while Schleife verwenden kann? Hier der angepasste Code:
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //Kontrolliert ob der Indikator vorhanden. if(iCustom) return(rates_total); static CIsNewBar NB1,NB2; if(NB1.IsNewBar(NULL, PERIOD_CURRENT)) { int value_iMA = iMA(NULL, 0, MA_Periods, 0, MODE_SMA, PRICE_CLOSE); if(value_iMA == INVALID_HANDLE) { PrintFormat("Fehler beim erstellen des MA-Wertes des Symbols %s/%s, error code %d", Symbol(), EnumToString(Period()), GetLastError()); } double Vortageshoch = iHigh(NULL, PERIOD_D1, 0); double Vortagestief = iLow(NULL, PERIOD_D1, 0); bool CandleIsBullish = (close[1] > open[1]); bool PrevCandleIsBearish = (close[2] < open[2]); bool LowIsLower = (low[1] < low[2]); bool CloseIsHigher = (close[1] > close[2]); bool HighIsHigher = (high[1] > high[2]); bool CloseIsLower = (close[1] < close[2]); if(!MA_benutzen && !DHDL_benutzen) { if(CandleIsBullish && PrevCandleIsBearish && LowIsLower && CloseIsHigher) Alert("Up Umkehrstab in ", Symbol(), " auf ", CandlePeriod); if(!CandleIsBullish && !PrevCandleIsBearish && HighIsHigher && CloseIsLower) Alert("Down Umkehrstab in ", Symbol(), " auf ", CandlePeriod); } if(MA_benutzen && !DHDL_benutzen) { bool LowAboveMA = (close[1] > value_iMA); bool HighBelowMA = (high[1] < value_iMA); if(CandleIsBullish && PrevCandleIsBearish && LowIsLower && CloseIsHigher && LowAboveMA) Alert("Up Umkehrstab in ", Symbol(), " auf M", CandlePeriod, "über ", MA_Periods, "MA."); if(!CandleIsBullish && !PrevCandleIsBearish && HighIsHigher && CloseIsLower && HighBelowMA) Alert("Down Umkehrstab in ", Symbol(), " auf M", CandlePeriod, "unter ", MA_Periods, "MA."); } if(!MA_benutzen && DHDL_benutzen) { bool CloseAboveDH = (close[1] > Vortageshoch); bool CloseBelowDL = (close[1] < Vortagestief); if(CandleIsBullish && PrevCandleIsBearish && LowIsLower && CloseIsHigher && CloseAboveDH) Alert("Up Umkehrstab in ", Symbol(), " auf M", CandlePeriod, " über Tageshoch."); if(!CandleIsBullish && !PrevCandleIsBearish && HighIsHigher && CloseIsLower && CloseBelowDL) Alert("Down Umkehrstab in ", Symbol(), " auf M", CandlePeriod, " unter Tagestief."); } if(MA_benutzen && DHDL_benutzen) { bool CloseAboveDH = (close[1] > Vortageshoch); bool CloseBelowDL = (close[1] < Vortagestief); bool LowAboveMA = (close[1] > value_iMA); bool HighBelowMA = (high[1] < value_iMA); if(CandleIsBullish && PrevCandleIsBearish && LowIsLower && CloseIsHigher && LowAboveMA && CloseAboveDH) Alert("Up Umkehrstab in ", Symbol(), " auf M", CandlePeriod, " über ", MA_Periods, "MA und Tageshoch."); if(!CandleIsBullish && !PrevCandleIsBearish && HighIsHigher && CloseIsLower && HighBelowMA && CloseBelowDL) Alert("Down Umkehrstab in ", Symbol(), " auf M", CandlePeriod, " unter ", MA_Periods, "MA und Tagestief."); } } return(rates_total); }
Vielen Dank für die schnelle Antwort. Ich denke mal das die While schleife sowieso redundant ist, da sich das ganze ja in der onCalculate Funktion befindet, nicht?
Habe ich das richtig verstanden das ich Diese Abfrage einfach als Ersatz zu der while Schleife verwenden kann? Hier der angepasste Code:
Soll das ein EA werden oder ein Indikator?
Ließ hier mal, was es so an Ereignissen gibt.
- www.mql5.com
Soll das ein EA werden oder ein Indikator?
Ließ hier mal, was es so an Ereignissen gibt.
Da habe ich mir auch schon Gedanken zu gemacht, bin aber leider zu keinem klaren Ergebnis gekommen. Anfangs wollte ich einen EA machen, aber eigentlich soll das Programm nur bei Umkehrstäben einen Alert machen.
Von daher dachte ich ist ein Indikator bestimmt besser da ich so noch einen anderen EA den ich sonst immer nutze auf dem Chart lassen kann und keinen zweiten Chart brauche.
Da habe ich mir auch schon Gedanken zu gemacht, bin aber leider zu keinem klaren Ergebnis gekommen. Anfangs wollte ich einen EA machen, aber eigentlich soll das Programm nur bei Umkehrstäben einen Alert machen.
Von daher dachte ich ist ein Indikator bestimmt besser da ich so noch einen anderen EA den ich sonst immer nutze auf dem Chart lassen kann und keinen zweiten Chart brauche.
Wenn es ein Indikator wird, brauchst du kein IsNewBar. Der wird ohnehin nur einmal bei einer neuen Kerze durchlaufen "OnCalculate)
While ist da ganz verkehrt.
Wenn es ein Indikator wird, brauchst du kein IsNewBar. Der wird ohnehin nur einmal bei einer neuen Kerze durchlaufen "OnCalculate)
While ist da ganz verkehrt.
Ich war gerade am schreiben und am schreiben was hier bei meinem Code alles nicht funktioniert bis ich direkt am anfang der OnCalculate Funktion ein return befehl entdeckt habe... Dann kann es ja auch nicht funktionieren. Naja, Anfängerfehler.
Aber jetzt aktualisiert er bei jedem tick wie ich bereits erwartet hatte und nicht bei jedem neuen Bar. Also bin ich quasi wieder beim ursprünglichem Problem.
//Kontrolliert ob der Indikator vorhanden. if(iCustom) return(rates_total);
Du hast keine Ahnung, wie man in MQL5 programmiert - richtig?
Stell mal,den Cursor auf iCustom und drück auf F1, da kannst Du dann sehen, wofür das gedacht ist, was es liefert ...
Außerdem ist hier eine Liste alle Funktionen mit kurzer Erklärung, sodass man mit Ctrl+F suchen kann: https://www.mql5.com/de/docs/function_indices
Lies vielleicht einmal "Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators": https://www.mql5.com/de/articles/35
Dazu vielleicht:
https://www.metatrader5.com/de/metaeditor/help/development/debug
https://www.mql5.com/de/articles/654
Die Fehlerverarbeitung und Protokollierung in MQL5: https://www.mql5.com/de/articles/2041
https://www.mql5.com/de/articles/272
Fehler finden und Protokollierung https://www.mql5.com/de/articles/150
Can i get any Free Tutorial for Forex Trading? https://www.mql5.com/en/forum/381853#comment_25845157
Außerdem, es gibt fast nichts(!), was nicht schon für MT4/5 programmiert wurde und in der CodeBase oder als Artikel vorliegt, d.h. ERST suchen dann es selbst versuchen. Spart viel Zeit!
Bei der Suche ist manchmal Google mit "site:mql5.com " besser als die Suche hier. Z.B. "NewBar newBar site:mql5.com" in der Suchzeile
- www.mql5.com
Du hast keine Ahnung, wie man in MQL5 programmiert - richtig?
Stell mal,den Cursor auf iCustom und drück auf F1, da kannst Du dann sehen, wofür das gedacht ist, was es liefert ...
Außerdem ist hier eine Liste alle Funktionen mit kurzer Erklärung, sodass man mit Ctrl+F suchen kann: https://www.mql5.com/de/docs/function_indices
Lies vielleicht einmal "Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators": https://www.mql5.com/de/articles/35
Dazu vielleicht:
https://www.metatrader5.com/de/metaeditor/help/development/debug
https://www.mql5.com/de/articles/654
Die Fehlerverarbeitung und Protokollierung in MQL5: https://www.mql5.com/de/articles/2041
https://www.mql5.com/de/articles/272
Fehler finden und Protokollierung https://www.mql5.com/de/articles/150
Can i get any Free Tutorial for Forex Trading? https://www.mql5.com/en/forum/381853#comment_25845157
Ja die zwei Zeilen hatte ich zum einen aus einem anderen Code abgeschrieben, und dann ja eben in meinem letzten Kommentar korrigiert. Mein Problem liegt wie gesagt jetzt immernoch daran das ich nur beim nächsten Bar Abfragen will und nicht dauerhaft.
if (!newBar) return;
Aber auch hier zeigen alle Indikatoren wie das richtigerweise gemacht wird.
if (!newBar) return;
Aber auch hier zeigen alle Indikatoren wie das richtigerweise gemacht wird.
Nach etlichem suchen habe ich jetzt eine Bibliothek gefunden die so eine Abfrage wie newBar kann: https://www.mql5.com/en/code/39899
Aber danke das du mich darauf gebracht hast, ich dachte das währe deutlich komplizierter.
Und danke auf für die Liste mit den Funktionen und dem Tipp mit F1, das wusste ich noch nicht.
Euch noch ein Schönes Wochenende und danke für die Hilfe.
- www.mql5.com
- 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.
Moin,
ich bin neu beim Programmieren in MQL5 und wollte mal fragen wie ich folgenden Code wohl so ändern kann, dass das Programm innerhalb der while Schleife
nicht unendlich oft bei Ereignis einen Alert aussendet, sondern nur ein Mal und dann auf die nächste Kerze des Charts auf dem ausgewählten Timeframe wartet.
Ich weiß nicht ganz wie ich das Problem lösen kann, ich hab auch schon im Forum gesucht. Die Schleife ist von Zeile 67 bis 138.
PS. Ach und wo ich schonmal dabei bin. Meint ihr das die Abfrage nach dem Simple Moving Average so funktionieren würde, oder gibt es da irgendwelche offensichtlichen Fehler?
Gruß, Sven.