Fehler, Irrtümer, Fragen - Seite 1492

 
Maxim Khrolenko:
Und global (nicht extern) ist nicht, und das ist nicht gut.

Warum ist es nicht gut? Es wird ausdrücklich gesagt, dass globale Variablen einmal beim Programmstart initialisiert werden.

Wenn Sie ein anderes Verhalten wünschen, initialisieren Sie, wie Sie wollen, in OnInit

 
Yuri Evseenkov:
Es wäre gut, dies in der Dokumentation zu berücksichtigen.
Ja, das werden wir.
 
zaskok3:
In MQL4++ komme ich nicht ohne extern aus, wenn ich Eingabeparameter programmatisch ändern muss. Wenn ich zum Beispiel einen Standardindikator in einen interaktiven Indikator umwandle, muss ich input durch extern ersetzen. Der Compiler behandelt Eingabevariablen als const und beschwert sich, wenn versucht wird, sie zu ändern. Mit extern gibt es solche Probleme nicht.

Verwendung von "Verdoppelungen" der Eingabeparameter

Wir haben ein Beispiel in MQL5\Indicators\Examples\ADX.mq5.

//--- input parameters
input int InpPeriodADX=14; // Period
//---- buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];
//--- global variables
int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      printf("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else ExtADXPeriod=InpPeriodADX;
 
Kameraden, bekommt jemand regelmäßig "Internal compiler error" beim Kompilieren? Kein ersichtlicher Grund, im Falle der Neukompilierung - hängt, im Falle des Schließens des Editors, wieder öffnen (mit den gleichen Registerkarten, mit dem gleichen Code) - Kompilierung ist in der Regel normal. Am Code ändert sich nichts! Aber manchmal tritt dieser Fehler mehrmals hintereinander auf und der erste Neustart des Editors hilft nicht. So weit, als Ergebnis der Neuladen alles geschafft, zu kompilieren. Aber ich befürchte, dass es früher oder später nicht mehr funktionieren wird. Ich würde gerne jemanden finden, der auf ähnliche Fehler gestoßen ist, so dass wir gemeinsam Daten über die Bedingungen ihres Auftretens an servicedesk weitergeben können.
 
Slawa:

Verwendung von "Verdopplern" für Eingabeparameter

Wir haben ein Beispiel in MQL5\Indicators\Examples\ADX.mq5

Um einen Indikator in die interaktive Version umzuwandeln, müssen Sie nur eine Zeile in den Quellcode einfügen. Wenn Sie die Verdoppler machen, müssen Sie zusätzlich zu der zusätzlichen Zeichenkette für die Erstellung des Verdopplers, den gesamten Text ersetzen. Warum diese Mühe, wenn Sie einfach eine Zeile ändern können.

Was hindert Sie daran, die const-Bedeutung von Eingabevariablen zur Kompilierzeit zu entfernen?

 
zaskok3:

Um den Indikator in eine interaktive Variante umzuwandeln, müssen Sie nur eine Zeile in den Quelltext einfügen. Wenn Sie eine Doppelseite erstellen, müssen Sie nicht nur die zusätzliche Zeile für die Erstellung einer Doppelseite, sondern auch den gesamten Text ersetzen. Warum diese Mühe, wenn man eine Zeile einfach ändern kann.

Was hindert Sie daran, die Const-Bedeutung von Eingabevariablen zur Kompilierzeit zu entfernen?

Textbearbeitung. "Strg" + "H" - Suchen und Ersetzen. Nichts Kompliziertes. Seien Sie nur nicht faul.
 
zaskok3:

Was hindert Sie daran, die const-Bedeutung von Eingabevariablen zur Kompilierzeit zu entfernen?

Globale Speicherung von Indikatoren in der MT5 History Base. Für sie sind die Eingabeparameter entscheidend. Wenn Sie die Eingabeparameter ändern, wird der Indikator mit den alten Parametern zerstört und der gleiche Indikator mit den geänderten Parametern neu erstellt.

Das heißt, die Beschränkung ist rein architektonisch

In der vierten Version könnten wir die Konstante aus den Instanzen entfernen, aber dann gibt es eine Inkompatibilität zwischen dem neuen MQL4 und MQL5. Deshalb werden wir es nicht tun. Bitte verwenden Sie weiterhin extern

 

Slawa:

Das heißt, die Einschränkung ist rein architektonisch.

Es ist schade, dass die Architektur so starr ist, dass nicht einmal eine einfache Flexibilität möglich ist. Es stellt sich heraus, dass die Interaktivität in MQL5 eine Krücke benötigt. Die Frage ist, wo der Vorteil liegt, wenn die Sprache die Möglichkeiten einschränkt...
 
pako:
Fenster zum Trennen vom Terminal
Wie?
 
Joo Zepper:
Wie?
Es war irgendwo in einem Forum, eine DLL