INDICATORE “CHOPPY”

Viewing 6 posts - 1 through 6 (of 6 total)
  • Author
    Posts
  • #251065 quote
    brian gilbertbrian gilbert
    Participant
    Senior

    Salve a tutti, ho trovato in rete un indicatore di tendenza chiamato “Choppiness” o “Choppy” che riporto qui sotto:

    100 * LOG10( SUM(ATR(1), n) / ( MaxHi(n) - MinLo(n) ) ) / LOG10(n)
    
    n = periodo definito dall'utente
    LOG10(n) = logaritmo base-10 di n
    ATR(1) = Average True Range (con periodo 1)
    SUM(ATR(1), n) = Somma dell'Average True Range per le n barre passare MaxHi(n) = il massimo più alto della serie in esame

    Poichè sono poco pratico di programmazione non sono riuscito a tradurlo in linguaggio Prorealtime; c’è qualcuno che potrebbe darmi una mano?  Inoltre, visto che faccio operazioni intraday sul Dax, se è possibile vorrei che l’indicatore NON tenesse conto del gap notturno (che se significativo “sballa” tutti i valori degli indicatori) e iniziasse a elaborare i suoi valori con l’apertura giornaliera.

    Grazie in anticipo per il vostro aiuto.

    Paolo Bonsanti

     

     

    
    
            
            
        
    #251073 quote
    Iván GonzálezIván González
    Moderator
    Legend

    ecco:

    n=10
    atr1=averagetruerange[1](close)
    sumAtr=summation[n](atr1)
    maxhin=highest[n](high)
    minlon=lowest[n](low)
    
    chopi = 100*log(sumAtr)/(maxhin-minlon)/log(n)
    
    return chopi
    
    robertogozzi and brian gilbert thanked this post
    #251075 quote
    JSJS
    Participant
    Master

    Penso che l’idea sia quella di prendere il logaritmo del “rapporto” e non solo del “percorso”…

    chopi = 100*log((sumAtr)/(maxhin-minlon))/log(n)

    Iván González and brian gilbert thanked this post
    #251076 quote
    Iván GonzálezIván González
    Moderator
    Legend

    Leggendo di nuovo il tuo messaggio ora vedo che non ho tenuto conto dei gap di apertura. Ho modificato il codice e nel frattempo ho effettuato i calcoli con i logaritmi in base 10.

    // --- INPUTS
    n = 10
    
    // --- DAILY RESET
    ONCE idx = 0
    IF intradaybarindex = 0 THEN
       UnSet($tr)
       UnSet($hi)
       UnSet($lo)
       idx = 0
    ENDIF
    
    // --- TRUE RANGE
    trClassic = MAX(high - low, MAX(ABS(high - close[1]), ABS(low - close[1])))
    
    IF intradaybarindex = 0 THEN
       trBar = high - low
    ELSE
       trBar = trClassic
    ENDIF
    
    $tr[idx] = trBar
    $hi[idx] = high
    $lo[idx] = low
    idx = idx + 1
    
    cnt = MIN(idx, n)
    
    sumTR = 0
    
    IF cnt > 0 THEN
       
       hh = $hi[idx - 1]
       ll = $lo[idx - 1]
       
       FOR k = 0 TO cnt - 1 DO
          j = idx - 1 - k
          sumTR = sumTR + $tr[j]
          IF $hi[j] > hh THEN
             hh = $hi[j]
          ENDIF
          IF $lo[j] < ll THEN
             ll = $lo[j]
          ENDIF
       NEXT
       
       rango = hh - ll
       
       // --- CHOPPINESS ---
       IF cnt >= n AND rango > 0 AND n > 1 THEN
          chopi = 100 * ( LOG(sumTR / rango) / LOG(10) ) / ( LOG(n) / LOG(10) )
       ELSE
          chopi = chopi
       ENDIF
    ELSE
       chopi = 0
    ENDIF
    
    RETURN chopi COLOURED(0,0,255) AS "Choppiness (without open gap)"
    
    JS, robertogozzi and brian gilbert thanked this post
    #251081 quote
    JSJS
    Participant
    Master

    Questo è un indicatore interessante e utile, che merita una spiegazione più approfondita…

    Con AverageTrueRange[1](Close) si misura la volatilità per barra (inclusi i gap)…

    Con Summation[n](ATR1) si somma tale volatilità per ottenere il percorso “tortuoso” compiuto dal prezzo…

    Con Highest[n](High) - Lowest[n](Low) si misura il percorso rettilineo (netto) nello stesso intervallo…

    Il rapporto è quindi: percorso tortuoso ÷ percorso rettilineo

    Applicando il logaritmo a questo rapporto (e normalizzandolo rispetto a n) si ottiene una scala stabilizzata…

    L’indicatore Choppy, su una scala 0–100, mostra quanto il movimento sia “tortuoso”: valori bassi indicano un movimento relativamente rettilineo (spesso di trend), mentre valori più alti segnalano una dinamica più laterale/rumorosa…

    Nell’ultima versione il gap overnight non è considerato (ancora un ottimo contributo di Iván)…

    Iván González and brian gilbert thanked this post
    #251166 quote
    brian gilbertbrian gilbert
    Participant
    Senior

    Grazie mille a tutti, siete bravissimi!!!

    JS thanked this post
Viewing 6 posts - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.
ProRealAI ProRealAI New

Stuck on this ProBuilder code?

Describe what this topic is trying to build, in plain English, and ProRealAI writes the ProRealTime™ indicator, screener or system for you.

Available in 7 languages
Try ProRealAI

INDICATORE “CHOPPY”


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
Summary

This topic contains 5 replies,
has 3 voices, and was last updated by brian gilbertbrian gilbert
1 year ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 09/17/2025
Status: Active
Attachments: No files
ProRealCode ProRealCode
Loading...