Punti di swing statici

Viewing 15 posts - 1 through 15 (of 21 total)
  • Author
    Posts
  • #19878 quote
    Rorschack
    Participant
    Junior

    Salve,

    avrei bisogno di qualche suggerimento per poter creare un indicatore che riesca a disegnare le linee di swing come nello screenshot allegato. Ho creato una versione che disegna le linee in base a minimi e massimi precedenti ma non riesco a capire come faccio a prendere in considerazione solo un determinato periodo storico ( numero di candele ) e come faccio a disegnare una linea solo se il minimo/massimo è stato rimbalzato/respinto più di una volta, nell’intervallo di n candele.

    Spero qualcuno possa aiutarmi! Grazie

    ALE thanked this post
    #19881 quote
    Rorschack
    Participant
    Junior

    … in pratica quello che sto cercando è l’algoritmo che ProRealTrend usa per tracciare le linee orizzontali solo che con una “densità” molto superiore.

    #20067 quote
    Nicolas
    Keymaster
    Master

    Questo è un indicatore interessante e sono abbastanza sicuro che un sacco di gente sarà felice di usare e contribuire a migliorarla. Sembra che si è già fatto il codice per disegnare queste linee sul grafico? Al fine di aiutare voi, vi preghiamo di condividere il codice qui e saremo in grado di modificare di conseguenza agli ultimi periodi X.

    Circa i rimbalzi sul livello dei prezzi, è un po ‘più difficile, ho avuto le idee per recuperarli però .. vedremo.

    #20099 quote
    ALE
    Moderator
    Master

    @RORSCHACK

    CIAO,

    GRAZIE PER AVER INIZIATO QUESTA DISCUSSIONE, L’INDICATORE CHE STAI CERCANDO DI CREARE PERMETTEREBBE DI SVILUPPARE MOLTE STRATEGIE, E MOLTO INTERESSANTE.

    QUALCHE TEMPO FA’ AVEVO PROVATO MA NON CI ERO RIUSCITO, POTRESTI CONDIVIDERLO?

    GRAZIE

    ALE

    #20140 quote
    Rorschack
    Participant
    Junior

    In effetti anch’io ho delle strategie profittevoli e semplici che vorrei automatizzare, che però necessitano di questi punti di swing statici. Per poterle automatizzare, ho bisogno di creare questo indicatore.

    Premetto che non ho molto esperienza nella programmazione con PRT ed il codice che sto postando è un po pesante e non è proprio pulito ma facendo varie prove ho visto che le linee che io individuo manualmente, vengono individuate anche dall’indicatore. Il problema è che andrebbero filtrate ulteriormente.

    Allora, il codice che è questo:

    //vars
    //n = 21 // periodo per calcolare i massimi ed i minimi precedenti
    //tolleranza = 10 // (dovrebbe essere espresso in punti )se ci sono due (o più) linee che sono vicine allora mi devi disegnare una linea media
    //lisciatura = 13
    DEFPARAM CalculateOnLastBars = 350 //per il calcolo delle swing lines prendiamo in considerazione solamente le ultime X candele
    once linear = 0
    once lineas = 0
    once newlinear = 0
    once newlineas = 0
    once newlinearr = 0
    once newlineass = 0
    
    resistenze = highest[n]((close+high)/2) // resistenze ( massimi precedenti dove i prezzi sono stati respinti)
    supporti = lowest[n]((close+low)/2) // supporti ( minimi precedenti dove i prezzi sono stati rimbalzati)
    
    if resistenze[n-lisciatura] = resistenze[1] then
    linear = (resistenze[1] + linear) / 2
    else
    linear = linear
    endif
    //drawhline(linear) coloured(255,0,0)
    
    if supporti[n-lisciatura] = supporti[1] then
    lineas = (supporti[1] + lineas) / 2
    else
    lineas = lineas
    endif
    //drawhline(lineas) coloured(0,255,0)
    
    if linear[2] = linear[1] and linear[1] = linear then
    //drawhline(linear) coloured(255,0,0)
    newlinear = linear
    endif
    
    if lineas[2] = lineas[1] and lineas[1] = lineas then
    //drawhline(lineas) coloured(0,255,0)
    newlineas = lineas
    endif
    
    i = 0
    valsup = newlinear + tolleranza
    valinf = newlinear - tolleranza
    
    while i <> 350 do
    if newlinear[i] = 0 then//aiuta ad accorciare il ciclo
    break
    endif
    cond = (newlinear[i] <= valsup and newlinear[i] >= valinf) or (newlineas[i] <= valsup and newlineas[i] >= valinf)
    if cond then
    newlinearr = (newlinear[i] + newlinear)/2
    endif
    i = i+1
    wend
    
    i = 0
    valsup = newlineas + tolleranza
    valinf = newlineas - tolleranza
    
    while i <> 350 do
    if newlineas[i] = 0 then//aiuta ad accorciare il ciclo
    break
    endif
    cond = (newlineas[i] <= valsup and newlineas[i] >= valinf) or (newlinear[i] <= valsup and newlinear[i] >= valinf)
    if cond then
    newlineass = (newlineas[i] + newlineas)/2
    endif
    i = i+1
    wend
    
    drawhline(newlinearr) coloured(0,125,255)
    drawhline(newlineass) coloured(0,125,255)
    
    return  newlinearr as "R", newlineass as "S"
    #20141 quote
    Rorschack
    Participant
    Junior

    La variabile “tolleranza” dovrebbe essere espressa in pips anzichè in dollari o qualunque sia la valuta utilizzata. Qualcuno sa come si può fare?

    Le mie prove le sto facendo sul grafico del Caffè (KC) per comodità.

    Come si può vedere nello screenshot l’indicatore genera le linee blu mentre quelle viola sono state tracciate manualmente.

    #20161 quote
    DANY
    Participant
    Senior

    Ciao,

    l’idea di base è ottima e inizio a lavorarci anch’io !!! E’ da qualche settimana che ci stavo pensando ….

    Sarebbe già un’ottimo risultato riuscire ad ottenere gli stessi swing di PRT su diversi strumenti e TF; poi dovremmo capire sino a quale livello di densità vuoi scendere xchè i supporti e resistenze a volte possono essere un po’ troppo soggettivi e personalizzabili.

    dovremmo impostare il codice in modo da parametrizzare il livello di densità desiderato.

    per la variabile tolleranza, se ho capito bene, dovrebbe essere sufficiente utilizzare il pipsize per esprimerla in punti… poi puoi calcolare una percentuale di tolleranza o semplicemente moltiplicare il pipsize per “x” punti.

    Ciao.

    ALE thanked this post
    #20167 quote
    Nicolas
    Keymaster
    Master

    Grazie per l’invio del codice. Devo ammettere che sono davvero impressionato dal risultato del vostro indicatore! Ben fatto, davvero un buon lavoro!
    A proposito di renderlo “universale” per qualsiasi strumento, è necessario modificare il codice come nella schermata allegata.

    #20182 quote
    Rorschack
    Participant
    Junior

    Grazie Dany, grazie Nicolas! Per essere una prima versione in effetti i risultati non sono male.

    Le tre variabili servono infatti per parametrizzare la “densità” di PRT.

    Un’altra idea è quella di filtrare ulteriormente le linee disegnate in base a due o tre tf superiori. Ovvero se le linee coincidono (oppure si avvicinano con una tolleranza definita dalla variabile) su tf superiori allora vanno disegnate altrimenti no. L’unica preoccupazione è per la “pesantezza” dell’algoritmo quindi per i tempi di calcolo.

    To be continued …. 🙂

    #20208 quote
    Nicolas
    Keymaster
    Master

    Sono interessato a questo progetto e realtà sto lavorando su di esso. Scusate se ho perso qualcosa, ma io continuo a non capire chiaramente qual è lo scopo esatto di questo calcolo:

    (resistance[1] + linear) / 2


    Cosa stai prendendo il valore lineare precedente in considerazione?
    Parli inglese?

    #20224 quote
    Nicolas
    Keymaster
    Master

    Ho modificato il codice un po ‘(da tradurre in inglese i parametri per la mia comprensione) e il testo aggiunto di sapere quando e dove i livelli di supporto e resistenza di prezzo dove trovano e tirato. Non esitate a correggere il codice se sbaglio! 🙂

    DEFPARAM CalculateOnLastBars = 350 // To calculate the lines swing we take into consideration only the latest X candles
    
    n = 20 // highest and lowest period for support/resistance fetch
    tolerance = 5 // should be expressed in points) if there are two (or more) lines that are close to me, then you have to draw a center line
    lookback = 10 // period lookback to confirm support and resistance areas
    showSupport = 1//(0=false , 1=true)
    showResistance = 1 //(0=false , 1=true)
    
    once linear = 0
    once lineas = 0
    once newlinear = 0
    once newlineas = 0
    once newlinearr = 0
    once newlineass = 0
    
    if showResistance then
    resistance = highest[n](high) // resistance ( massimi precedenti dove i prezzi sono stati respinti)
    
    if resistance[n-lookback] = resistance[1] then
    linear = (resistance[1] + linear) / 2
    else
    linear = linear
    endif
    
    if linear[2] = linear[1] and linear[1] = linear then
    newlinear = linear
    endif
    
    i = 0
    valsup = newlinear + tolerance*pointsize
    valinf = newlinear - tolerance*pointsize
    
    while i <> 350 do
    if newlinear[i] = 0 then//aiuta ad accorciare il ciclo
    break
    endif
    cond = (newlinear[i] <= valsup and newlinear[i] >= valinf) or (newlineas[i] <= valsup and newlineas[i] >= valinf)
    if cond then
    newlinearr = (newlinear[i] + newlinear)/2
    savedbar = barindex//[i]
    endif
    i = i+1
    wend
    
    drawhline(newlinearr) coloured(0,125,255)
    if newlinearr<>oldtextr then
    drawtext("▼ #newlinearr#",savedbar,newlinearr)
    oldtextr=newlinearr
    endif
    endif
    
    if showSupport then
    support = lowest[n](low) // support ( minimi precedenti dove i prezzi sono stati rimbalzati)
    
    if support[n-lookback] = support[1] then
    lineas = (support[1] + lineas) / 2
    else
    lineas = lineas
    endif
    
    if lineas[2] = lineas[1] and lineas[1] = lineas then
    newlineas = lineas
    endif
    
    i = 0
    valsup = newlineas + tolerance*pointsize
    valinf = newlineas - tolerance*pointsize
    
    while i <> 350 do
    if newlineas[i] = 0 then//aiuta ad accorciare il ciclo
    break
    endif
    cond = (newlineas[i] <= valsup and newlineas[i] >= valinf) or (newlinear[i] <= valsup and newlinear[i] >= valinf)
    if cond then
    newlineass = (newlineas[i] + newlineas)/2
    savedbar = barindex[i]
    endif
    i = i+1
    wend
    
    drawhline(newlineass) coloured(0,125,255)
    if newlinearr<>oldtexts then
    drawtext("▲ #newlineass#",savedbar,newlineass)
    oldtexts=newlineass
    endif
    endif
    
    RETURN
    #20238 quote
    DANY
    Participant
    Senior

    Great Nicolas, very very good job !!

    And thanks to Rorschack too!

    #20240 quote
    Rorschack
    Participant
    Junior

    Yes, Nicolas, I do speak a little bit of english, in fact I tried to post this on the english forum as well but for some reason it didn’t work out.

    So my idea was to calculate these lines starting from the lows and the highs calculated on the shadows and not on the highest/lowest price.The problem is that not all the highs/lows represent an important swing line so I have to reduce the number of those lines. The purpose of this code:

    if resistance[n-lookback] = resistance[1] then
    linear = (resistance[1] + linear) / 2
    else
    linear = linear
    endif

    is to make the indicator smoother. The variable that you called “lookback” acts more like a smoothing factor.

    I would say that so far the indicator looks pretty good even though the algorithm is a bit heavy (I’m not much of an expert with PRT code). What I would like to do now is filter these lines based on other lines drawn on bigger time frames. I already have some ideas but it would get much much heavier.

    Any idea on how to do that or to improve this algorithm?

    Thank you for your time!

    #20248 quote
    ALE
    Moderator
    Master

    @Roroschack
    Ciao
    mi puoi spiegare la logica della variabile lockback?

    Grazie

    #20257 quote
    Rorschack
    Participant
    Junior

    Nella versione in italiano, postata all’inizio, “lookback” l’ho chiamata “lisciatura”. Il nome spiega tutto.

    Lo scopo principale dell’indicatore non è quello di “disegnare” le righe ma di rendere quei valori accessibili ad un eventuale programma e le righe disegnate non lo sono. Cosi come non lo sono le resistenze ed i supporti disegnati da ProReal Trend. Correggetemi se sbaglio.

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

Punti di swing statici


ProBuilder: Indicatori & Strumenti Personalizzati

New Reply
Author
author-avatar
Rorschack @rorshack Participant
Summary

This topic contains 20 replies,
has 4 voices, and was last updated by Rorschack
9 years ago.

Topic Details
Forum: ProBuilder: Indicatori & Strumenti Personalizzati
Language: Italian
Started: 01/04/2017
Status: Active
Attachments: No files
Logo Logo
Loading...