Fragen von einem "Dummy" - Seite 65

 
x100intraday:

Wenn ich meine Funktion aufrufe, sollte ich das Array per Referenz, per Zeiger oder auf andere Weise übergeben?

Lesen Sie den Abschnitt über die Übergabe von Parametern per Wert und per Referenz:

MQL5 Referenz / Grundlagen der Sprache / Funktionen / Parameterübergabe

Документация по MQL5: Основы языка / Функции / Передача параметров
Документация по MQL5: Основы языка / Функции / Передача параметров
  • www.mql5.com
Основы языка / Функции / Передача параметров - Документация по MQL5
 
Yedelkin:

Lesen Sie den Abschnitt im Referenzhandbuch über die Übergabe von Parametern per Wert und per Referenz:

MQL5 Referenz / Grundlagen der Sprache / Funktionen / Parameterübergabe

Ich komme gerade von dort und die Kompilierungsfehler, die ich in meiner vorherigen Nachricht erwähnt habe, sind nach dem Lesen des obigen Abschnitts aufgetreten.

Jetzt habe ich es noch einmal genau gelesen - es geht nur um den Inhalt und darum, wo man ihn unterbringt.

Danke, ich habe es herausgefunden.

 
x100intraday:

InOnCalculate kann ich einfach Array-Elemente wie high by indexverwenden. Ist es auch möglich, in ExtFunc auf die Indexelemente dieses Arrays zuzugreifen? Wenn ich meine Funktion aufrufe, sollte ich das Array-Argument per Referenz, per Zeiger oder auf andere Weise übergeben? Bisher ist es mir gelungen, die Fehlermeldungen zu minimieren: "'high' - parameter conversion is not allowed" und "'high' - constant variable cannot be passed as reference" bezüglich der gleichen Zeile meines Funktionsaufrufs mit dem Array-Argument von OnCalculate. Ist es hoffnungslos oder gibt es eine Lösung?

Bisher habe ich in OnCalculate auf das Kopieren von high in ein anderes Array zurückgegriffen:

und dann CopyOfHigh in ExtFunc verwenden, anstatt high-array direkt zu verwenden.

Sie müssen das Array nur per Referenz an Ihre Funktion übergeben

bool ExtFunc (string str, int P, int i, double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 

Grüße an alle!

Was bedeutet die Warnung?

möglicher Datenverlust durch die Typkonvertierung expert.mq5

wenn ich es kompiliere? Sie lautet wie folgt:

   string Symb="EURJPY";
   int DIGITS = SymbolInfoInteger(Symb,SYMBOL_DIGITS);

Was ist los?

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Основы языка / Типы данных / Приведение типов - Документация по MQL5
 
sergey1294:

Übergeben Sie das Array einfach per Referenz an Ihre Funktion

Nicht ganz:

bool ExtFunc (string str, int P, int i, const double & high[])
  {
   if (high[i] < high[i-1]) return(false);
   return(true);   
  }

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[])
  {
   int i=0;
   if ExtFunc("s",60,i,high) == 1)
     Buffer[i] = high[i];
  }
 
RomanS:

Grüße an alle!

Was bedeutet die Warnung?

möglicher Datenverlust durch die Typkonvertierung expert.mq5

beim Kompilieren? Sie lautet wie folgt:

Was ist los?

Die FunktionSymbolInfoInteger() gibt einen Wert vom Typ long zurück (siehe Referenz), während DIGITS als int deklariert ist. Dies ist eine implizite Typumwandlung. Siehe "Typumwandlung".
 
RomanS:

Was die Warnung bedeutet:

möglicher Datenverlust aufgrund von Typumwandlung

Die Bedeutung dieser Nachricht variiert je nach dem Kontext, in dem sie betrachtet wird.

Zum Beispiel:

1. "Machen Sie eine explizite Typkonvertierung!"

   int DIGITS = (int) SymbolInfoInteger(Symb,SYMBOL_DIGITS);

2. "Mögliche Datenzuckungen bei impliziter Typkonvertierung" // Dies ist eine wörtliche Übersetzung.

Dies ist verständlich, da der von der Funktion zurückgegebene Long-Typ einen größeren Umfang hat und einen größeren Wertebereich abdeckt.

Eine weitere Option, die mir in letzter Zeit am häufigsten in den Sinn kommt:

3. "Die Mitarbeiter von MetaQuotes verstehen nicht, wie cool, attraktiv und effektiv es wäre zu lernen, wenn Fehlermeldungen und mql5-Compilerwarnungen in der Muttersprache des Benutzers angezeigt würden."

 
MetaDriver:

... wie cool, attraktiv und effektiv es wäre, zu lernen, wenn die Fehlermeldungen und Warnungen des mql5-Compilers in der Muttersprache des Benutzers angezeigt würden".

Ja, das wäre nicht schlecht. Ich persönlich bin zwar schon etwas versiert in Englisch, und Übersetzer gibt es heutzutage wie Sand am Meer, aber auch das kostet wertvolle Zeit, und die ist nicht gerade knapp. Manche Leute haben nicht genug davon, um einen Übersetzer für ein so kompliziertes Thema wie den Handel auf den Finanzmärkten + Programmierung zu benutzen. MetaTrader 5 ist eine mehrsprachige Plattform. Ich wünschte, die Meldungen und Kommentare in den Hilfebeispielen (auf die wir manchmal stoßen) wären in der Sprache, die im Terminal ausgewählt wurde.
 

Ich habe den Verdacht, dass, wenn der Indikator über iCustom aktiviert wird, er bei jedem Tick berechnet wird. Und es hängt nicht von den Aufrufen durch den CopyBuffer ab. Ist das richtig?

Wenn dies richtig ist, ist es dann möglich, die Berechnung des Indikators zu deaktivieren und ihn nur vor dem Aufruf des CopyBuffer zu aktivieren?

 
masharov:

Ich habe den Verdacht, dass, wenn der Indikator über iCustom aktiviert wird, er bei jedem Tick berechnet wird. Und es hängt nicht von den Aufrufen durch den CopyBuffer ab. Ist das richtig?

Dies hängt von der Logik des benutzerdefinierten Indikators ab. Tatsächlich kann er seine Werte einmal am Tag neu berechnen und dabei alle anderen Ticks überspringen. Sozusagen nach dem Willen des Autors.

Mascharow:

Wenn ja, ist es möglich, die Neuberechnung des Indikators zu deaktivieren und nur vor dem Aufruf des CopyBuffer zu aktivieren?

Im Grunde versuchen einige Leute, diesen Monsteransatz zu verwenden: eine Kopie des Indikators über iCustom erstellen, die erforderlichen Daten kopieren, die Kopie des Indikators löschen. Das Verfahren wird nach Bedarf wiederholt.

Es gibt auch die Funktion OnTimer(), mit der ich selbst noch nicht gearbeitet habe, aber vielleicht können Sie sie an Ihre Aufgabe anpassen.