ChartNavigate während der Initialisierung - Seite 5

 
Ihor Herasko:

Nein, das bin ich nicht. Denn genau das ist der Punkt. Lassen Sie mich Ihnen ein wenig mehr darüber erzählen, worum es hier geht. Der Händler verwendet das Diagramm wie ein Testgerät. Der Indikator blendet einen Teil des echten Diagramms rechts von der vermeintlich aktuellen Zeit aus (in Wirklichkeit liegt diese Zeit irgendwo in der Historie). Wenn Sie F12 drücken, wird die nächste Kerze im Online-Chart angezeigt, usw. Wenn Sie also das Terminal mit dem Indikator neu starten, wird die Chartposition nicht an die Stelle zurückgesetzt, an der der Händler seine Studien beendet hat. Als Ergebnis erhält er/sie ein leeres Diagramm, da das Terminal das Diagramm auf die letzte echte Kerze zurücksetzt. Und das, obwohl das Terminal an einem ganz anderen Ort entladen wurde.

Eine interessante Beobachtung. Ich habe es selbst überprüft - aber leider hat sich nichts geändert. Ich bekomme immer noch die günstigsten Preise für das Wiederladen.

Ich schlage vor, dass wir "unsere Uhren synchronisieren". Ich teste dies alles mit Build 1861. Was ist Ihr Körperbau?

Vielleicht sollten Sie solche Zeilen an der Vorderseite hinzufügen

   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);

und sie dann verschieben?

Oder verschieben Sie es einfach nirgendwo hin. Es funktioniert auch ohne Probleme.

ChartNavigate(0, CHART_CURRENT_POS, 0)

Bei diesem Balken habe ich das Terminal geschlossen und bei diesem Balken geöffnet.

Allerdings bleibt das Diagramm auch bei dieser Variante im inaktiven Fenster. Leider. Das Diagramm bleibt auch ohne diesen Code an seinem Platz.

 
Alexey Viktorov:

Fügen Sie vielleicht folgende Zeilen am Anfang ein

und sie anschließend verschieben?

Ja, in der Vollversion ist alles enthalten. Wenn Sie ohne Neustart des Terminals arbeiten, ist alles in Ordnung. Aber ein Neustart führt zu solchen Problemen. Und selbst eine Krückenlösung hilft nicht immer. Ich werde das weiter untersuchen.

 
Ihor Herasko:

Ja, in der Vollversion ist alles enthalten. Wenn Sie ohne Neustart des Terminals arbeiten, ist alles in Ordnung. Aber ein Neustart führt zu Problemen wie diesem. Und selbst eine Krückenlösung hilft nicht immer. Ich werde die Sache weiter untersuchen.

Aber ich habe auch schon mit einem Neustart des Terminals experimentiert. Was könnte das Problem sein? Ich habe das Update heruntergeladen, aber ich habe es vorerst abgebrochen. Vielleicht sollten Sie auch aktualisieren?
 
Alexey Viktorov:
Ich habe aber auch mit einem Neustart des Terminals experimentiert. Was könnte das Problem sein? Ich habe das Update heruntergeladen, aber bisher habe ich die Aktualisierung abgebrochen. Vielleicht sollten Sie auch aktualisieren?

Aufgerüstet auf die Bauart 1865. Das Problem bleibt bestehen.

Außerdem stellte sich heraus, dass selbst nach dem vollständigen Laden der Daten in das Diagramm und der Verwendung von ChartNavigate() das Diagramm eine Zeit lang an der gewünschten Stelle angezeigt wird, aber bei einem neuen Tick immer noch zum letzten Balken zurückgeht. Die Schaltfläche für den automatischen Bildlauf ist deaktiviert, und es werden keine anderen Indikatoren verwendet.

Wenn Sie das Diagramm manuell verschieben, geschieht nichts dergleichen. Ich bin im Moment ratlos. Ich werde das morgen untersuchen, wenn ich frische Augen habe, um zu sehen, ob ich es irgendwo vermasselt habe.

 
MetaTrader 5 x64 build 1870 started (MetaQuotes Software Corp.)
Windows 10 (build 17134) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 4720 / 8077 Mb, Disk: 301 / 464 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Drehbuch. Nur mitCHART_CURRENT_POS ist sie stabil. Bei CHART_BEGIN und positivem "Shift" sowie bei CHART_END und negativem "Shift" bewegt sich das Diagramm entweder nicht oder es springt (scrollt sich selbst) zu den neuesten Kursen: Sie haben das Gefühl, dass die Schaltfläche "Autoscroll" aktiviert ist.

//+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property script_show_inputs
//--- input parameters
input ENUM_CHART_POSITION  InpPosition = CHART_CURRENT_POS;    // Chart Position  
input int                  InpShift    = -1;                   // Shift
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ResetLastError();
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   int chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   string comm="До: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
   if(ChartNavigate(ChartID(),InpPosition,InpShift))
      Print("ChartNavigate ",EnumToString(InpPosition),",",InpShift," успешно");
   else
      Print("Ошибка №",GetLastError(),", ",EnumToString(InpPosition));
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   comm="После: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
  }
