Donchian Regressione: condivisione e richiesta di miglioramenti

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #234961 quote
    davidelaferla
    Participant
    Average

    Buongiorno a tutti,

    vorrei condividere con voi il mio indicatore Donchian Regression, che calcola la massima e la minima regressione lineare del periodo tra tre regressioni lineari (applicate a close, high, e low). Può essere utile per chi vuole individuare un trend in base al periodo scelto. Lo sfondo si colora di verde o di rosso a seconda che la differenza tra maxregression corrente e precedente sommata a minregression corrente e precendente , da un valore superiore o inferiore a 0. E’ possibile anche immettere dei valori esempio a scelta di close e volendo anche di high e low, per trovare ad esempio il livello di prezzo limite oltre il quale il colore cambia.

    Ecco il codice in questione:

    periodo=3  // Periodo della regressione lineare
    nclose=1   // Prezzo che è possibile modificare
    n=100      // Barra in cui è applicato il prezzo modificato
    x=0        // per x=0 è visibile nclose e la linea di barra 
    
    period = max(3,periodo)
    
    if x=0 then
    DRAWVLINE(n) //Segna la barra modificata, indicata da n
    DRAWHLINE(nclose)// Segna il prezzo modificato, indicato da nclose
    endif
    
    // Inizializzazione delle variabili
    nclose = nclose // Il valore di chiusura per la candela n
    nhigh = nclose // Il valore massimo per la candela n
    nlow = nclose // Il valore minimo per la candela n
    
    maxregression = 0
    minregression = 100000
    aMax = 0
    aMin = 0
    // Inizializzazione delle variabili
    closemod = 0
    highmod = 0
    lowmod = 0
    
    // Modifica della candela n
    if barssince(barindex-n) then
    closemod = nclose
    highmod = nhigh
    lowmod = nlow
    openmod=nclose
    else
    closemod = close
    highmod = high
    lowmod = low
    openmod=open
    endif
    
    for i = 3 to period
    // Calcola il valore corrente della regressione lineare
    currentregression = linearregression[i](closemod)
    // Calcola il valore corrente della regressione lineare per i minimi
    lowregression = linearregression[i](lowmod)
        
    // Calcola il valore corrente della regressione lineare per i massimi
    highregression = linearregression[i](highmod)
        
    // Trova il massimo tra i valori di regressione correnti
    maxregression = max(maxregression, max(currentregression,lowregression))
        
    // Trova il minimo tra i valori di regressione correnti
    minregression = min(minregression, min(currentregression,maxregression))
    
    next
    
    tot=(maxregression-maxregression[1])+(minregression-minregression[1])
    
    // Output della soglia superata
    media=(maxregression+minregression)/2
    
    if tot>0 then
    signal=1
    r=0
    g=255
    b=0
    elsif tot<0 then
    signal=-1
    r=255
    g=0
    b=0
    endif
    
    BACKGROUNDCOLOR(r,g,b,50)
    return (maxregression) as "Max Regression4", (minregression) as "Min Regression4", tot as "tot"

    Vorrei aggiungere un calcolo automatico del livello di prezzo limite in cui tot cambia segno e quindi fa cambiare il colore alla candela . Ho provato a usare i cicli for e next richiamando l’indicatore con la funzione call , ma il calcolo è troppo lento e inoltre non sono riuscito a calcolarlo oltre alla candela n e senza impostare una quantità di pips fissa sopra e sotto open . Sarebbe utile calcolarlo per un tot di candele precedenti a n . Ecco il codice dell’indicatore :

    pips=100 //range di pips entro cui cercare il livello di cambio colore
    nbar=550 //barra in cui cercare il livello di cambio colore 
    x=0
    p=3
    p=max(p,3)
    y=close
    myMaxRegression4, myMinRegression4, mytot4 = CALL "Donchian Regressione(5)"[p, 1, y, nbar, 1]
    if x=0 then
    drawvline(nbar)
    endif
    zero = close // inizializzo la variabile zero
    t=-mytot4
    if mytot4 > 0 then
    for i = 1 to pips
    nclose1 = y - (i * pipsize)
    nclose2=y-((i-1)*pipsize)
    myMaxRegression, myMinRegression, mytot = CALL "Donchian Regressione(3)"[p, 1, nclose1, nbar, 1]
    myMaxRegression4, myMinRegression4, mytot4 = CALL "Donchian Regressione(5)"[p, 1, nclose2, nbar, 1]
    if (nclose1 < y and mytot<0) and (nclose1<nclose2 and mytot4>0) then
    zero = nclose1
    break
    endif
    next
    else
    for i = 1 to pips
    nclose1 = y + (i * pipsize)
    nclose2=y+((i-1)*pipsize)
    myMaxRegression, myMinRegression, mytot = CALL "Donchian Regressione(3)"[p, 1, nclose1, nbar, 1]
    myMaxRegression4, myMinRegression4, mytot4 = CALL "Donchian Regressione(5)"[p, 1, nclose2, nbar, 1]
    if (nclose1 > y and mytot>0) and (nclose1>nclose2 and mytot4<0) then
    zero = nclose1
    break
    endif
    next
    endif
    return zero as "zero"

    Ringrazio in anticipo tutti quelli che vorranno partecipare a questa mia piccola creazione.

    JS thanked this post
    #235731 quote
    robertogozzi
    Moderator
    Master

    In realtà non c’è bisogno di nessun ciclo, basta verificarlo di volta in volta.

    Si ha un cambiamento di colore quando la variabile “r” assume un valore diverso dal precedente (avrei potuto usare la variabile “g“, è indifferente).

    Stampa ciascun prezzo sul grafico:

    periodo=3  // Periodo della regressione lineare
    nclose=1   // Prezzo che è possibile modificare
    n=100      // Barra in cui è applicato il prezzo modificato
    x=0        // per x=0 è visibile nclose e la linea di barra
     
    period = max(3,periodo)
     
    if x=0 then
    DRAWVLINE(n) //Segna la barra modificata, indicata da n
    DRAWHLINE(nclose)// Segna il prezzo modificato, indicato da nclose
    endif
     
    // Inizializzazione delle variabili
    nclose = nclose // Il valore di chiusura per la candela n
    nhigh = nclose // Il valore massimo per la candela n
    nlow = nclose // Il valore minimo per la candela n
     
    maxregression = 0
    minregression = 100000
    aMax = 0
    aMin = 0
    // Inizializzazione delle variabili
    closemod = 0
    highmod = 0
    lowmod = 0
     
    // Modifica della candela n
    if barssince(barindex-n) then
    closemod = nclose
    highmod = nhigh
    lowmod = nlow
    openmod=nclose
    else
    closemod = close
    highmod = high
    lowmod = low
    openmod=open
    endif
     
    for i = 3 to period
    // Calcola il valore corrente della regressione lineare
    currentregression = linearregression[i](closemod)
    // Calcola il valore corrente della regressione lineare per i minimi
    lowregression = linearregression[i](lowmod)
        
    // Calcola il valore corrente della regressione lineare per i massimi
    highregression = linearregression[i](highmod)
        
    // Trova il massimo tra i valori di regressione correnti
    maxregression = max(maxregression, max(currentregression,lowregression))
        
    // Trova il minimo tra i valori di regressione correnti
    minregression = min(minregression, min(currentregression,maxregression))
     
    next
     
    tot=(maxregression-maxregression[1])+(minregression-minregression[1])
     
    // Output della soglia superata
    media=(maxregression+minregression)/2
     
    if tot>0 then
    signal=1
    r=0
    g=255
    b=0
    elsif tot<0 then
    signal=-1
    r=255
    g=0
    b=0
    endif
    
    BACKGROUNDCOLOR(r,g,b,50)
    
    IF r <> r[1] THEN
    Prezzo = tot
    Barra  = BarIndex
    Offset = high + range
    drawtext("#Prezzo#",Barra,Offset)
    ENDIF
    
    return (maxregression) as "Max Regression4", (minregression) as "Min Regression4", tot as "tot"

    ho aggiunto le righe tra BACKGROUNDCOLOR e RETURN.

Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.

Donchian Regressione: condivisione e richiesta di miglioramenti


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
Summary

This topic contains 1 reply,
has 2 voices, and was last updated by robertogozzi
1 year, 6 months ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 07/08/2024
Status: Active
Attachments: 1 files
Logo Logo
Loading...