Programmazione Prorealtime Prorealtime:formule, indicatori, oscillatori, tsi ...

Al di là del discorso specifico (quando avrò tempo magari dirò la mia anche su quello) volevo sottolineare queste parole di Tetsuo che condivido in pieno, soprattutto in periodi di bloghizzazione dei forum ...



Ciao Cammello, grazie del pdf e ringrazio anche max3001 per la segnalazione, putroppo però non ho ancora avuto tempo di guardare bene le cose e quindi vi chiedo collaborazione.

Allora, percentrank non è una funzione ricorsiva. Non mi dilungo qua a spiegare a parole come si calcola, visto che poi parlerà il codice. Non dovrebbe essere troppo difficile da calcolare, abbiamo bisogno come input un array di valori numerici A e un valore v che stia o meno in A. Quindi come in excel la sintassi è Percentrank(A,v).

Ora, nel pdf che hai allegato io mi trovo questo

1300795812percentrank.png


Il nostro array lo costruiamo barra per barra con quella funzione theta, e va bene. Ma poi non capisco assolutamente quella definizione di DVO ... da dove esce quel 252? Guardiamo di default gli ultimi 252 dati dell'array e quindi in questa formula il parametro v non compare? O come da sintassi excel, di default calcoliamo il percentrank di 252? Ma allora in questo caso da dove facciamo partire l'array? Perché allora a seconda del numero di dati a disposizione avremo dei valori di DVO diversi ...

E come è più probabile non ho capito una mazza? :D

Una volta chiarite queste cose non dovrebbe essere troppo difficile implementare la funzione, noiosetto ma non difficile.

:ciao:

Ciao, innanzitutto grazie a te per l'aiuto che dai sempre agli ignoranti come me di linguaggio prorealtime.
Il 252 è la finestra mobile sulla quale vengono calcolati i vari indicatori (in questo caso il dvo) che corrisponde circa ad un anno di borsa.
Io ho capito così....:D.
Max
 
Ultima modifica:
Ciao, innanzitutto grazie a te per l'aiuto che dai sempre agli ignoranti come me di linguaggio prorealtime.
Il 252 è la finestra mobile sulla quale vengono calcolati i vari indicatori (in questo caso il dvo) che corrisponde circa ad un anno di borsa.
Io ho capito così....:D.
Max

Hai sicuramente ragione, mi scuso per la domanda idiota, non avevo capito che dava un default per un grafico daily e io ad arrovellarmi su sto 252 :wall::wall::wall::D

Ok, a risentirci appena posso per il codice ...
 
Ciao Cammello, grazie del pdf e ringrazio anche max3001 per la segnalazione, putroppo però non ho ancora avuto tempo di guardare bene le cose e quindi vi chiedo collaborazione.

Allora, percentrank non è una funzione ricorsiva. Non mi dilungo qua a spiegare a parole come si calcola, visto che poi parlerà il codice. Non dovrebbe essere troppo difficile da calcolare, abbiamo bisogno come input un array di valori numerici A e un valore v che stia o meno in A. Quindi come in excel la sintassi è Percentrank(A,v).

Ora, nel pdf che hai allegato io mi trovo questo

1300795812percentrank.png


Il nostro array lo costruiamo barra per barra con quella funzione theta, e va bene. Ma poi non capisco assolutamente quella definizione di DVO ... da dove esce quel 252? Guardiamo di default gli ultimi 252 dati dell'array e quindi in questa formula il parametro v non compare? O come da sintassi excel, di default calcoliamo il percentrank di 252? Ma allora in questo caso da dove facciamo partire l'array? Perché allora a seconda del numero di dati a disposizione avremo dei valori di DVO diversi ...

E come è più probabile non ho capito una mazza? :D

Una volta chiarite queste cose non dovrebbe essere troppo difficile implementare la funzione, noiosetto ma non difficile.

:ciao:
allego il file xls, fatto sia prendendo gli esempi di Varadi sia altri reperibili ai link messi da Max.
Spero che da qui si capisca come funzica questa parte del TS pubblicato nel pdf.

