Mt4 Ende der Unterstützung. - Seite 33

 
Außerdem gibt es ein Problem mit der Startzeit. Irgendetwas registriert den Beginn des Taktes nicht zum richtigen Zeitpunkt. Ich werde es später herausfinden.
 
Nikolai Semko:

Peter, bei mir funktioniert es auch nicht.
Ihr Programmierstil ist seltsam. Sie können all diese Dinge mit allen Variablen und Schleifen aus OnInit und OnTimer in eine Prozedur packen. Wenn jemand es verwenden möchte, denn dieser Code wird im Weg sein. Was ist, wenn wir 20 oder mehr Verfahren mit demselben Inhalt haben? Immerhin wird siehier umgesetzt.


Peter sucht nicht nach einem einfachen Ausweg...

 
Реter Konow:
Außerdem gibt es ein Problem mit der Startzeit. Irgendetwas registriert den Beginn des Taktes nicht zum richtigen Zeitpunkt. Ich werde es später herausfinden.

Der Beginn des Taktes ist nicht immer genau zeitlich festgelegt.

Manchmal werden Takte ganz übersprungen.
 
Nikolai Semko:

Peter, bei mir klappt es auch nicht.
Ihr Programmierstil ist seltsam. Sie können all diese Dinge mit allen Variablen und Schleifen aus OnInit und OnTimer in eine Prozedur packen. Wenn jemand es benutzen will, denn dieses Paket wird im Weg sein. Was ist, wenn es 20 oder mehr Verfahren mit demselben Inhalt gibt? Schließlich wird siehier umgesetzt.

Auf die Minute genau funktioniert es, aber der Anfang des Taktes wird nicht zum richtigen Zeitpunkt gesperrt.

Ich habe es nicht in anderen Zeitrahmen überprüft, weil es eine lange Wartezeit gibt.

Was den Stil betrifft, so spielt er jetzt keine Rolle mehr. Wir können alles aus dem Timer herausnehmen und in eine separate Funktion packen. Ich habe nur an die Lösung selbst gedacht, nicht an zukünftige Varianten ihrer Integration.

 
Vladimir Pastushak:

Der Beginn der Bar ist nicht immer pünktlich.

Ja, das habe ich bemerkt, ich werde es später korrigieren.
 
Реter Konow:

Ich dachte, wenn jemand wirklich 600 Instrumente in der Marktübersicht hat und bei jedem Tick das Eintreffen eines neuen Balkens für jedes Instrument und jeden Zeitrahmen prüft, könnte es teuer werden...

Ich selbst handele nicht, daher weiß ich nicht genau, wie oft diese Funktion in der Praxis aufgerufen werden sollte.

Die Doppelschleife für Symbole und Zeitrahmen in der Funktion "Neuer Balken" kann die Belastung nur erhöhen, wenn die Anzahl der Symbole und Zeitrahmen sehr groß ist und die Funktion bei jedem Tick von Hunderten von Symbolen aufgerufen wird. Vielleicht hat Dmitry also recht.

Ich habe eine Schleife in der Funktion verkürzt.

Vergessen Sie es einfach.

Hier ist ein Beispiel meiner Klasse speziell für diese Aktion. Natürlich ist es kein Meisterwerk, aber es ist meins, und es versteht mich und funktioniert.

class CNewBar
{
protected:
  MqlRates newBarRates[];
public:
 bool newBar();
 bool newBar(ENUM_TIMEFRAMES timeframe, datetime & tOld);
};/********************************************************************/

bool CNewBar::newBar()
{
 static datetime timeLastBar;
  if(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, newBarRates) < 0)
   return(false);
  bool ret = timeLastBar != newBarRates[0].time;
   if(ret)
    timeLastBar = newBarRates[0].time;
   return(ret);
}/********************************************************************/

bool CNewBar::newBar(ENUM_TIMEFRAMES timeframe, datetime & tOld)
{
  if(CopyRates(_Symbol, timeframe, 0, 1, newBarRates) < 0)
   return(false);
    datetime tNew = newBarRates[0].time;
   bool ret = tOld != tNew;
   if(ret)
    tOld = tNew;
   return(ret);
}/********************************************************************/

Wenn Sie nur die aktuelle TF ermitteln wollen, müssen Sie die Funktion ohne Parameter aufrufen.

Dementsprechend muss die Bibliothek angehängt werden, wenn sie in .mqh abgelegt ist.

#include <путь_папка\имя_файла.mqh>
CNewBar newBar;

und es wird in OnTick() aufgerufen.

if(newBar.newBar())
 Print("Новый бар на текущем ТФ");

Wenn wir andere TFs definieren müssen, deklarieren wir Variablen für jede Periode und jedes Symbol, wenn nötig, auf der Ebene von globalen oder statischen Variablen.

