Salve a tutti! Sto programmando da poco e ho scritto questo semplice codice a scopo didattico.
sma200 = AVERAGE[200]
myClose = Close
//ritorna 1 se il prezzo è sopra la SMA200, -1 se sotto
IF myClose > sma200 THEN
filtro = 1
ELSIF myClose < sma200 THEN
filtro = -1
ENDIF
SCREENER[filtro](filtro AS "Trend")
Il mio problema è che non riesco a capire come mai lo screener mi da solo i prezzi che stanno sopra la SMA200 e non quelli che stanno sotto.
Grazie 🙂
Perché ProScreener ha un limite di 50 risultati in demo e 100 in reale e sono troppi.
Questo tuo screener non li filtra, li suddivide solo in due gruppi, quindi vedi solo i primi 50.
Invece di usare > e < usa CROSSES OVER e CROSSES UNDER e vedrai che la lista si accorcia,
Ho provato a fare come dici tu, ma il risultato non cambia.
sma200 = AVERAGE[200]
myClose = Close
//ritorna 1 se il prezzo è sopra la SMA200, -1 se sotto
IF myClose CROSSES OVER sma200 THEN
filtro = 1
ELSIF myClose CROSSES UNDER sma200 THEN
filtro = -1
ENDIF
SCREENER[filtro](filtro AS "Trend")
Semplicemente perché ci sono troppi strumenti sopra lo SMA200 per quelli qui sotto da restituire con il limite di 50 strumenti della finestra di ProScreener. È possibile modificare / invertire i criteri di ordinamento nelle impostazioni di ProScreener.
Come vedi dallo screenshot devi, almeno per le prove, selezionare un numero minore di strumenti, io l’ho fatto solo sulle valute e funziona (non restituisce però il -1, prova a mettere 2 al suo posto).
Tra l’altro nella lista di ProScreener, in basso, vedi quanti elementi sono disponibili e quanti ne sono stati visualizzati, in modo da renderti conto se il tuo filtro “filtra” o meno. Se ti restituisce troppi valori significa che NON filtra a sufficienza!
Grazie, se mi modifico il codice come avete detto funziona.
sma200 = AVERAGE[200]
myClose = Close
//ritorna 1 se il prezzo è sopra la SMA200, 2 se sotto
IF myClose CROSSES OVER sma200 THEN
filtro = 1
ELSIF myClose CROSSES UNDER sma200 THEN
filtro = 2
ENDIF
SCREENER[filtro](filtro AS "Trend")
Anche se non riesco a capire come mai questo strano comportamento.
E’, come già detto, un limite di PRT che, per gli screener ha stabilito un massimo di 50 (per il demo) e 100 (per il reale) di strumenti restituiti.
In realtà è un limite molto ampio. Una volta che tu hai 100 elementi visualizzati che rispondono alle tue richiesta, non è che APRI un’operazione semplicemente su quella condizione, ma dovrai andare a vedere il grafico per verificare l’andamento del prezzo e la formazione di particolari pattern di candele, oppure verificare divergenze, rotture o meno di supporti e resistenze o trendline. Insomma, lo screener ti serve per evidenziare qualcosa, ma poi hai una bella analisi da fare prima di aprire un eventuale posizione.
Pensa a doverlo fare 100 volte, per ogni strumento restituito dallo Screener, impiegheresti forse anche più di un giornio e nel frattempo i dati dei primi strumenti analizzati sarebbero cambiati!
Insomma, che senso ha avere, ad esempio, un limite di 500 strumenti elencati che NON riesci poi ad analizzare?
Piuttosto devi fare uno screener molto selettivo che ti restituisca pochi elementi (5-10 al massimo) che ti consentano poi un’analisi accurata per un’eventuale entrata in posizione ed è questo, in fondo, lo scopo di ogni trader!
Si capisco il limite di risultati in demo.
Quello che non capisco è l’ordine dei risultati che ottengo cambiando semplicemente i valori che la variabile filtro può assumere a seconda dei casi.
Hai ragione il codice così è inutile, serve solo a me a scopo didattico.
Ciao sarebbe possibile avere il codice modificato che riporta i prezzi sopra / sotto la media a chiusura candela, nei seguenti
time frame: 4 ore, 1 ora, 15 minuti, 3 minuti ?
Infinitamente grazie!
Ecco lo screener che verifica com’è la media su ognuno dei 4 TF nello stesso momento (puoi sostituire > o > con CROSS OVER/UNDER o qualunque altra condizione tu voglia):
// TF 4h 1h 15m 3m
// sopra 1 1 1 1
// sotto 2 2 2 2
// uguale 9 9 9 9 (improbabile, ma va considerato comunque e non può
// essere zero)
//
// Restituirà:
// 1111 se il prezzo sarà sopra la media in TUTTI i time frame
// 2222 se il prezzo sarà sotto la media in TUTTI i time frame
// 1112 se il prezzo sarà sotto la media sul 3 minuti, ma sopra negli altri
// oppure qualunque altra combinazione.
//
// 9 serve solo per fare in modo che, nel caso pressochè impossibile, che la media sia
// uguale al prezzo in un determinato TF, questo non venga saltato
TIMEFRAME(4 hours)
sma2004 = AVERAGE[200,0](close)
Filtro4 = 9000
IF close > sma2004 THEN
filtro4 = 1000
ELSIF close < sma2004 THEN
filtro4 = 2000
ENDIF
//
TIMEFRAME(1 hours)
sma2001 = AVERAGE[200,0](close)
Filtro1 = 900
IF close > sma2001 THEN
filtro1 = 100
ELSIF close < sma2001 THEN
filtro1 = 200
ENDIF
//
TIMEFRAME(15 minutes)
sma20015 = AVERAGE[200,0](close)
Filtro15 = 90
IF close > sma20015 THEN
filtro15 = 10
ELSIF close < sma20015 THEN
filtro15 = 20
ENDIF
//
TIMEFRAME(3 minutes)
sma2003 = AVERAGE[200,0](close)
Filtro3 = 9
IF close > sma2003 THEN
filtro3 = 1
ELSIF close < sma2003 THEN
filtro3 = 2
ENDIF
TIMEFRAME(default)
filtro = filtro4 + filtro1 + filtro15 + filtro3
IF filtro = 9999 THEN
filtro = 0
ENDIF
SCREENER[filtro](filtro AS "TF 1/2")
Ho dovuto usare il formato a 4 cifre perché ProScreener consente UN solo valore da usare come criterio.
Grazie mille Roberto,
è anche possibile applicare lo screener solo a certi mercati ? ad esempio solo valute, solo indici, solo azioni( solo Americane, solo Europee) ?
Grazie ancora!
Si, quando visualizzi uno Screener devi selezionarlo e scegliere un time frame di default, dopodiché puoi selezionare una lista predefinita (scegliendo gli strumenti che preferisci) oppure puoi crearti varie liste personalizzate.