Beachten Sie, dass diese Methode nicht zuverlässig ist, da MT die ualisierung der Anzahl der Balken stoppt, nachdem die maximale Balkeneinstellung erreicht wurde. Also, das einzige! Zuverlässige Methode ist die Zeit zu überprüfen.Zitat von ;
Beachten Sie, dass diese Methode nicht zuverlässig ist, da MT die ualisierung der Anzahl der Balken stoppt, nachdem die maximale Balkeneinstellung erreicht wurde. Also, das einzige! Zuverlässige Methode ist die Zeit zu überprüfen.Zitat von ;
Ja, einverstanden, definitiv nicht die Bars-Methode. Die zuverlässigste Methode, SeriesInfoInteger zu verwenden und für das LASTBAR_DATE aufzurufen, nach Fehlern zu suchen und bei Fehlern Fehler zu machen und erneut zu fragen, bis die Funktion abgelaufen ist oder ein sauberes Ergebnis angezeigt wird. Hier ist ein Beispiel für eine MTF isNewBar-Funktion ... Code # include lt; Arrays \ ArrayObj.mqhgt; Klasse NewBars: public CObject {ENUM_TIMEFRAMES m_timeframe; datetime m_last_bar_time; public: NewBars (ENUM_TIMEFRAMES tf): m_zeitframe (tf), m_last_bar_time (0) {} bool isNewBar () {uint ms = GetTickCount (); datetime curr; tue {ResetLastError (); curr = (DatumZeit) SeriesInfoInteger (_Symbol, m_timeframe, SERIES_LASTBAR_DATE); } while (_LastError! = ERR_NO_ERROR GetTickCount () - ms lt; 500); if (curr gt; 0 _LastError == ERR_NO_ERROR curr! = m_letzte_Zeit_zeit) {bool res = true; if (m_last_bar_time == 0) res = false; m_last_bar_time = aktuell; Rückgabe Res; } falsch zurückgeben; } bool isMatching (ENUM_TIMEFRAMES tf) {Rückgabe m_timeframe == tf? wahr falsch;} }; bool isNewBar (const ENUM_TIMEFRAMES Zeitrahmen) {statisch CArrayObj tfs; für (int i = tfs.Total () - 1; igt; = 0; i--) {NewBars * tf = dynamische_Ausblendung; NewBars * gt; (tfs.At (i)); if (tf.isMatching (timeframe)) return tf.isNewBar (); } tfs.Add (neue NewBars (Zeitrahmen)); falsch zurückgeben; }Zitat von ;
1 Anhang (e)
Es wird nicht (ualisierung wird gestoppt) Balken () überschreitet die maximale Anzahl der Balken, wenn die maximale Balkeneinstellung erreicht (und überschritten) wurdeZitat von ;
Danke, Sie sind sehr freundlich bei der Bereitstellung dieses Beispiels hier und auf meinen anderen Threads. Ich verstehe, was Sie hier getan haben, aber die Linguistik entzieht sich mir immer noch, da ich noch die OO-Seite der MQL4 lernen muss. Ich bin mir auch nicht ganz sicher, ob Ihr Code im Kontext eines Skripts funktioniert, aber ich bin nicht so gut informiert.Zitat von ;
Danke, ich habe widersprüchliche Antworten in verschiedenen Threads gelesen, also war ich mir nicht sicher, aber es funktionierte für mich, also dachte ich mir was zum TeufelZitat von ;
Danke für die Antwort, also habe ich Recht, diese Bars-Methode zu verwenden oder nicht? Fühlt sich an, als wäre es einfacher als die Time-Methode und ich mag es, die Dinge einfach zu haltenZitat von ;
Keine Methode ist kompliziert: Eingeschlossener Code static datetime _prevTime = 0; datetime _currTime = iTime (NULL, gewünschter Zeitraum, 0); bool _isNewBar = (_prevTime! = _currTime); if (_isNewBar) _prevTime = _currTime;Zitat von ;
Danke, ich hatte etwas ähnliches in meinem Skript, aber es hat nicht funktioniert (vorher im ersten Post gepostet), auch wenn ich die RefreshRates () hinzugefügt habe. Ich versuche es erneut mit Ihrem Code, indem Sie ResreshRates () innerhalb und außerhalb der Schleife hinzufügen, damit das Skript neue Informationen erhält.Zitat von ;
Eingefügter Code/--- Globale Variable ----------------------------------------- ------------------------- datetime ArrayTime # 91; # 93 ;, LastTime; void OnTick () {if (NewBar (PERIOD_CURRENT)) {//Dein Code}} bool NewBar (int-Periode) {bool firstRun = false, newBar = false; ArraySetAsSeries (ArrayTime, true); CopyTime (Symbol (), Punkt, 0,2, ArrayTime); if (LetzteZeit == 0) firstRun = true; if (ArrayTime # 91; 0 # 93; gt; LastTime) {if (firstRun == false) newBar = true; LastTime = ArrayTime # 91; 0 # 93 ;; } return newBar; }
Überprüfen Sie auch diesen Code, der für beliebige Zeitrahmen geeignet ist (ermittelt mit dem ersten Preisangebot): Code #property eingefügt strict void OnStart () {datetime seconds = _Period * 60;/Angabe eines beliebigen Betrags in Sekunden datetime t_last_recorded = 0;/zur Demonion: D while (! IsStopped ()) {RefreshRates (); datetime t = Zeitstrom ();/Zeitpunkt des letzten bekannten Zitats datetime t_normalized = tseconds * seconds; if (t_normalized gt; t_last_recorded) {//neuer Balken printf (neuer Balken!); t_last_recorded = t_normalisiert; } Schlaf (1); }}