Buongiorno,
Ho creato uno screener che visualizza mercati in cosidedtte “extended run”, ovvero 7 o piu giorni al di sopra (o sotto) della sma5.
Il codice funziona bene.
Lo uso su timeframe Giornaliero e vorrei che il codice ignorasse le barre del fine settimana, che purtroppo sono presenti su IG, e lavori come esistessero solo le barre dal lunedi al venerdi.
Ho provato ad aggiungere questo ma non funziona
IF DayOfWeek >= 1 AND DayOfWeek <= 5 THEN
Ecco il codice completo:
sma5 = average[5](close)
// ----------------------
// EXTENDED RUN UP
// ----------------------
runAbove = 0
IF close[1] > sma5[1] THEN
runAbove = runAbove[1] + 1
ELSE
runAbove = 0
ENDIF
// ----------------------
// EXTENDED RUN DOWN
// ----------------------
runBelow = 0
IF close[1] < sma5[1] THEN
runBelow = runBelow[1] + 1
ELSE
runBelow = 0
ENDIF
// ----------------------
// FILTRO
// ----------------------
filterUp = runAbove >= 7
filterDown = runBelow >= 7
// ----------------------
// SCREENER (SEPARATO)
// ----------------------
SCREENER[filterUp OR filterDown](runAbove - runBelow)
Grazie in anticipo per qualsiasi aiuto o consiglio!
Ecco, ho modificato il tuo codice; ecco cosa cambia: la variabile isWeekday utilizza DayOfWeek (lunedì = 1, domenica = 7) per rilevare se la barra corrente cade in un giorno feriale. Se è un giorno di fine settimana, i contatori runAbove e runBelow mantengono semplicemente il loro valore precedente (runAbove[1]) invece di essere incrementati o azzerati — la barra è quindi effettivamente “trasparente” per il calcolo.
Nota: sulla maggior parte dei mercati azionari con dati giornalieri, nel flusso di dati non sono presenti barre nel fine settimana, quindi questa protezione è particolarmente utile se si analizzano anche i mercati Forex o delle criptovalute.
sma5 = average[5](close)
// Ignore weekend bars
isWeekday = DayOfWeek >= 1 AND DayOfWeek <= 5
// ----------------------
// EXTENDED RUN UP
// ----------------------
IF isWeekday THEN
IF close[1] > sma5[1] THEN
runAbove = runAbove[1] + 1
ELSE
runAbove = 0
ENDIF
ELSE
runAbove = runAbove[1]
ENDIF
// ----------------------
// EXTENDED RUN DOWN
// ----------------------
IF isWeekday THEN
IF close[1] < sma5[1] THEN
runBelow = runBelow[1] + 1
ELSE
runBelow = 0
ENDIF
ELSE
runBelow = runBelow[1]
ENDIF
// ----------------------
// FILTER
// ----------------------
filterUp = runAbove >= 7
filterDown = runBelow >= 7
// ----------------------
// SCREENER
// ----------------------
SCREENER[filterUp OR filterDown](runAbove - runBelow)
Ciao Nicolas,
Grazie dell’aiuto!
In realtà il codice continua a non funzionare. Non ho problemi sul forex, ne su altri futures che ho nella watchlist.
In questi giorni, ad esempio, i principali indici di mercato USA e anche il DAX rispettano i requisiti della “extended run”, ma il codice non li individua.
Io ipotizzo che sia per via della barra della domenica che ha chiusto sotto la sma5 (12 aprile). E’ possibile che il codice invece di ignorare del tutto la barra della domenica, interrompa il conteggio quando la incontra?
Inoltre, mi confermi che su PRT non è possibile includere la barra della domenica con quella del lunedi per avere un grafico “pulito”?
Nelle impostazioni personalizzate dei prezzi, è possibile modificare la visualizzazione dei dati relativi al fine settimana (vedi immagine).
Rispetto agli screener, questi strumenti utilizzano sempre i dati di mercato reali, poiché le borse ci inviano i dati ufficiali; quindi, se il feed contiene dati relativi alla domenica, i calcoli dello screener utilizzeranno tali dati.
Per quanto riguarda il codice dello screener, credo che il conteggio dei dati della domenica sia incluso perché il test del giorno della settimana inizia il lunedì, ma il conteggio si basa sulle condizioni del giorno precedente. In questo caso, possiamo semplicemente contare utilizzando i dati di quel giorno.
sma5 = average[5](close)
// Ignore weekend bars
isWeekday = DayOfWeek >= 1 AND DayOfWeek <= 5
// ----------------------
// EXTENDED RUN UP
// ----------------------
IF isWeekday THEN
IF close[0] > sma5[0] THEN
runAbove = runAbove[1] + 1
ELSE
runAbove = 0
ENDIF
ELSE
runAbove = runAbove[1]
ENDIF
// ----------------------
// EXTENDED RUN DOWN
// ----------------------
IF isWeekday THEN
IF close[1] < sma5[1] THEN
runBelow = runBelow[1] + 1
ELSE
runBelow = 0
ENDIF
ELSE
runBelow = runBelow[1]
ENDIF
// ----------------------
// FILTER
// ----------------------
filterUp = runAbove >= 7
filterDown = runBelow >= 7
// ----------------------
// SCREENER
// ----------------------
SCREENER[filterUp OR filterDown](runAbove - runBelow)
oppure iniziare a contare solo da martedì in poi:
sma5 = average[5](close)
// Ignore weekend bars
isWeekday = DayOfWeek >= 2 AND DayOfWeek <= 5
// ----------------------
// EXTENDED RUN UP
// ----------------------
IF isWeekday THEN
IF close[1] > sma5[1] THEN
runAbove = runAbove[1] + 1
ELSE
runAbove = 0
ENDIF
ELSE
runAbove = runAbove[1]
ENDIF
// ----------------------
// EXTENDED RUN DOWN
// ----------------------
IF isWeekday THEN
IF close[1] < sma5[1] THEN
runBelow = runBelow[1] + 1
ELSE
runBelow = 0
ENDIF
ELSE
runBelow = runBelow[1]
ENDIF
// ----------------------
// FILTER
// ----------------------
filterUp = runAbove >= 7
filterDown = runBelow >= 7
// ----------------------
// SCREENER
// ----------------------
SCREENER[filterUp OR filterDown](runAbove - runBelow)
Grazie dei codici e della spiegazione.
C’erano alcuni errori che sono riuscito a correggere. Col codice funzionante e la nuova logica comunque ottengo gli stessi risultati di prima, dunque non risolvo il mio problema.
Come hai scritto, togliere i dati del week-end dalla visualizzazione sul grafico non aiuta, il codice terrà conto ugualmente di quei dati.
Non capisco perchè con la nuova funzione non si riesce semplicemente a far ignorare quei dati al codice.
Se dovessi avere qualche idea o qualcosa che potrei sperimentare ti prego di fammi sapere.
Grazie ancora
Mi scuso, ho modificato il codice precedente che era troncato.
Potresti indicarci su quale elenco stai eseguendo lo strumento di screening, in modo da poter riprodurre il problema? Oppure potresti fornirci degli esempi in cui si verifica il problema? Grazie.
Buongiorno Nicolas,
Non devi scusarti.
Eseguo lo screening su una lista personalizzata di mercati misti fra i quali forex, indici e commodities. Lo screener individua correttamente i mercati in cui le condizioni sono presenti e in cui le barre della domenica non influiscono sul calcolo. Oggi ad esempio mostra l’high grade copper, eurjpy e gbpjpy.
Ti allego, con due immagini, un esempio sul futures dell’SP500.
In questo momento l’SP500 rispetta le condizioni di una “Extended Run”, sul grafico giornaliero il prezzo ha chiuso al di sopra della sma5 per 12 giorni consecutivi, dal 31 marzo fino al 15 aprile (ieri).
-Un’immagine mostra i dati del futures dal CME.
-L’immagine del grafico su PRT, mostra le candele della domenica che compromettono il calcolo.