Indikatoren: Bessere Lautstärke - Seite 2

 
oomeysh #:
Ich habe diesen Indikator auf mt5 angewendet, aber nichts angezeigt... up
Gehen Sie zu den Input-Einstellungen des Indikators und ändern Sie den - Typ des verwendeten Volumens von Real Volume auf Tick Volume.
 

Ich habe das in Claude Sonnet 5.5 eingegeben und folgende Meldung erhalten:

Was gut ist

  • Das Pufferlayout ist korrekt: 3 Puffer für 2 Diagramme (Histogrammdaten + Farbindex sowie die MA-Linie).
  • Die Farbliste entspricht der klassischen „Better Volume“-Palette. Die Indizes 0 bis 5 stimmen mit den Kommentaren überein.
  • Die Gleichheitsprüfungen wie IntTimesRange == IntMaxTimesRange sind hier sicher. Das Fenstermaximum wird mit dem identischen Ausdruck berechnet, sodass die Double-Werte genau übereinstimmen, wenn der aktuelle Balken das Maximum darstellt.
  • Die Neuberechnung anhand von „prev_calculated – 1“ aktualisiert das sich bildende Balkendiagramm korrekt.

Fehler, die schwerwiegendsten zuerst

1. Absturz wegen Bereichsüberschreitung bei kurzen Zeitreihen (Zeilen 63–69). Die Grenze für `
` wird nur beim ersten Aufruf begrenzt. Angenommen, ein Wochen- oder Monatschart hat 50 Balken und `minbars` ist 100. Der erste Aufruf überspringt die Schleife und gibt „rates_total“ zurück. Beim nächsten Tick beträgt „prev_calculated“ 50, sodass das Limit 49 ist. Die MA-Schleife liest dann „n = -1“ und der Indikator stürzt mit der Meldung„Array außerhalb des zulässigen Bereichs“ ab. Behebung:

mql5

if(rates_total <= minbars) return(0); limit = (prev_calculated == 0) ? minbars : MathMax(prev_calculated - 1, minbars);

2. „Climax Churn“ (magenta) geht bei bärischen Balken verloren (Zeilen 116–121).
Der Block „Climax Sell“ wird nach „Climax Churn“ ausgeführt und überschreibt diesen. Ein Balken, der sowohl einen Volumen-Range-Climax als auch einen Churn-Balken darstellt, wird also nur dann magenta dargestellt, wenn er über dem Mittelwert geschlossen hat. Schließt er darunter, wird er einfach weiß dargestellt. Die beabsichtigte Priorität ist, dass „Climax Churn“ Vorrang vor allem anderen hat.

3. Die „zusätzliche Churn-Prüfung“ kann niemals ausgelöst werden (Zeilen 123–125).
IntCandleRange > IntMiddlePrice * 2 wird zu high - low > high + low erweitert, was nur dann zutrifft, wenn low < 0 ist. Für jedes normale Instrument ist diese Bedingung toter Code. Die Absicht war wahrscheinlich ein Vergleich mit einer durchschnittlichen Spanne oder Ähnlichem, daher muss dies neu definiert und nicht nur korrigiert werden.

4. Der fest codierte Wert 20 ignoriert „InpLookBack“ (Zeile 105).
Alles andere verwendet `InpLookBack`, aber der Test auf geringes Volumen verwendet `i - 19, 20`. Jeder andere Wert als 20 führt zu Inkonsistenzen in den Klassen. Wenn `InpLookBack` auf einen Wert über 20 gesetzt wird, berücksichtigt die Erkennung geringen Volumens weiterhin nur 20 Balken.

5. Daten mit Nullvolumen lösen falsche Signale aus, und die Standardeinstellung ist eine Falle.

  • Der Standardwert ist „VOLUME_REAL“, was bei den meisten Forex- und CFD-Symbolen 0 entspricht.
  • Bei einem Volumen von ausschließlich Nullen sind sowohl IntTimesRange (0) == IntMaxTimesRange (0) als auch IntDividedRange (0) == IntMaxDividedRange (0) wahr. Das Chart füllt sich mit den Farben für „Climax“ und „Climax-Churn“.
  • Sichern Sie die Flags mit > 0 und verwenden Sie standardmäßig VOLUME_TICK.

6. Keine Eingabevalidierung in `OnInit`. `
` `InpMAPeriod` <= 0 führt zu einer Division durch Null. `InpLookBack` <= 0 unterbricht die Fensterlogik. Geben Sie in diesen Fällen `INIT_PARAMETERS_INCORRECT` zurück.

Kleinere Punkte

  • „NormalizeDouble(..., 0)“ rundet den gleitenden Durchschnitt (MA) auf eine ganze Zahl, was die Linie bei Symbolen mit geringem Volumen verzerrt. Dies ist nicht erforderlich.
  • Balken vor den Minbars werden nie geschrieben, und PLOT_DRAW_BEGIN ist nicht gesetzt. Setze diese Option und initialisiere die Puffer, damit die frühen Balken keinen Datenmüll anzeigen.
  • Der MA kann bei MAPeriod - 1 beginnen, nicht bei MAPeriod. Die Verwendung einer laufenden Summe anstelle der erneuten Summierung von 100 Balken pro Balken wäre zudem schneller.
  • Die wiederholten ternären Ausdrücke `InpVolumeType == VOLUME_TICK ? ... : ...` würden sich besser in einer kleinen Hilfsfunktion zusammenfassen lassen.


    Von Claude korrigierte und ins Englische übersetzte Version im Anhang. (Klicke auf „Zur Diskussion“, um die Datei anzuzeigen.)
Dateien: