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.
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);
}
intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
int i=0;
if ExtFunc("s",60,i,high) == 1)
Buffer[i] = high[i];
}
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".
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."
... 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?
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.
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
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.
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
Grüße an alle!
Was bedeutet die Warnung?
möglicher Datenverlust durch die Typkonvertierung expert.mq5
wenn ich es kompiliere? Sie lautet wie folgt:
Was ist los?
Übergeben Sie das Array einfach per Referenz an Ihre Funktion
Nicht ganz:
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?
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!"
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."
... 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".
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?
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.
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.