Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 18
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Das ist nicht sehr gut. Haben Sie beim Kompilieren möglicherweise Warnungen erhalten? In solchen Fällen müssen Sie die Ursachen der Warnungen beseitigen, nicht #property strict
Ich habe mein Guthaben aufgeladen und kann nun das Terminal mit dem echten Konto nicht finden.
Wenn #property strict ausgeschrieben wurde, erzeugte der Compiler in jeder for()-Schleife Fehler, dass Variablen einen Typ haben müssen, so dass ich int i und int p in jeder Schleife ausschreiben musste. Danach hat der Compiler keine Fehler mehr erzeugt, aber die Zeile wurde nicht gebaut. Als ich #property strict entfernte, brauchte der Compiler den Typ nicht in jeder Schleife zu deklarieren, und die Zeile wurde erstellt.
Ein typischer Fall für die Ausnutzung impliziter Fehler in der Logik. Sobald der Compiler "strenger" geworden ist, verschwindet der Selbstbetrug langsam.
Ich habe mich gefragt, warum es so viele identische Schleifen gibt?
Und warum stören Sie sich in keiner Weise an der Fehlermeldung "out of array", wenn Sie den Indikator auf dem Chart ausführen?
Zum Beispiel hier:
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
Ich habe mein Guthaben aufgeladen und kann nun das Terminal mit dem echten Konto nicht mehr finden.
Als #property strict ausgeschrieben wurde, gab der Compiler in jeder for()-Schleife Fehler aus, dass Variablen einen Typ haben müssen, und so musste ich int i und int p in jeder Schleife ausschreiben. Danach hat der Compiler keine Fehler mehr erzeugt, aber die Zeile wurde nicht gebaut. Als ich #property strict entfernte, brauchte der Compiler den Typ nicht mehr in jedem Zyklus zu deklarieren, und die Zeile wurde gebaut.
die Antwort ist sehr einfach - Sie haben einen trivialen Array-Überlauf - und Ihr Indikator funktioniert aufgrund dieses Fehlers nicht mehr
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
for(int i=1; i<n; i++)
{
for(int p=0; p<m; p++)
{
Mx[i][p]=sum_x[p+1][m-1]/(n-1);
My[i][p]=sum_y[p+1][m-1]/(n-1);
Sie können diesen Fehler zur Laufzeit sehen - starten Sie den Indikator und sehen Sie sich die Protokolldatei auf der Registerkarte Terminal - Experten an:
Dies ist ein typischer Fall der Ausnutzung impliziter logischer Fehler. ...
Ein typischer Fall für die Ausnutzung impliziter Fehler in der Logik. Sobald der Compiler "strenger" geworden ist, verschwindet der Selbstbetrug langsam.
Ich habe mich immer wieder gefragt, warum es so viele identische Schleifen gibt.
Und warum stören Sie sich in keiner Weise an der Fehlermeldung "out of array", wenn Sie den Indikator auf dem Chart ausführen?
Zum Beispiel hier:
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
Was die gleichen Zyklen betrifft, so ist mir aufgrund meiner begrenzten Kenntnisse der Programmierung und der Algorithmen nichts Besseres eingefallen, um das Element des Arrays aus der gewünschten Dimension auszuwählen, das für die Substitution in der Formel erforderlich war.
die Antwort ist sehr einfach - Sie haben einen trivialen Array-Überlauf - und Ihr Indikator funktioniert aufgrund dieses Fehlers nicht mehr
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
for(int i=1; i<n; i++)
{
for(int p=0; p<m; p++)
{
Mx[i][p]=sum_x[p+1][m-1]/(n-1);
My[i][p]=sum_y[p+1][m-1]/(n-1);
Sie können diesen Fehler in der Ausführungsphase sehen - starten Sie den Indikator und sehen Sie sich die Protokolldatei auf der Registerkarte Terminal - Experten an:
Wie berechnen Sie dann die Summe der Schlusskurse in jeder Dimension?
Was die gleichen Zyklen betrifft, so fiel mir aufgrund meiner begrenzten Kenntnisse der Programmierung und der Algorithmen nichts Besseres ein, um das Element des Arrays aus der gewünschten Dimension auszuwählen, das für die Ersetzung in der Formel benötigt wurde.
Zum Beispiel so:
for(int i=1; i<n; i++)
{for(int p=1; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
Können Sie mir bitte sagen, wie ich diesen Fehler beheben kann?
Um diesen Fehler zu korrigieren, müssen Sie Ihre Formel verstehen - was, warum und wie Sie zählen.
Und nur dann können Sie Ihren Algorithmus ausarbeiten und den Fehler beseitigen.
Mit der "Bauchgefühl"-Methode und ohne die Formel zu verstehen, können Sie zwar Fehler ausschließen, aber Sie werden eine falsche Berechnung vornehmen.
p.s. Erklären Sie im Detail, was Sie berechnen - kommentieren Sie Ihren Code ausführlich - und dann werden wir verstehen, wie man den Fehler beheben kann.