C
ps: se qualcno sa come togliere quel fastidioso link http che parte all'inzio :bow:
 

Allegati

Il nostro obbiettivo è quindi individuare e misurare due cose il PERIODO del ciclo e la CARATTERISTICA di fase, il tutto partendo da un solo dato il PREZZO
le cui modifiche registriamo ad intervalli ben definiti


Rendiamoci il compito un pochino più semplice e per il momento lasciamo da parte il periodo e concentriamoci su quella che riusciamo ad identificare con il ragionamento come caratteristica di un ciclo.

Un ciclo di mercato per definizione identifica un movimento che parte da un punto arriva ad un picco (minimo o massimo non ci interessa) e torna indietro, quindi possiamo affermare che ogni ciclo presenta la caratteristica alternanza tra una fase positiva ed una fase negativa, riuscirla ad identificare ci fornirà un informazione!

Sin_drawing_process.gif


Abbiamo detto che per ottenere lo scopo abbiamo a disposizione un unico dato il prezzo che noi useremo come segnale per la nostra ricerca.

Il prezzo così come lo rileviamo (indipendentemente dal TF) è difficile da usare come segnale in quanto contiene all'interno mischiato nell'informazione, un sacco di "rumore" (un po' come cercare ti capire qualcuno che ti parla affianco alle cascate del Niagara). il modo più semplice per cercare di eliminare il rumore è trasformare il prezzo nella sua MEDIA MOBILE, il farlo ovviamente non è esente da effetti secondari, nel ridurre il rumore perdiamo anche una parte del segnale utile questo porta ad accumulare un ritardo rispetto al prezzo originario tanto maggiore quanto maggiore sarà il periodo sul quale calcoliamo la media mobile. In analisi tecnica ogni trasformazione del prezzo porta a questa conseguenza e più trasformazioni operiamo e maggiore sarà tale effetto, questo è un concetto da capire molto più importante ed utile di qualsiasi guru-indicatore :up:

Ritorniamo a noi, lo scopo principe di una MM quindi è eliminare il rumore dal prezzo nel PERIODO considerato per il suo calcolo. Quindi se io scelgo come PERIODO della mia MM quella che io suppongo essere la durata del ciclo che sto esaminando elimino dal ciclo tutte le informazioni che vengono date principalmente dallo sviluppo dei cicli di durata inferiore.
Quindi proseguendo per logica e secondo definizione se io misuro la differenza tra il prezzo e la sua media mobile riesco ad estrapolare proprio lo sviluppo ciclico che si genera durante il periodo in esame. Tale misurazione però se ci pensiamo conserva il problema originario ovvero usiamo il prezzo che abbiamo detto non è eccellente come segnale, come si può ovviare??? Nel più banale dei modi usiamo una seconda media mobile ma questa volta la calcoliamo su un periodo pari alla metà della durata del ciclo in esame!!

----Qui ci dovremmo dilungare molto parlando della frattalità ciclica che viene presa come assioma di base di tutta la teoria ed infatti è proprio lì che la teoria mostra le sue falle a mio avviso ----

Metto una semplice immagine ma che ci fa capire meglio di mille parole :D


USD Spot.png



Sopra il prezzo, sotto due medie mobili (in questo caso cerco il ciclo 64 periodi od intermedio quindi la blu è una SMA64 e la rossa una SMA32) ed infine sotto a tutto la differenza tra le due.

Bello il risultato no??? Abbiamo trasformato il prezzo che poco presentava di ciclico fino ad ottenere un risultato che molto si avvicina alla funzione SIN(X) e che ci fornisce molte più informazioni di prima. Per farlo abbiamo usato la testa e 2 strumenti di base dell'AT una è la SMA e il secondo è in pratica un MACD più semplice a molti noto anche come ELLIOTT OSCILLATOR

LiFibonacciTua ha scritto:
Per quanto riguarda il famoso indicatore, ad occhio il Velo Smooth a me sembra un Elliot Wave Osc con delle medie piu' lunghe del solito

L'occhio di Fibo a quanto pare aveva colto ad intuito qualcosina :D


continua.....
 
Ultima modifica di un moderatore:
allego il file xls, fatto sia prendendo gli esempi di Varadi sia altri reperibili ai link messi da Max.
Spero che da qui si capisca come funzica questa parte del TS pubblicato nel pdf.

C
ps: se qualcno sa come togliere quel fastidioso link http che parte all'inzio :bow:

Ho guardato solo la parte del calcolo del DVO che finalmente mi ha chiarito tutto e mi ha anche evitato la parte noiosetta, visto che quando calcoliamo Percentrank(A,v) di un valore v presente in A (ed è questo il caso visto che v è il valore di theta nella barra in esame e A sono gli ultimi M valori di theta), esso non è altro che

numero di valori in A inferiori a v / (numero di valori in A inferiori a v + numero di valori in A superiori a v)

I codici li ho scritti di fretta, spero di non aver fatto quazzate.
Prima di tutto la theta, che ho chiamato Theta DVO, ho preso le stesse variabili del pdf, quindi wo,w1,w2,w3,s0,s1,s2,s3,s4,n. Ovviamente mi potevo evitare due variabili nei pesi ma ho preferito metterle tutte per chiarezza. Valori di default w0 = w1 = s0 = s1 = 0,5, n = 5, tutti gli altri 0. Poi non mi è venuta idea migliore di scrivermi l'espressione per esteso a seconda del fattore di lisciamento :wall::wall::wall: ma vabbé voi fate copia e incolla :D

Codice:
Rem Theta DVO

if w0+w1+w2+w3 <>1 or (n =1 and s0 <>1) or (n=2 and s0+s1<>1) or (n=3 and s0+s1+s2<>1) or (n=4 and s0+s1+s2+s3<>1) or (n=5 and s0+s1+s2+s3+s4<>1) or n > 5 then
    ind = undefined
elsif n = 1 then
    ind = close/(high*w0+low*w1+open*w2+close*w3)
elsif n = 2 then
    ind =  close/(high*w0+low*w1+open*w2+close*w3)*s0 + (close[1]/(high[1]*w0+low[1]*w1+open[1]*w2+close[1]*w3))*s1
elsif n = 3 then
    ind =  close/(high*w0+low*w1+open*w2+close*w3)*s0 + (close[1]/(high[1]*w0+low[1]*w1+open[1]*w2+close[1]*w3))*s1 + (close[2]/(high[2]*w0+low[2]*w1+open[2]*w2+close[2]*w3))*s2
elsif n = 4 then
    ind =  close/(high*w0+low*w1+open*w2+close*w3)*s0 + (close[1]/(high[1]*w0+low[1]*w1+open[1]*w2+close[1]*w3))*s1 + (close[2]/(high[2]*w0+low[2]*w1+open[2]*w2+close[2]*w3))*s2 + (close[3]/(high[3]*w0+low[3]*w1+open[3]*w2+close[3]*w3))*s3
elsif n = 5 then
    ind =  close/(high*w0+low*w1+open*w2+close*w3)*s0 + (close[1]/(high[1]*w0+low[1]*w1+open[1]*w2+close[1]*w3))*s1 + (close[2]/(high[2]*w0+low[2]*w1+open[2]*w2+close[2]*w3))*s2 + (close[3]/(high[3]*w0+low[3]*w1+open[3]*w2+close[3]*w3))*s3 + (close[4]/(high[4]*w0+low[4]*w1+open[4]*w2+close[4]*w3))*s4
endif

return ind
Fatto questo il codice del DVO è il seguente, stesse variabili di prima (nello stesso ordine!) visto che richiamiamo la Theta DVO e poi aggiungiamo anche la variabile m che è la nostra finestra, valore di default 252. Ci ho aggiunto poi una linea di ipervenduto a 0,4 e una di ipercomprato a 0,7, chi vuole le cambi nel codice, non li ho messi come variabile per non appesantire ulteriormente.

Codice:
REM DVO

theta = CALL "Theta DVO"[w0 ,w1 ,w2 ,w3 ,s0 ,s1 ,s2 ,s3 ,s4 ,n]
sup = 0
inf = 0

if barindex < m - 1 then
    ind = undefined
else
    for i = 1 to m - 1  do
        if theta[i] > theta then
            sup = sup + 1
        elsif theta[i] < theta then
            inf = inf+1
        endif
    next
    
    ind = inf/(inf+sup)
endif

ipervenduto = 0.4
ipercomprato = 0.7


return ind as "DVO", ipervenduto as "ipervenduto", ipercomprato as "ipercomprato"
Il risultato è una cosa del genere :ciao:
1300915466estx50eurprice.png
 
Innanzi tutto grazie ancora per il tempo che hai dedicato per risolvere il problema. :bow::bow::bow: L'uso che ne voglio fare è quello traslarlo indietro di 1/2 barre per cercare di anticipare una possibile inversione del trend.

Ed eccomi finalmente a rispondere a Clic.
Sulla possibilità di traslare il sar ci ho messo una pietra sopra, non ho ben capito se per mia incapacità o per limiti del ProBuilder, ma non sono riuscito a risolvere. Ti propongo un alternativa che comunque potrebbe essere utile per l'uso che ne volevi fare.

Allora, prima di tutto metto un codice più carino per la traslazione.
Il codice originario (insieme alle indicazioni per usare tale codice, e soprattutto ai suoi limiti) lo trovate qui. Come vedete quel codice trasla solo il close, chiamiamolo traslazione C. Ora facciamo altri tre codici, dove al posto del close sostituiamo l'open, l'high, il low, e li chiamiamo con poca fantasia traslazione O, traslazione H, traslazione L.

Poi mettiamo questo codice, con variabili indietro e numbarre che hanno lo stesso significato che hanno nei codici di traslazione.

Codice:
traslazioneopen = CALL "traslazione O"[indietro ,numbarre]
traslazionehigh = CALL "traslazione H"[indietro ,numbarre]
traslazionelow = CALL "traslazione L"[indietro ,numbarre]
traslazioneclose = CALL "traslazione C"[indietro ,numbarre]

c = traslazioneclose - traslazioneopen

r=(traslazionehigh-traslazionelow)/29
b1=traslazionelow
b2=b1+r
b3=b2+r
b4=b3+r
b5=b4+r
b6=b5+r
b7=b6+r
b8=b7+r
b9=b8+r
b10=b9+r
b11=b10+r
b12=b11+r
b13=b12+r
b14=b13+r
b15=b14+r
b16=b15+r
b17=b16+r
b18=b17+r
b19=b18+r
b20=b19+r
b21=b20+r
b22=b21+r
b23=b22+r
b24=b23+r
b25=b24+r
b26=b25+r
b27=b26+r
b28=b27+r
b29=b28+r
b30=traslazionehigh

return b30 coloured by c as "High", b1 coloured by c as "Low", b2 coloured by c,b3 coloured by c,b4 coloured by c,b5 coloured by c,b6 coloured by c,b7 coloured by c,b8 coloured by c,b9 coloured by c,b10 coloured by c,b11 coloured by c,b12 coloured by c,b13 coloured by c,b14 coloured by c,b15 coloured by c,b16 coloured by c,b17 coloured by c,b18 coloured by c,b19 coloured by c,b20 coloured by c,b21 coloured by c,b22 coloured by c,b23 coloured by c,b24 coloured by c,b25 coloured by c,b26 coloured by c,b27 coloured by c,b28 coloured by c,b29 coloured by c
Con santa pazienza, selezioniamo per ogni indicatore (da fare 31 volte :eek:) colori per rialzo e ribasso, spessore massimo e stile a punti. Quello che si ottiene è la traslazione di barre HL con colorazione data al solito dalla differenza da close e open

1300922049estoxx50full0611future.png



Ora, avevo già prodotto qui il codice esplicito del Parabolic SAR, rimando a quello per le variabili, adesso lo modifico per farmi restituire oltre al sar anche ep e af (extreme price e acceleration factor a quanto ricordo dal libro di Welles Wilder ...)

Codice:
REM Codice esplicto SAR

if barindex = 0 then
    ww = low
elsif barindex = 1  then
    if low >= low[1] then
        ww = ww[1]
        ep = Max(high,high[1])
    else
        ww = high[1]
        ep = low
        colore = -1
        af = valiniziale
    endif
elsif barindex = 2 and ww[1] = ww[2] then
    af = valiniziale
    if low >= ww[1] then
        ww = ww[1]
        ep = Max(high,ep[1])
        colore = 1
    else
        ww = ep[1]
        ep = low
        colore = -1
    endif
else
    ww = ww[1] + af[1]*(ep - ww[1])
    if colore = 1 then
        if ww > low[1]or ww > low[2] then
            ww = Min(low[1],low[2])
        endif
        if low < ww then
            ww = ep
            ep = low
            af = valiniziale
            colore = -1
        elsif high > ep then
            ep = high
            af = Min (af[1]+step,valmax)
        endif
    else
        if ww < high[1]or ww < high[2] then
            ww = Max(high[1],high[2])
        endif
        if high > ww then
            ww = ep
            ep = high
            af = valiniziale
            colore = 1
        elsif low < ep then
            ep = low
            af = Min (af[1]+step,valmax)
        endif
    endif
endif

return ww as "valoresar",ep as "ep",af as "af"
continua ...
 
Arrivo adesso al codice centrale, e cioè qualcosa che possa servire per capire quando invertirà il SAR. Lo chiamo SAR traslato :rolleyes:

Codice:
if barindex < numbarre - indietro then
    ind = undefined
else
    ind = valoresar + af*(ep - valoresar)*(barindex - numbarre + indietro)
endif

return ind
Variabili da inserire indietro,numbarre,valoresar,ep,af.
Che valori dobbiamo inserire per queste variabili? Ovviamente l'indietro e il numbarre che abbiamo usato per la traslazione, e poi il valore del sar, l'ep e l'af che assume sull'ultima barra il codice esplicito del SAR. Spero che questa immagine chiarisca cosa intendo, nella finestra sotto c'è il codice esplicito del SAR

1300922851sar2.png


Il SAR traslato è una retta proiettata nel futuro, praticamente tangente alla parabola disegnata dal SAR. Rappresenta l'evoluzione che avrebbe il SAR a prezzi costanti, fino a quando tale retta incoccia i prezzi.

Tutta sta fatica per trovare sta schifezzina

1300922967sar3.png


ma la cosa non stupisce, visto che (come si vedeva nel grafico del post precedente) il SAR ha appena invertito, e quindi il suo fattore di accelerazione è ancora fermo al valore minimo (e quindi la retta risulta poco inclinata). Torniamo però indietro al 21 marzo, quando il SAR era ancora sopra i prezzi, e plottiamo la nostra retta

1300923580sar1.png


La retta ci faceva vedere che o si facevano max decrescenti, o il sar avrebbe invertito entro 2 giorni, dandoci giorno per giorno i livelli di inversione. Ed infatti il giorno dopo il max incoccia la retta, e il SAR inverte

1300923627sar.png


Il discorso è un po' grossolano perché il SAR ha un'eccezione nella sua costruzione che potrebbe non portarlo ad invertire, ma diciamo che in linea di massima quella retta può dare qualche indicazione. Chiarmente i parametri di tale SAR traslato sono da aggiornare barra dopo barra, secondo quanto ci restituisce il nostro codice esplicito del SAR per i valori del sar, di extreme price e di acceleration factor.

E adesso me ne vado a dormire, ma un pochino di musica direi che posso permettermi di metterla no? ;)

[ame="http://www.youtube.com/watch?v=q5XJhzPwxmg"]YouTube - Autechre-Pir[/ame]
 

Users who are viewing this thread

Back
Alto