Buongiorno,
ho un altro problema.
Ho scritto un codice che traccia le trendline del Momentum.
Il ragionamento di fondo è che la TL deve essere tracciata sui valori positivi del Momentum quando lo stesso va sotto lo zero, sui valori negativi quando va sopra lo zero
Lo script sembra funzionare bene ma ho notato che (come da esempio allegato) anche se nella giornata di ieri il Momentum è passato da positivo a negativo (quindi è andato sotto lo zero e lo script a definito un nuovo picco sopra lo zero) l’ultima TL tracciata riguarda il precedente movimento sotto lo zero (quindi riguarda i valori negativi).
La domada è: quando vengono effettuati i calcoli sulle chiusure di barra (parliamo di barre giornaliere ovviamente) nella prima giornata di apertura successiva?
Se così non fosse da cosa può dipendere questo comportamento?
Ovvero cosa sbaglio??
Grazie
Grazie
L’istruzione DEFPARAM corretta è DRAWONLASTBARONLY.
Dipende dal codice, evidentemente c’è una parte di logica errata rispetto al risultato che vuoi ottenere.
Non capisco cosa ha a che fare DRAWONLASTBARONLY dal momento che non l’hai usata!?
Infatti per il titolo del post non sapevo cosa scrivere, semplicemente mi sono accorto del problema quando ho usato il comando (quello corretto of course) e mi ha disegnato la penultima TL e non l’ultima.
Posto il codice magari riesci ad aiutarmi
Ho eliminato la parte del colore delle TL tanto è indifferente
il DEFPARAM CALCULATEONLASTBARS = 200 è stato disabilitato con le “//” perchè se impostato lo script non mi restituisce risultati (se riesci a spiegarmi anche questa, te ne sono grato)
Spero sia chiaro, se servono delucidazioni ovviamente a disposizione
Grazie per la disponibilità
//DEFPARAM CALCULATEONLASTBARS = 200 // Calcola le TL sulle ultime 200 candele (sul giornaliero = ultimo anno)
DEFPARAM DRAWONLASTBARONLY = true //Disegna solo l'ultima TL dei massimi o dei minimi
//Posizioni di partenza H,L e Swing
ONCE MHbar = 0
ONCE MH= 0
ONCE MLbar = 0
ONCE ML = 0
ONCE HoldHbar = 0
ONCE HoldH = 0
ONCE HoldLbar = 0
ONCE HoldL = 0
ONCE MSwing= 1 // 1= up trend, -1= down trend
// Settings parametri
M = Momentum
//Analisi Up trend
//Continuazione
IF MSwing = 1 AND M>0 AND M=>MH THEN
MHbar = Barindex
MH= M
//Inversione Down
ELSIF MSwing = 1 AND M<=0 THEN
MSwing = -1 //aggiorna stato swing
MLbar = Barindex // aggiorna Low Momentum
ML = M
DRAWSEGMENT (x1, y1, x2, y2) //disegna TL massimi Momentum
x1= HoldHbar
y1= HoldH
x2= MHbar
y2= MH
HoldHbar = MHbar // aggiorna vecchio massimo
HoldH = MH
//Analisi Downtrend
//Continuazione down
ELSIF MSwing = -1 AND M<=0 AND M<=ML THEN
MLbar = Barindex
ML= M
//Inversione UP
ELSIF MSwing = -1 AND M>0 THEN
MSwing = 1 //aggiorna stato swing
MHbar= Barindex // aggiorna High Momentum
MH = M
DRAWSEGMENT (x1, y1, x2, y2) //disegna TL minimi Momentum
x1= HoldLbar
y1= HoldL
x2= MLbar
y2= ML
HoldLbar = MLbar // aggiorna vecchio minimo
HoldL = ML
ENDIF
RETURN
Devo provarlo sul PC, quindi lunedì ormai.
Tranquillo, non ho fretta. L’importante è capire cosa sbaglio.
Grazie
Ciao Roberto,
hai avuto modo di verificare lo script?
Ti allego una foto di quello che mi appare, puoi spiegarmi meglio cosa vuoi fare con quelle linee?
Ciao Roberto,
nel mio intento l’indicatore va applicato “sul” momentum. Ovviamente si può utilizzare anche semplicemente
Return M
Quelle linee rappresentano le TL degli swing del Momentum. Quindi uniscono due massimi o due minimi consecutivi.
I massimi ed i minimi vengono individuati considerando il passaggio rialzista o ribassista della linea di equilibrio (ovvero dello zero)
Quindi c’e’ un incrocio rialzista del Momentum rispetto alla linea dello zero si tocca un massimo poi c’e’ un incrocio ribassista si tocca un minimo, poi ancora un incrocio rialzista e si tocca un nuovo massimo (a questo punto viene tracciata una trendline tra i due massimi), poi c’e’ nuovamente un incrcocio ribassista del moment (e a questo punto viene tracciata una trendline tra i due minimi) e cosi via….
Tutto al fine di individuare automaticamente” eventuali divergenze.
Questo è un primo passaggio di un indicatore che dovrebbe restituirmi un testo quando si verifica uan divergenza in modo da avere un riscontro evidente ed immediato e “senza sforzi”.
Sto procedendo per passi per verificare che quello che “teorizzo” poi all’atto pratico viene eseguito dallo script.
Il problema riscontrato è che viene tracciata la penultima TL e non l’ultima come vorrei.
Grazie
Abbi un pò di pazienza, cerco di controllarlo quanto prima possibile, non so se entro questo fine settimana ce la farò.
Puoi farmi le linee (manuali) solo sui monimi, secondo le tue regole su un grafico con il momentum a 12 periodi?
Certo.
Lo screen non è di Proreal ma il concetto è quello i colori in questo caso servono solo a distinguere i singoli segmenti (che peraltro non sono precisissimi – ma la logica è che devono partire dal minimo che il momentum tocca ad ogni attraversamento dello xero) non a stabilirne la direzione
Scusami, ma non ce la faccio per il fine settimana, devi pazientare ancora un pò.
Grazie 🙂
Tranquillo,
tanto ora ho il manuale delal v11 da leggere =)
Ho preferito riscrivere il codice, eccolo:
//DEFPARAM CalculateOnLastBars = 1000
Once CrossOver = 0
Once CrossUnder = 0
Once CurOver = 0
Once PrevOver = 0
Once CurUnder = 0
Once PrevUnder = 0
ONCE CurOverBar = 0
ONCE PrevOverBar = 0
ONCE CurUnderBar = 0
ONCE PrevUnderBar = 0
p = 14
MyInd = Momentum[p](close)
CrossOver = MyInd CROSSES OVER 0
CrossUnder = MyInd CROSSES UNDER 0
IF CrossOver = 1 AND CrossOver[1] = 0 THEN
PrevOver = CurOver
PrevOverBar = CurOverBar
CurOver = MyInd
CurOverBar = BarIndex
ENDIF
IF CrossUnder = 1 AND CrossUnder[1] = 0 THEN
PrevUnder = CurUnder
PrevUnderBar = CurUnderBar
CurUnder = MyInd
CurUnderBar = BarIndex
ENDIF
If CrossOver = 0 AND CrossUnder = 0 THEN
CrossOver = CrossOver[1]
CrossUnder = CrossUnder[1]
ENDIF
IF CrossOver = 1 THEN
CurOver = max(CurOver,MyInd)
IF CurOver <> CurOver[1] THEN
CurOverBar = BarIndex
ENDIF
Endif
IF CrossUnder = 1 THEN
CurUnder = min(CurUnder,MyInd)
IF CurUnder <> CurUnder[1] THEN
CurUnderBar = BarIndex
ENDIF
Endif
IF CrossUnder = 1 THEN
DrawSegment(PrevOverBar,PrevOver,CurOverBar,CurOver) coloured(0,0,255,255)
ENDIF
IF CrossOver = 1 THEN
DrawSegment(PrevUnderBar,PrevUnder,CurUnderBar,CurUnder) coloured(255,0,0,255)
ENDIF
IF PrevOverBar AND PrevOver AND PrevUnderBar AND PrevUnder THEN
ENDIF
RETURN MyInd AS "Momentun",0 AS "Zero"
Ci sono alcuni punti, evidenziati in arancio nella foto, che sono più difficili da eliminare. Non credo, però, che influiscano sull’individuazione di divergenze.
Sostituendo, alla riga 13, Momentum con RSI puoi usarlo con RSI (però devi anche modificare 0 in 50 alle due righe successive), come con altri.