static datetime oldD1 = 0, oldH1 = 0;

if(newBar.newBar(PERIOD_H1, oldH1) && newBar.newBar(PERIOD_D1, oldD1)
 Print("Открылся новый день и новый час");

Dieser Ansatz ist effektiv, wenn man auf einer anderen als der gewünschten TF arbeitet und schützt vor Problemen mit einem versehentlichen Wechsel des Charts, auf dem der Expert Advisor arbeitet.

 
Nikolai Semko:

Peter, bei mir klappt es auch nicht. Obwohl der Algorithmus recht schnell ist, ist er eine Zeitverschwendung. Aber es funktioniert noch nicht. Keine Zeit, das herauszufinden.
Sie haben einen seltsamen Programmierstil. Sie können all diese Dinge mit allen Variablen und Schleifen aus OnInit und OnTimer in eine Prozedur packen. Wenn jemand es benutzen will, ist all dieses Zeug im Weg. Was ist, wenn es 20 oder mehr Verfahren mit demselben Inhalt gibt? Sie wirdhier umgesetzt.


Vielleicht wissen Sie nicht, was "schnell" bedeutet?

 
Alexey Viktorov:

Oh, spuck es aus...

Hier ist ein Beispiel meiner Klasse speziell für diese Aktion. Natürlich ist es kein Meisterwerk, aber es ist meins und es funktioniert für mich.

Wenn Sie nur auf die aktuelle TF ermitteln wollen, dann wird die Funktion ohne Parameter aufgerufen.

Dementsprechend muss die Bibliothek verbunden sein, wenn sie in .mqh abgelegt ist.

und es wird in OnTick() aufgerufen.

Wenn ich andere TFs bestimmen will, dann werden auf der Ebene der globalen oder statischen Variablen Variablen für jede Periode und jedes Symbol deklariert, falls erforderlich.

Dieser Ansatz ist effektiv, wenn man auf einer anderen als der gewünschten TF arbeitet und schützt vor Problemen, die mit einem versehentlichen Wechsel des Charts, auf dem der Expert Advisor arbeitet, zusammenhängen.


Sie haben keine Ahnung, welche Idiotie Sie demonstriert haben, es ist einfach absurd. Aber ich werde euch nicht zeigen, wo genau, denn ihr seid alle nicht an meiner Meinung interessiert)))

 
Alexey Viktorov:

Oh, spuck es aus...

Hier ist ein Beispiel meiner Klasse speziell für diese Aktion. Natürlich ist es kein Meisterwerk, aber es ist meins und es funktioniert für mich.

Wenn Sie nur auf die aktuelle TF ermitteln wollen, dann wird die Funktion ohne Parameter aufgerufen.

Dementsprechend muss die Bibliothek angehängt werden, wenn sie in .mqh abgelegt ist.

und es wird in OnTick() aufgerufen.

Wenn es notwendig ist, andere TFs zu bestimmen, dann werden auf der Ebene der globalen Variablen oder statischen Variablen für jede Periode und, falls erforderlich, für das Symbol deklariert.

Dieser Ansatz ist effektiv, wenn man auf einer anderen als der gewünschten TF arbeitet und schützt vor Problemen mit einem versehentlichen Wechsel des Charts, auf dem der Expert Advisor arbeitet.

Und was ist mit anderen Symbolen? Die Aufgabe bestand darin, die Änderung eines TF auf einem beliebigen Symbol aus dem Marktbericht für einen beliebigen TF zu ermitteln.

Herzliche Grüße.
 
Alexey Viktorov:

Oh, spuck es aus...

Hier ist ein Beispiel meiner Klasse speziell für diese Aktion. Natürlich ist es kein Meisterwerk, aber es ist meins und es funktioniert für mich.

Wenn Sie nur auf die aktuelle TF ermitteln wollen, dann wird die Funktion ohne Parameter aufgerufen.

Wenn dies in .mqh platziert wird, sollte die Bibliothek dementsprechend enthalten sein

und es wird in OnTick() aufgerufen.

Wenn ich andere Zeiträume bestimmen will, dann werden auf der Ebene der globalen Variablen oder statischen Variablen für jeden Zeitraum und jedes Symbol deklariert, falls erforderlich.

Dieser Ansatz ist effektiv, wenn man auf einer anderen als der gewünschten TF arbeitet, und schützt vor Problemen mit einem versehentlichen Wechsel des Charts, auf dem der Expert Advisor arbeitet.

Funktioniert Ihre Lösung gut? Wenn ja, dann ist alles in Ordnung.

Wie sieht es bei Hunderten von Instrumenten aus - wird es da keine Überschneidungen geben?

Grund der Beschwerde: