Programmazione Prorealtime Prorealtime:formule, indicatori, oscillatori, tsi ... (1 Viewer)

meursault

lo straniero
Ancora sul Main Trend. Ecco un codice alternativo che lo calcola e che non usa il ciclo for ... next. Sembra funzionare.

Codice:
once flag = -1
once mt = low
once count1 = 1000000
once count2 = 1000000

inside=high<=high[1] and low>=low[1]
aggiornato=0



if flag=1 and high>mt then
    mt=high
    flag=1
    aggiornato=1
    count1 = 0
    count2 = 0
endif

if flag=-1 and low<mt then
    mt=low
    flag=-1
    aggiornato=1
    count1 = 1000000
    count2 = 1000000
endif



if flag=1 and aggiornato=0 and inside=0 then
    if low < count2 then
        mt=low
        flag=-1
        aggiornato=1
        count1 = 1000000
        count2 = 1000000
    else
        if low < count1 then
            count2 = low
        else
            count1 = low
        endif
    endif
endif

if flag=-1 and aggiornato=0 and inside=0 then
    if high > count2 then
        mt=high
        flag=1
        aggiornato=1
        count1 = 0
        count2 = 0
    else
        if high > count1 then
            count2 = high
        else
            count1 = high
        endif
    endif
endif



if mt>mt[1] then
    col=1
elsif mt<mt[1] then
    col=-1
elsif mt=mt[1] then
    col=col[1]
endif



return mt coloured by col as "Main Trend"
Osservazioni


1) il codice non funziona per strumenti con quotazione superiore a 1000000 :D
2) con un codice cosi', anche io che excel lo uso poco e che di VB non so niente sono riuscito ad impostare un foglio per il calcolo del Main Trend. Magari la cosa puo' interessare a f4f anche se non sono sicuro ...
 
Ultima modifica:

tetsuo

Guest
Ancora sul Main Trend. Ecco un codice alternativo che lo calcola e che non usa il ciclo for ... next. Sembra funzionare.

Codice:
once flag = -1
once mt = low
once count1 = 1000000
once count2 = 1000000

inside=high<high[1] and low>low[1]
aggiornato=0



if flag=1 and high>mt then
    mt=high
    flag=1
    aggiornato=1
    count1 = 0
    count2 = 0
endif

if flag=-1 and low<mt then
    mt=low
    flag=-1
    aggiornato=1
    count1 = 1000000
    count2 = 1000000
endif



if flag=1 and aggiornato=0 and inside=0 then
    if low < count2 then
        mt=low
        flag=-1
        aggiornato=1
        count1 = 1000000
        count2 = 1000000
    else
        if low < count1 then
            count2 = low
        else
            count1 = low
        endif
    endif
endif

if flag=-1 and aggiornato=0 and inside=0 then
    if high > count2 then
        mt=high
        flag=1
        aggiornato=1
        count1 = 0
        count2 = 0
    else
        if high > count1 then
            count2 = high
        else
            count1 = high
        endif
    endif
endif



if mt>mt[1] then
    col=1
elsif mt<mt[1] then
    col=-1
elsif mt=mt[1] then
    col=col[1]
endif



return mt coloured by col as "Main Trend"
Osservazioni

1) il codice l'ho scritto interpretando come disuguaglianze strette tutte le disuguaglianze presenti implicitamente nella definizione di Main Trend. Chi volesse fare altre scelte (come era stato fatto nel codice di Tetsuo) dovra' mettere l'= nei posti giusti
2) il codice non funziona per strumenti con quotazione superiore a 1000000 :D
3) con un codice cosi', anche io che excel lo uso poco e che di VB non so niente sono riuscito ad impostare un foglio per il calcolo del Main Trend. Magari la cosa puo' interessare a f4f anche se non sono sicuro ...


Ciao Meur

Complimenti :up: hai creato proprio un bel codice (molto meglio del precedente ;)). Non rimane che testarlo per un po' per vedere come si comporta con i plurimi conteggi

Ciao e buona giornata
 

meursault

lo straniero
Ciao Meur

Complimenti :up: hai creato proprio un bel codice (molto meglio del precedente ;)). Non rimane che testarlo per un po' per vedere come si comporta con i plurimi conteggi

Ciao e buona giornata

Ciao Testsuo

In effetti questo codice e' "leggermente" migliore del mio precedente :lol:

Come ho scritto sembra funzionare, anche perche' l'ho testato con un po' di storici confrontando il risultato con quello del tuo codice (con le stesse disuguaglianze ovviamente) e coincidono perfettamente :up:

Al massimo abbiamo sbagliato in 2 :D

Ciao Tetsuo, facci sapere come va con Ninjatrader mi raccomando :)
 

fracicone

Nuovo forumer
calcolare le Deviazioni Standard dal MIDAS

Ciao Enzo
Il codice non gira sul daily proprio perche' e' concepito per grafici intraday visto che ti richiede ora e minuto dai quali cominciare i calcoli.
Non riesci ad andare indietro oltre due giorni perche' probabilmente sei incappato in una domenica ... i valori delle variabili devono corrispondere a un "tempo" in cui esiste una barra sul grafico.

Sperando di non confonderti, per ovviare a questi problemi ti posso proporre una modifica del codice in modo da rendere l'indicatore tracciabile su ogni grafico, indipendentemente dal time frame, e anche la sua sperimentazione un po' piu' semplice.

Il codice modificato l'ho modificato cosi'

Codice:
pv=MedianPrice*volume
if barindex = start then
    flag=1
    startvol=cumsum(volume)
    startpv=cumsum(pv)
endif
if startvol=0 then
    demon=1
else
    demon=cumsum(volume)-startvol
endif
if flag then
    midas=(cumsum(pv)-startpv)/demon
else
    midas=undefined
endif
 
return midas as "MIDAS"
Come vedi non ci sono piu' tutte quelle variabili di prima, ma c'e' solo una variabile che ho chiamato start. Ricordati di inserirla al solito e di compilare la finestra ad esempio cosi'

1263508286start.png


Al solito il valore di default non e' importante, poi lo cambi.

Allora, il significato di start: e' il numero di barra sul grafico dal quale cominciano i calcoli dell'indicatore. L'indicatore comincera' ad essere plottato dalla barra successiva. Tieni presente che per PRT la prima barra del grafico corrisponde allo 0.

Il codice cosi' funziona per qualsiasi grafico. Ora, ammetti di essere su un grafico daily e di voler far cominciare i calcoli dell'indicatore dal 16 novembre 2009. Devi quindi inserire come valore per start che numero di barra e' quella che corrisponde a tale data nel grafico che consideri. Visto che contare le barre ad una ad una e' faticoso :D ti puoi aiutare in questo modo: definisci un altro indicatore di appoggio, che puoi chiamare contabarre. Il suo codice e' costituito da una sola riga

return barindex

Questo indicatore ti dice semplicemente qual e' il numero di barra per ogni barra sul grafico. Ecco l'esempio

1263509603barindex.png


Qua ho plottato il midas direttamente sul grafico dei prezzi e nella finestra sotto vedi appunto la retta crescente dell'indicatore contabarre. Per sapere che parametro inserire per far cominciare i calcoli dal 16 novembre 2009 non fai altro che andarci sopra, e vedi che contabarre ti dice che il parametro da inserire nel midas e' 41. Tu lo inserisci e sei a posto.

Lo stesso ragionamento funziona per qualsiasi grafico, anche intraday.

Aprendo la finestra Proprieta' del midas potrai anche andare semplicemente su e giu' con le freccie per cambiare la barra da cui cominciare i calcoli cosi' ti puoi fare un'idea di come funziona l'indicatore

1263509316suegiu.png


Spero di essere stato chiaro, altrimenti chiedi ancora. In questi casi non si sa mai se si e' detto troppo o troppo poco :)

Ciao
Sarebbe interessante calcolare le deviazioni standard dal midas. Ho provato a farlo ma sono a digiuno di programmazione. Sarei grato a chi riuscisse a far funzionare il seguente codice:

pv=MedianPrice*volume

if barindex = start then
flag=1
startvol=cumsum(volume)
startpv=cumsum(pv)
endif
if startvol=0 then
demon=1
else
demon=cumsum(volume)-startvol
endif
if flag then
midas=(cumsum(pv)-startpv)/demon
else
midas=undefined
tot=0
for i=0 to p-1
var=(volume/sum)*(SQUARE(pri-midas))
tot=tot+var
next
eca=SQRT(tot)
return midas,midas+eca,midas-eca,midas+2*eca,midas-2*eca,midas+3*eca,midas-3*eca

Grazie 1000......

P.S. auguro lunga vita ai programmatori del fol( eccezionali):)
 

meursault

lo straniero
Sarebbe interessante calcolare le deviazioni standard dal midas. Ho provato a farlo ma sono a digiuno di programmazione. Sarei grato a chi riuscisse a far funzionare il seguente codice:

pv=MedianPrice*volume

if barindex = start then
flag=1
startvol=cumsum(volume)
startpv=cumsum(pv)
endif
if startvol=0 then
demon=1
else
demon=cumsum(volume)-startvol
endif
if flag then
midas=(cumsum(pv)-startpv)/demon
else
midas=undefined
tot=0
for i=0 to p-1
var=(volume/sum)*(SQUARE(pri-midas))
tot=tot+var
next
eca=SQRT(tot)
return midas,midas+eca,midas-eca,midas+2*eca,midas-2*eca,midas+3*eca,midas-3*eca

Grazie 1000......

P.S. auguro lunga vita ai programmatori del fol( eccezionali):)


Ciao Fracicone.
Ieri sera avevo gia' messo un codice ma l'ho cancellato perche' errato.

Ci riprovo, non sono sicuro che sia quello che volevi, comunque ...

La deviazione standard del midas la facciamo calcolare a Bollinger e il gioco dovrebbe essere fatto. Variabili da aggiungere start e n

Codice:
pv=MedianPrice*volume
if barindex = start then
    flag=1
    startvol=cumsum(volume)
    startpv=cumsum(pv)
endif
if startvol=0 then
    demon=1
else
    demon=cumsum(volume)-startvol
endif
if flag then
    midas=(cumsum(pv)-startpv)/demon
else
    midas=undefined
endif

sigma = 0.5*(BollingerUp[n](midas)-Average[n](midas))

return midas as "MIDAS", midas + sigma as "MIDAS + 1sigma", midas - sigma as "MIDAS - 1sigma", midas + 2*sigma as "MIDAS + 2sigma", midas - 2*sigma as "MIDAS - 2sigma", midas + 3*sigma as "MIDAS + 3sigma", midas - 3*sigma as "MIDAS - 3sigma"
 

fracicone

Nuovo forumer
costruzione pentagramma e indicatore time bar

Ciao Fracicone.
Ieri sera avevo gia' messo un codice ma l'ho cancellato perche' errato.

Ci riprovo, non sono sicuro che sia quello che volevi, comunque ...

La deviazione standard del midas la facciamo calcolare a Bollinger e il gioco dovrebbe essere fatto. Variabili da aggiungere start e n

Codice:
pv=MedianPrice*volume
if barindex = start then
    flag=1
    startvol=cumsum(volume)
    startpv=cumsum(pv)
endif
if startvol=0 then
    demon=1
else
    demon=cumsum(volume)-startvol
endif
if flag then
    midas=(cumsum(pv)-startpv)/demon
else
    midas=undefined
endif
 
sigma = 0.5*(BollingerUp[n](midas)-Average[n](midas))
 
return midas as "MIDAS", midas + sigma as "MIDAS + 1sigma", midas - sigma as "MIDAS - 1sigma", midas + 2*sigma as "MIDAS + 2sigma", midas - 2*sigma as "MIDAS - 2sigma", midas + 3*sigma as "MIDAS + 3sigma", midas - 3*sigma as "MIDAS - 3sigma"
Ciao Meursault:).
Ti ringrazio infinitamente per aver preso in considerazione la mia richiesta.
In effetti non è proprio quelllo che sto cercando.
graficamente questo è ciò che cerco ( allego grafico).Il codice per ottenere il tutto è il seguente:
pri=medianprice
p=p+1
if day<>day[1] then//
p=1
endif
sum=summation[p](volume)
sump=summation[p](pri*volume)
ww=sump/sum
tot=0
for i=0 to p-1
var=(volume/sum)*(SQUARE(pri-ww))
tot=tot+var
next
eca=SQRT(tot)
return ww,ww+eca,ww-eca,ww+2*eca,ww-2*eca,ww+3*eca,ww-3*eca

Vorrei modificarlo in modo da essere io a stabilire da che barra far partire la costruzione del pentagramma.
Per chi utilizza grafici a volume costante potrebbe essere utile la costruzione di un indicatore che mi calcoli i secondi occorrenti per la formazione di ciascuna barra.

GRAZIE....Paki:)
 

Allegati

  • FIAT.png
    FIAT.png
    22 KB · Visite: 2.778
Ultima modifica:

meursault

lo straniero
Ciao Fracicone,
in effetti non avevo capito niente di quello che volevi :D

Allora, se quello che vuoi e' far partire il tuo indicatore da una barra a tua scelta, una soluzione al problema e' del tutto simile a quella che avevo postato a Casguzze poco indietro.

La ripeto schematicamente:
- costruisci un "indicatore" di supporto che puoi chiamare contabarre. Tale indicatore ha una sola riga di codice
return barindex
e te lo metti sotto al grafico, cosi'

1264369308fiat1.png


- modifichi il codice del tuo indicatore in questo modo
Codice:
if barindex < start then
    ww = undefined
else
    pri=medianprice
    p=p+1
    if barindex = start then
        p=1
    endif
    
    sum=summation[p](volume)
    sump=summation[p](pri*volume)
    ww=sump/sum
    tot=0
    for i=0 to p-1
        var=(volume[i]/sum)*(SQUARE(pri[i]-ww))
        tot=tot+var
    next
    eca=SQRT(tot)
endif

return ww,ww+eca,ww-eca,ww+2*eca,ww-2*eca,ww+3*eca,ww-3*eca
Questo codice usa una varibile >=0 che ho chiamato start. Ricordati di aggiungerla tra le variabili

- ora, se vuoi plottare il tuo indicatore a partire da una barra a tua scelta non devi far altro che andare sopra la barra col mirino, vedere qual e' in corrispondenza di tale barra il valore di contabarre, e inserire tale valore per la variabile start. Esempio

1264369608fiat2.png


A onor del vero non sono sicuro che il codice sia giusto, visto che per alcuni grafici mi esce l'errore "ciclo infinito" e l'indicatore non viene plottato. Non so se sia un limite di calcolo di PRT. Piu' indietro nel 3d mi sembra che Casguzze parlando con Tetsuo avesse riscontrato lo stesso problema, non so se poi sia stata trovata la soluzione. Per ora io questo sono stato capace di fare, per il resto si vedra' :)
 

casguzze

Trade what you see
Ciao Fracicone,
in effetti non avevo capito niente di quello che volevi :D

Allora, se quello che vuoi e' far partire il tuo indicatore da una barra a tua scelta, una soluzione al problema e' del tutto simile a quella che avevo postato a Casguzze poco indietro.

La ripeto schematicamente:
- costruisci un "indicatore" di supporto che puoi chiamare contabarre. Tale indicatore ha una sola riga di codice
return barindex
e te lo metti sotto al grafico, cosi'

1264369308fiat1.png


- modifichi il codice del tuo indicatore in questo modo
Codice:
if barindex < start then
    ww = undefined
else
    pri=medianprice
    p=p+1
    if barindex = start then
        p=1
    endif
 
    sum=summation[p](volume)
    sump=summation[p](pri*volume)
    ww=sump/sum
    tot=0
    for i=0 to p-1
        var=(volume[i]/sum)*(SQUARE(pri[i]-ww))
        tot=tot+var
    next
    eca=SQRT(tot)
endif
 
return ww,ww+eca,ww-eca,ww+2*eca,ww-2*eca,ww+3*eca,ww-3*eca
Questo codice usa una varibile >=0 che ho chiamato start. Ricordati di aggiungerla tra le variabili

- ora, se vuoi plottare il tuo indicatore a partire da una barra a tua scelta non devi far altro che andare sopra la barra col mirino, vedere qual e' in corrispondenza di tale barra il valore di contabarre, e inserire tale valore per la variabile start. Esempio

1264369608fiat2.png


A onor del vero non sono sicuro che il codice sia giusto, visto che per alcuni grafici mi esce l'errore "ciclo infinito" e l'indicatore non viene plottato. Non so se sia un limite di calcolo di PRT. Piu' indietro nel 3d mi sembra che Casguzze parlando con Tetsuo avesse riscontrato lo stesso problema, non so se poi sia stata trovata la soluzione. Per ora io questo sono stato capace di fare, per il resto si vedra' :)

Ciao Meur felice di potere chicchierare con te ancora una volta...:up:

allora il pentagramma non è altro che il VWap con le sue deviazioni standard

io ho provato a farlo girare anche su grafici nvolume e ntick ma non funziona in quanto mi da il tuo stesso errore di ciclo infinito

così mi sono accontentato do farlo girare nel 5 min e per tutti gli altri grafici uso la formula del midas che mi hai settato tu e devo dire che è ok!

se poi riuscite a costruire il pentagramma per tutti i tipi di grafici fate un fischio che io vi leggo sempre...purtroppo posso solo darvi supporto morale in quanto di programmi non ne capisco una mazza...

A dopo
Enzo
 

Jolly Roger

L'eretico
Come e' noto le medie mobili centrate sono medie che vengono plottate meta' periodo indietro. Avvicinandosi al "presente", la parte dei prezzi che rimane scoperta nel calcolo viene posta ad esempio, alla Migliorino, fittiziamente uguale all'ultimo prezzo (ecco perche' nella traslazione faccio esattamente la stessa cosa).

Ora, tramite la traslazione il codice per tracciare una mmc diventa immediato. Invece di fare una media e portarla indietro, facciamo una media del grafico traslato all'indietro

Leggo solo adesso questo post e mi congratulo con te Meursault !

Saluto te, il simpatico Tetsuo che non sento da secoliiiiiiiiiiiiiii :) e tutti gli appassionati di programmazione prt.

Ciao
 

Users who are viewing this thread

Alto