Indicatori: Volume migliore - pagina 2

oomeysh #:
Ho applicato questo indicatore su mt5, ma non si vede nulla... su
Andate nelle impostazioni di input dell'indicatore e cambiate il - Tipo di volume utilizzato da Volume reale a Volume Tick.

L'ho dato a Claude Sonnet 5.5 e mi ha detto:

Aspetti positivi

  • La disposizione dei buffer è corretta: 3 buffer per 2 grafici (dati dell'istogramma + indice dei colori, più la linea MA).
  • La lista dei colori corrisponde alla classica tavolozza Better Volume. Gli indici da 0 a 5 corrispondono ai commenti.
  • I controlli di uguaglianza come IntTimesRange == IntMaxTimesRange sono sicuri in questo caso. Il massimo della finestra viene calcolato con la stessa espressione, quindi i valori double corrispondono esattamente quando la barra corrente è quella massima.
  • Il ricalcolo da prev_calculated - 1 aggiorna correttamente la barra in formazione.

Bug, i più gravi per primi

1. Arresto anomalo per fuori intervallo su cronologie brevi (righe 63–69). Il limite di `
` viene limitato solo alla prima chiamata. Supponiamo che un grafico settimanale o mensile abbia 50 barre e che `minbars` sia 100. La prima chiamata salta il ciclo e restituisce `rates_total`. Al tick successivo, `prev_calculated` è 50, quindi il limite è 49. Il ciclo della media mobile legge quindi `n = -1` e l’indicatore si blocca con l’errore«array fuori intervallo». Correzione:

mql5

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

2. Il Climax Churn (magenta) va perso sulle barre ribassiste (righe 116–121).
Il blocco “Climax Sell” viene eseguito dopo “Climax Churn” e lo sovrascrive. Pertanto, una barra che è sia un climax di volume-range che una barra "churn" viene visualizzata in magenta solo se ha chiuso al di sopra del punto medio. Se ha chiuso al di sotto, viene visualizzata in bianco. La priorità prevista è che il climax churn abbia la precedenza su tutto il resto.

3. Il “controllo aggiuntivo di churn” non può mai attivarsi (righe 123–125).
IntCandleRange > IntMiddlePrice * 2 si espande in high - low > high + low, il che è vero solo se low < 0. Per qualsiasi strumento normale quella condizione è codice morto. L’intenzione era probabilmente un confronto con un intervallo medio o simile, quindi va ridefinita piuttosto che semplicemente corretta.

4. Il valore 20 hardcoded ignora InpLookBack (riga 105).
Tutto il resto utilizza `InpLookBack`, ma il test del volume basso utilizza `i - 19, 20`. Qualsiasi valore diverso da 20 rende le classi incoerenti. Se `InpLookBack` è impostato su un valore superiore a 20, il rilevamento del volume basso continua a considerare solo 20 barre.

5. I dati a volume zero generano falsi segnali e l’impostazione predefinita è una trappola.

  • L’impostazione predefinita è VOLUME_REAL, che è pari a 0 sulla maggior parte dei simboli forex e CFD.
  • Con volume interamente pari a zero, sia IntTimesRange (0) == IntMaxTimesRange (0) che IntDividedRange (0) == IntMaxDividedRange (0) risultano vere. Il grafico si riempie dei colori relativi a climax e climax-churn.
  • Proteggere i flag con > 0 e impostare come predefinito VOLUME_TICK.

6. Nessuna convalida degli input in OnInit.
InpMAPeriod <= 0 causa una divisione per zero. InpLookBack <= 0 compromette la logica della finestra. Restituire INIT_PARAMETERS_INCORRECT in questi casi.

Punti minori

  • NormalizeDouble(..., 0) arrotonda la media mobile (MA) a un numero intero, il che distorce la linea sui simboli a basso volume. Non è necessario.
  • Le barre precedenti alle minbars non vengono mai scritte e PLOT_DRAW_BEGIN non è impostato. Impostarlo e inizializzare i buffer in modo che le barre iniziali non mostrino dati errati.
  • La media mobile (MA) può iniziare a MAPeriod - 1, non a MAPeriod. Utilizzare una somma progressiva invece di ricalcolare la somma di 100 barre per ogni nuova barra sarebbe anche più veloce.
  • Le ripetute espressioni ternarie InpVolumeType == VOLUME_TICK ? ... : ... risulterebbero più chiare se raggruppate in un'unica piccola funzione ausiliaria.


    In allegato la versione corretta da Claude e tradotta in inglese. (Clicca su "vai alla discussione" per visualizzare il file)
File: