Buongiorno volevo codificare uno screener che dato un paniere di assets mi andasse a selezionare quelli che hanno guadagnato negli ultimi 12 mesi (variazione percentuale 12M>=0), di questi superstiti prendesse quelli che hanno guadagnato negli ultimi 6 mesi (variazione percentuale 6M>=0), di questi superstiti prendesse quelli che hanno guadagnato negli ultimi 3 mesi (variazione percentuale 3M>=0) e quindi di quelli che sono rimasti prendesse i DUE che hanno avuto la migliore variazione percentuale pesata sulla volatilità nell’ultimo mese (var% 1 mese/ATR 1 mese). In pratica all’inizio sono 3 tagliole consecutive (12M, 6M sui superstiti, 3M sui superstiti) e infine ci si posiziona sui 2 che hanno avuto la miglior variazione percentuale/ATR nell’ultimo mese.
Questo è il codice:
Timeframe(Monthly)
c1 = ROC[12](close) > 0
c2 = ROC[6](close) > 0
c3 = ROC[3](close) > 0
c4 = AverageTrueRange[1](close)
//
Timeframe(default)
Cond = c1 AND c2 AND c3
SCREENER[Cond AND (high <> low)](c4 AS "Atr")
però non è possibile selezionare solo i 2 migliori con ATR, li stampa comunque tutti e tu scegli i primi due della lista con i valori più alti.
Grazie Roberto ma non mi ritorna l’ultimo passaggio, non volevo i due con ATR più elevato nell’ultimo mese, ma i due che hanno avuto la migliore variazione percentuale pesata sulla volatilità nell’ultimo mese (var% 1 mese/ATR 1 mese). Si riesce?
Va bene, eccolo:
Timeframe(Monthly)
c1 = ROC[12](close) > 0
c2 = ROC[6](close) > 0
c3 = ROC[3](close) > 0
c4 = Variation(close) / AverageTrueRange[1](close)
//
Timeframe(default)
Cond = c1 AND c2 AND c3
SCREENER[Cond AND (high <> low)](c4 AS "Atr")
VARIATION calcola la differenza in % del prezzo attuale con la chiusura della barra precedente (mensile), che poi viene divisa per l’ATR.
Grazie, ma forse non mi sono fatto capire bene. Per variazione % 1 mese intendo quanto ha guadagnato in quel mese, non la differenza in % del prezzo attuale con la chiusura della barra precedente (mensile).
Quindi è corretto riscrivere la riga 5 in questo modo?
5 c4 = ROC[1](close) / AverageTrueRange[1](close)
Scusa ancora, se volessi invece fare una media dei tre ROC a 12 mesi, 6 mesi e 3 mesi è corretto riscrivere la riga 8 in questo modo?
8 Cond = (c1+c2+c3)/3
No, quelle 3 variabili sono valori logici, vero o falso, farci una media non funziona.
Occorre fare la media dei 3 valori ROC:
Timeframe(Monthly)
roc12 = ROC[12](close)
roc6 = ROC[6](close)
roc3 = ROC[3](close)
//
c1 = roc12 > 0
c2 = roc6 > 0
c3 = roc3 > 0
c4 = Variation(close) / AverageTrueRange[1](close)
//
Timeframe(default)
c5 = (roc12 + roc6 + roc3) / 3
Cond = c1 AND c2 AND c3
SCREENER[Cond AND (high <> low)](c4 AS "Atr")
c5 conterrà la media dei tre ROC, dovrai usarla come desideri.