//+------------------------------------------------------------------------------+ 
//| Gets the index of the first visible bar on chart.                            | 
//| Indexing is performed like in timeseries: latest bars have smallest indices. | 
//+------------------------------------------------------------------------------+ 
int ChartFirstVisibleBar(const long chart_ID=0)
  {
//--- prepare the variable to get the property value 
   long result=-1;
//--- reset the error value 
   ResetLastError();
//--- receive the property value 
   if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
     {
      //--- display the error message in Experts journal 
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property 
   return((int)result);
  }
//+------------------------------------------------------------------+

1

 
Ihor Herasko:

Aufgerüstet auf die Bauart 1865. Das Problem bleibt bestehen.

Außerdem stellte sich heraus, dass selbst nach dem vollständigen Laden der Daten in das Diagramm und der Verwendung von ChartNavigate() das Diagramm eine Zeit lang an der gewünschten Stelle angezeigt wird, aber bei einem neuen Tick immer noch zum letzten Balken zurückgeht. Die Schaltfläche für den automatischen Bildlauf ist deaktiviert, und es werden keine anderen Indikatoren verwendet.

Wenn Sie das Diagramm manuell verschieben, geschieht nichts dergleichen. Ich bin im Moment ratlos. Morgen werde ich es noch einmal mit frischen Augen untersuchen, um zu sehen, ob ich irgendwo einen Fehler gemacht habe.

Ich habe vorgeschlagen, nicht in der Hoffnung zu aktualisieren, dass sich alles von selbst ergibt, sondern um die gleichen Builds zu haben.

Igor, machen Sie Experimente mit der Vollversion des Indikators oder mit der experimentellen Version?

Ich habe gerade das Terminal mit Build 1865 neu geladen und alles war in Ordnung. Ich schreibe diese Nachricht, schaue regelmäßig auf den Chart, wechsle die Chart-Fenster... Aber das verschobene Diagramm bleibt trotz der eingehenden Ticks und Schaltungen unbewegt.

Hier ist der gesamte Code

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);
   if(ChartNavigate(0, CHART_END, -100))
      Comment("Успешно");
   else
      Comment("Ошибка №", GetLastError());   
  //ChartRedraw(ChartID());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{
 Comment("");
}/********************************************************************/
Aus irgendeinem Grund glaube ich nicht, dass das eine Terminal so und das andere so funktioniert.
 
Alexey Viktorov:

Ich schlug eine Aktualisierung vor, nicht in der Hoffnung, dass sich alles einrenken würde, sondern damit die Builds gleich bleiben.

Igor, machen Sie Experimente mit der Vollversion des Indikators oder mit einer experimentellen Version?

Ich habe gerade das Terminal mit Build 1865 neu geladen und alles war in Ordnung. Ich schreibe diese Nachricht, schaue regelmäßig auf den Chart, wechsle die Chart-Fenster... Aber das verschobene Diagramm bleibt trotz der eingehenden Ticks und Schaltungen unbewegt.

Hier ist der gesamte Code

Irgendwie glaube ich nicht, dass das eine Terminal so funktioniert und das andere nicht.

Versuchen Sie, ein Symbol zu betrachten, das überhaupt keine Geschichte hat

 
Artyom Trishkin:

Versuchen Sie, ein Symbol zu finden, das keine Geschichte hat.

Wie kann man das tun?

Laut der Beschreibung im ersten Beitrag des Threads handelt es sich um einen Indikator, der bei einem offenen Chart hängt - das bedeutet, dass die Historie bereits geladen ist. Oder? Hängen Sie den Indikator auf, schließen Sie das Terminal, starten Sie das Terminal, --- wohin kann die Geschichte gehen? Wenn es schon da war...

Zweitens: Ich habe das Symbol EURMXN geöffnet. Können Sie, ohne in das Terminal zu schauen, sagen, was es ist? )))

 
Alexey Viktorov:

Wie kann man das tun?

Laut der Beschreibung im ersten Beitrag des Threads handelt es sich um einen Indikator, der bei einem offenen Chart hängt - das bedeutet, dass die Historie bereits geladen ist. Oder? Hängen Sie den Indikator auf, schließen Sie das Terminal, starten Sie das Terminal, --- wohin kann die Geschichte gehen? Wenn es schon da war...

Der zweite Schritt war das Öffnen des EURMXN-Symbols. Können Sie ohne einen Blick in das Terminal sagen, was es ist? )))

Nein, ich kann nicht...

Ich wollte damit sagen, dass sich das Diagramm durch das Laden historischer Daten wahrscheinlich zu seinem Ende hin verschiebt.

Versuchen Sie Folgendes: Setzen Sie den Indikator auf einen Minuten-Zeitrahmen, schließen Sie das Terminal und öffnen Sie es nach einer Stunde - das Terminal beginnt, die fehlenden Minuten zu laden - was wird mit dem Diagramm passieren? Wird sich das ändern?

 

Was für eine Neuigkeit!!!

Ich hatte H1- und H4-Periodencharts geöffnet und habe sie zur Überprüfung verwendet. Jetzt habe ich angefangen, mit M1, M5, M30 zu experimentieren... es funktioniert nicht!!!

Das Umschalten auf H1 oder H4 ist kein Problem, auch wenn es eine neue Stunde gibt. Dies wurde entweder gestern oder heute früh oder sowohl gestern als auch heute getestet... Das ist nicht der Punkt, aber ich wurde von der Zeitumstellung aufgehalten.

Grund der Beschwerde: