Fehler, Irrtümer, Fragen - Seite 310

 

Was ist der Unterschied?

CHART_WIDTH_IN_BARS Ширина графика в барах
от
CHART_VISIBLE_BARS Количество баров на графике, доступных для отображения
 
Urain:

Was ist der Unterschied?

Es kann ein leeres Feld auf der rechten Seite geben, wenn eine Einrückung eingestellt ist. In diesem Fall wird CHART_VISIBLE_BARS einen kleineren Wert anzeigen als CHART_WIDTH_IN_BARS
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Urain:

Was ist der Unterschied?

Buchstäblich anders.


 
Rosh:
Wie lautet die Frage?

1. Nehmen Sie das Skript, das in den Beitrag gedreht wurde, und führen Sie es im Diagramm aus. Das Skript sollte eine bestimmte Anzahl von Balken kopieren und die 20 ältesten Balken abwickeln.

Diese Methode wird verwendet (ich verstehe, dass es keine Prüfungen und alle Arten von Fehlerfallen gibt, aber trotzdem)

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем 
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

Also mit diesen Parametern, die ich angegeben (Anzahl der Bars und M1) das Skript läuft, aber manchmal weigert es sich, NORMAL zu arbeiten. Dies geschieht ab einer bestimmten Anzahl von Balken (ich habe mehr als 368700).

Bei 368800 werden viel weniger Balken angezeigt (aber immer eine andere Zahl - 368732 / 368735 / 368736 oder etwas in dieser Richtung).

Aber selbst bei 360000 funktioniert es nicht immer korrekt, es gab Fälle, in denen nur 10000 Balken kopiert wurden.

2. Die Variante, bei der zwei Datumsangaben gemacht werden, hat mich wirklich schockiert: Nicht nur, dass 0 nicht als erstes Datum akzeptiert wird (was meiner Meinung nach sinnvoll ist), sondern es werden auch bis zu 10000 kopiert.

Obwohl mit 0 als int als start_time ist es verständlich (ich habe Erfahrung), es ist alles über Funktionen überladen und Compiler "nicht verstehen" bestimmte Dinge. Aber deshalb sind 10000 Barren eine separate Frage, die "in einer Million" genannt wird.

Die 10.000-Minuten-Balken, so wie wir sie verstehen, werden nicht über 2011 hinausgehen, wenn ich es richtig verstehe, werden sie nicht über den Februar hinausgehen (und wie aus all dem oben Gesagten deutlich wird, sind mindestens 360000 mit Sicherheit geladen).

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

PS

Gleichzeitig unterscheidet sich die Geschwindigkeit von normal und "buggy" (wenn das Skript nur 10000 Takte kopiert) um ein Vielfaches.

PPS

Achten Sie bitte darauf, dass Sie bestimmte Abschnitte der Hilfe (bzw. deren Beispiele) zu einem logischen Schluss bringen, um Unklarheiten und andere "dumme" Situationen zu vermeiden.

Es sollten zusätzlich Schecks ausgestellt werden, usw. Außerdem gibt es in diesem Fall keine Querverweise in den Parameterbeschreibungen (zumindest im Zeitrahmen) und es ist nicht klar, welchen Typ start_time und start_pos haben.Ich vermute, dass datetime (warum sonst würde der Compiler auf 0 als start_timeschwören ).

//Код по третьему варианту, может я что-то упустил?
//Так ругается - 'CopyRates' - ambiguous call to overloaded function
Copied = CopyRates(Symbol(),PERIOD_M1,0,TimeCurrent(),Rates);
//Так нет, но копирует только 10000 баров
Copied = CopyRates(Symbol(),PERIOD_M1,(datetime)0,TimeCurrent(),Rates);
 

Ist das ein Fehler oder meine mangelnde Fähigkeit?

void OnStart()
  {
//---
   long chart_id=ChartID();
   ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);   // отключаем автоскролл
   while(!IsStopped())
     {
      //------------------      
      ChartNavigate(chart_id,CHART_END,-2410); // делаем навигацию, поставим константу
      //------------------
      Sleep(500);
      ChartSetString(chart_id,CHART_COMMENT,ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR));
      ChartRedraw(chart_id);// отображаем первый бар чарта после навигации
      Sleep(500);
     }        
  }


Das Diagramm ruckelt beim Navigieren von der Nullleiste aus. Ich habe absichtlich Zettel zwischen Navigation und Aktualisierung eingefügt, um das Problem hervorzuheben. Aber der Fehler existiert auch ohne Zettel. Es stellt sich heraus, dass ChartNavigate() das Diagramm zunächst auf Null setzt und dann zurückbewegt. Außerdem tut er dies nicht jedes Mal.

Zumindest die Tatsache, dass der Fehler nicht jedes Mal auftritt, wenn Sie ChartNavigate() aufrufen, sondern wenn Sie es ohne Slips ausführen.

Документация по MQL5: Операции с графиками / ChartNavigate
Документация по MQL5: Операции с графиками / ChartNavigate
  • www.mql5.com
Операции с графиками / ChartNavigate - Документация по MQL5
 
Urain:

Ist das ein Fehler oder meine mangelnde Fähigkeit?


Das Diagramm ruckelt beim Navigieren von der Nullleiste aus. Ich habe absichtlich Zettel zwischen Navigation und Aktualisierung eingefügt, um das Problem hervorzuheben. Aber der Fehler existiert auch ohne Zettel. Es stellt sich heraus, dass ChartNavigate() das Diagramm zunächst auf Null setzt und dann zurückbewegt. Außerdem tut er dies nicht jedes Mal.

Zumindest die Tatsache, dass der Fehler nicht jedes Mal auftritt, wenn Sie ChartNavigate() aufrufen, sondern wenn Sie es ohne Slips ausführen.


Versuchen Sie das Beispiel von ChartNavigate Funktion funktioniert nicht, Bitte helfen Sie
 
Rosh:
Versuchen Sie das Beispiel aus dem Zweig ChartNavigate Funktion funktioniert nicht, Bitte helfen Sie

Was ist also an diesem Beispiel so grundlegend anders als an meinem Code?

Es ist nur so, dass in Ihrem Code die Navigation nur einmal aufgerufen wird, während ich das Diagramm die ganze Zeit auf dem gewünschten Balken halten muss (unabhängig von Benutzeraktionen).

Ich habe Ihr Beispiel ausprobiert und meinen Code ohne Diagrammaktualisierung ausgeführt (obwohl das für mich wichtig ist, weil das Programm viele grafische Transformationen verwendet), aber es hat auch nicht funktioniert. Der Ruck bleibt. Ich navigiere immer noch zu demselben Punkt und dann zur Nullleiste.

Auch die Navigation über den aktuellen Balken halte ich für inakzeptabel, da der Benutzer das Diagramm bei laufendem Programm versehentlich verschieben kann.

 
Wenn es nicht sofort klar ist, lassen Sie mich erklären: der obige Code ist ein Versuch, einen Autoscroll auf einem bestimmten Balken zu emulieren.
 
Interesting:
Ist die Geschichte in der Schublade?
Natürlich gibt es eine Geschichte, aber nicht alle Würmer haben eine Geschichte der Ausbreitung!
 
Urain:

Was ist also an diesem Beispiel so grundlegend anders als an meinem Code?

Es ist nur so, dass in Ihrem Code die Navigation einmal aufgerufen wird, während ich das Diagramm die ganze Zeit auf dem gewünschten Balken halten muss (unabhängig von den Aktionen des Benutzers).

Nachdem ich mir Ihr Beispiel angesehen habe, habe ich meinen Code ohne Diagrammaktualisierung ausgeführt (obwohl das für mich wichtig ist, da das Programm auch eine Reihe von Grafikkonvertierungen verwendet), aber auch das hat nicht geholfen. Der Ruck bleibt. Ich navigiere immer noch zu demselben Punkt und dann zur Nullleiste.

Auch die Navigation über den aktuellen Balken halte ich für inakzeptabel, da der Benutzer das Diagramm bei laufendem Programm versehentlich verschieben kann.

Ich habe das gleiche Problem mit meinem Indikator, nur ist es neu gezeichnet, sobald der Tick kommt und es ist nicht klar, wie man es beheben?