ChartNavigate während der Initialisierung - Seite 2

 
Ihor Herasko:

Was ist, wenn es keine Zecken gibt, Wochenenden? Dann muss eine Zeitschaltuhr angeschlossen werden.

Es bleibt nur noch eine Frage zu klären: Wie lässt sich feststellen, ob ChartNavigate erfolgreich ausgeführt wurde? Die Tatsache, dass es true zurückgibt, ist nur "für Ticks", es hilft nicht in der realen Arbeit.

Ich muss den Code überprüfen, den ich oben in meinem Expert Advisor gepostet habe...

 
Vladimir Karputov:

Ich muss den Code, den ich oben im EA gepostet habe, überprüfen...

Was hat der EA damit zu tun?

 
Ihor Herasko:

Was hat das mit dem Stadtrat zu tun?

Wir sollten überprüfen...

//+------------------------------------------------------------------+
//|                                                  Test EA.mq5.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//--- input parameters
input bool redraw=true;
input ENUM_CHART_POSITION position=CHART_BEGIN;
//---
long count=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   count=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   count++;
//Comment(count);
   if(count==9 || count==19)
     {
      ResetLastError();
      if(position==CHART_BEGIN)
        {
         if(ChartNavigate(ChartID(),CHART_BEGIN,100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(position==CHART_END)
        {
         if(ChartNavigate(ChartID(),CHART_END,-100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(redraw)
         ChartRedraw();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
//--- добавим символ переноса строки 
   string comm="\r\n";
//--- дополним коментарий 
   comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
//--- выведем комментарий 
   Comment(comm);
  }
//+------------------------------------------------------------------+
Dateien:
Test_EA.mq5  6 kb
 

Vladimir Karputov:

Dies ist der Indikator - ich habe speziell eine Verzögerung von neun Ticks, zwei Arten von Chart-Bewegungen und eine Flagge für die erzwungene Neuzeichnung (ein/aus)gesetzt

Sie sind keine Anfängerin. Warum sind Sie irreführend? Warum ignorieren Sie, was Renat Fatkhullin gesagt hat?

In Ihrem Code (wie hier, also hier) ist er gezwungen, das Diagramm bei jedem Tick neu zu zeichnen, indem er bei jedem Tick Kommentare erstellt.


D.h. unabhängig davon, ob das Kennzeichen in den Eingabeparametern aktiviert oder deaktiviert ist.


Und die Aufnahme Ihres Flags in die Eingabeparameter bewirkt in diesem Fall nur ein zusätzliches Neuzeichnen mittelsChartRedraw().

D.h., anstatt nützlich zu sein, belastet es die bereits vorhandenen Kommentare zusätzlich.

P./S.:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Fehler, Irrtümer, Fragen

Renat Fatkhullin, 2017.12.05 02:51

...

Im MT5 bewirkt die Funktion Kommentar explizit, dass der Chart neu gezeichnet wird...

Der Unterschied ist genau das.


Wenn Sie in MT4 nach dem Aufruf von Comment den ChartRedraw() erzwingen, ist das Verhalten immer noch nicht das gleiche wie in MT5. ChartRedraw() in Metatrader 4 ignoriert den Kommentarwert und entscheidet selbst, ob das Diagramm ab dem letzten Frame aktualisiert werden soll oder nicht. Natürlich, in Abwesenheit von Hunderten von Kursen pro Sekunde, die eine Deaktivierung von Chart-Daten verursachen würde, ChartRedraw entscheidet "warum ein unverändertes Diagramm zeichnen" und überspringt die Zeichnung des Rahmens.

Auch Metatrader 5 hat das gleiche System, aber es gibt viel mehr Fälle, in denen die unbedingte Ziehung Vorrang hat.

Bei Terminals handelt es sich um grafische Anwendungen, die Hunderte von Bildern pro Sekunde liefern können und aus Leistungsgründen im schlanken Anzeigemodus laufen.


Daraus ergeben sich weitere Schlussfolgerungen für die Durchführung von Benchmarks:

  • man sollte einen ChartRedraw-Aufruf nicht als eine echte Diagrammzeichnung betrachten

  • Sie müssen immer wissen und beweisen können, warum ein Chart neu gezeichnet wird" und ob ich das interne Bild des Marktes ungültig mache, so dass das Terminal beschließt, den Chart neu zu zeichnen".

  • Sie sollten in MT5 während der Benchmarks keine mehrfachen Schlussfolgerungen ziehen, sondern immer überlegen, wie Sie das Rendering beeinflussen

  • MT5 hat ein korrekteres System zum Ändern von Objekten auf dem Chart und es ist notwendig, die Konsequenzen von Lese-/Schreibbefehlen beim Mischen klar zu verstehen.
    Es wird empfohlen, Lese- und Schreibbefehle nicht zu mischen und Massenlese- und Massenschreibbefehle getrennt auszuführen.

  • Häufiges Neuzeichnen von Diagrammen in Benchmarks führt zu einer hohen Abhängigkeit der Ergebnisse von der Grafikkarte.
    Einige Tests können sogar dazu führen, dass eher die Grafikkarte als die Algorithmen oder Funktionen getestet werden. Der Test auf einem Laptop und einem Desktop-Computer kann mehrfach unterschiedliche Ergebnisse zeigen, nur weil die Grafikkarte 3-5 mal langsamer ist.

Diese Fehler werden ständig von allen gemacht.


 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

ChartNavigate während der Initialisierung

Vladimir Karputov, 2018.06.25 18:52

Ich muss es überprüfen...

...
void OnTick()
  {
//---
   count++;
//Comment(count);
   if(count==9 || count==19)
     {
      ResetLastError();
      if(position==CHART_BEGIN)
        {
         if(ChartNavigate(ChartID(),CHART_BEGIN,100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(position==CHART_END)
        {
         if(ChartNavigate(ChartID(),CHART_END,-100))
            Print("Успешно. redraw ",redraw,". position ",EnumToString(position));
         else
            Print("Ошибка №",GetLastError(),". redraw ",redraw,". position ",EnumToString(position));
        }
      if(redraw)
         ChartRedraw();
     }
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   long first_bar=ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0);
//--- добавим символ переноса строки 
   string comm="\r\n";
//--- дополним коментарий 
   comm=comm+"Первый бар на графике имеет номер "+IntegerToString(first_bar)+"\r\n";
//--- выведем комментарий 
   Comment(comm);
  }
//+------------------------------------------------------------------+

P./S.: Zusätzlich zu Ihrem zweiten Code: Prüfen Sie vor der Aktualisierung des Texteintrags und der Veröffentlichung über denselben Kommentar, ob sich die Daten geändert haben. Wenn nicht, ist es besser, die Aktualisierung und Veröffentlichung des Textes zu verschieben.

D.h. in diesem Fall geht es darum, ob sich die Nummer des ersten Balkens im Diagramm geändert hat

 
Vladimir Karputov:

Ich muss nachsehen...

Hm. Ich bin mir nicht ganz sicher, was es damit auf sich hat. Also gut. Ich habe es installiert. Ich habe es in den Modi CHART_BEGIN und CHART_END geprüft und es funktioniert wie angekündigt. Nach einem Neustart ist alles in Ordnung.

Oder sind Sie an dem Punkt angelangt, an dem Sie auf eine Krücke zurückgreifen müssen: Überprüfen Sie die Nummer des ersten Balkens im Diagramm nach ChartNavigate und führen Sie ChartNavigate erneut aus, wenn es nicht die richtige Nummer ist.

Ja, der Ausweg, natürlich, ich habe auch daran gedacht. Aber es ist lästig, sich ständig an solche Fichen des Terminals zu erinnern. Schließlich ist es durchaus möglich, dass es sich um einen Fehler handelt.

 
Dina Paches:

P./S.: Zusätzlich zu Ihrem zweiten Code: Prüfen Sie vor dem Aktualisieren eines Texteintrags und der Veröffentlichung über denselben Kommentar, ob sich die Daten geändert haben. Wenn nicht, ist es besser, die Aktualisierung und Veröffentlichung des Textes zu verschieben.

D.h., in diesem Fall geht es darum, ob sich die Nummer des ersten Balkens im Diagramm geändert hat

Vielen Dank für die Informationen, aber wir reden hier nicht über Leistung. Das Problem, das wir diskutieren, ist auf einer etwas anderen Ebene, es ist nur Test-Codes zu überprüfen, ob das Problem manifestiert hat sich ))

 
Ihor Herasko:

Natürlich danke ich Ihnen für die Informationen, aber wir reden hier nicht über Leistung. Das Problem, das wir diskutieren, ist auf einer etwas anderen Ebene, es ist nur Test-Codes zu prüfen, ob das Problem erscheint ))

Bitte sehr. Aber siehe auch meinen anderen Beitrag, zu dem der von Ihnen zitierte ein Postskriptum ist.

P./S.: Nicht abwerten, bitte. Ich werde solche Codes bei mir nicht verwenden, da ich weiß, was das bedeutet. Meine Ausrüstung ist nicht von der Regierung ausgegeben

 
Ihor Herasko:

Hm. Ich bin mir nicht ganz sicher, was es damit auf sich hat. Also gut. Ich habe es installiert. In den Modi CHART_BEGIN und CHART_END funktioniert alles wie angegeben. Nach einem Neustart ist alles in Ordnung.

Oder sind Sie an dem Punkt angelangt, an dem Sie eine Krücke benutzen müssen: Überprüfen Sie die Nummer des ersten Balkens im Diagramm nach ChartNavigate und führen Sie ChartNavigate erneut aus, wenn es nicht die richtige ist.

Ja, der Ausweg, natürlich, ich habe auch daran gedacht. Aber es ist lästig, sich ständig an solche Fichen des Terminals zu erinnern. Schließlich ist es durchaus möglich, dass es sich um einen Fehler handelt.

Früher hatte ich eine funktionierende Navigation. Jetzt muss ich es absichtlich überprüfen.


Hinzugefügt: Beachten Sie den Kommentar nicht :)

 
Vladimir Karputov:

Meine Navigation hat funktioniert. Jetzt muss ich es absichtlich überprüfen.


Hinzugefügt: Ignorieren Sie den Kommentar :)

Warum? Habe ich Unsinn geschrieben/berichtet?