// parameters
// HalfLength = 50
// AtrLength = 100
// AtrMultiplier = 2.0
avg = average[1](close)
sum = (HalfLength+1)*avg
sumw = (HalfLength+1)
k = HalfLength
for j = 1 to HalfLength do
k = k-1
sum = sum+(k*avg[j])
sumw = sumw+k
next
buffer1 = sum/sumw
myrange = AverageTrueRange[AtrLength](close)*AtrMultiplier
buffer2 = buffer1+myrange
buffer3 = buffer1-myrange
RETURN buffer1 coloured(0,220,0) as "TMA", buffer2 coloured(220,0,0) as "upper band", buffer3 coloured(220,0,0) as "lower band"
Buonasera Roberto,
posso chiedere per cortesia un proscreener che segnala quando il prezzo dell’attuale candela è :
= o superiore della upper band per la condizione sell, o
= o inferiore della lower band per la condizione buy
time frame 1h 4h daily
con il segnale che una volta attivato nel proscreer rimanga aperto fino alla chiusura della candela stessa
Chiedo anticipatamente se invece volessi far chiudere il segnale al termine della candela successiva a quella che ha attivato il segnale come dovrei modificarlo.
Grazie come sempre per la disponibilità
Corrado
Eccolo:
N = 1 //Durate del segnale (deve essere un intero > 0)
HalfLength = 50
AtrLength = 100
AtrMultiplier = 2.0
avg = average[1](close)
sum = (HalfLength+1)*avg
sumw = (HalfLength+1)
k = HalfLength
for j = 1 to HalfLength do
k = k-1
sum = sum+(k*avg[j])
sumw = sumw+k
next
buffer1 = sum/sumw
myrange = AverageTrueRange[AtrLength](close)*AtrMultiplier
buffer2 = buffer1+myrange
buffer3 = buffer1-myrange
//RETURN buffer1 coloured(0,220,0) as "TMA", buffer2 coloured(220,0,0) as "upper band", buffer3 coloured(220,0,0) as "lower band"
L1 = close < buffer3
S1 = close > buffer2
Screener[summation[N](L1 or S1)]
per la durata usa N, da 1 in poi.
Per il time frame, non ce n’è uno specifico, puoi usarlo sul Daily, 1 ora, 5 minuti, 1 secondo…
Grazie mille Roberto,
si so che si può cambiare dalla finestra del proscreener, preferirei che fosse il proscreener a ricercare su 3 tf contemporaneamente, per evitare di tenere aperta la finestra di programmazione e dover fare la ricerca manualmente. Se chiedo troppo grazie comunque per il prezioso lavoro 🙂 . Corrado
Ok, questo ti restituirà il segnale quando il prezzo sarà oltre le bande su tutti e tre i TF contemporaneamente:
TIMEFRAME(Daily)
ignored,UpperBd,LowerBd = CALL "TMA center channel"[50, 100, 2]
TIMEFRAME(4h)
ignored,UpperB4,LowerB4 = CALL "TMA center channel"[50, 100, 2]
TIMEFRAME(1h)
ignored,UpperB1,LowerB1 = CALL "TMA center channel"[50, 100, 2]
Timeframe(default)
N = 1
L1 = (close < LowerBd) AND (close < LowerB4) AND (close < LowerB1)
S1 = (close > UpperBd) AND (close > UpperB4) AND (close > UpperB1)
Screener[summation[N](L1 or S1)]
grazie, mi scuso che non sono stato sufficientemente comprensibile, intendevo che il proscreenr lo cerca su 3 tf contemporaneamente e mi ritorna su quale dei 3 si verifica (anche uno solo), non che cerchi una coppia su cui si verifica contemporaneamente su tutti e 3 . In caso di segnale su piu tf della stessa coppia che ritorni quello piu basso. Grazie comunque
Ok, questo restituisce tutti e 3 contemporaneamente, identificati con “d41“, cioè daily 4 ore e 1 ora.
Per ognuno dei tre TF restituisce:
- 9 = nessun segnale (0 non lo stamperebbe)
- 1 = segnale Long
- 2 = segnale Short (gli Screener non restituiscono valori negativi)
TIMEFRAME(Daily)
ignored,UpperBd,LowerBd = CALL "TMA center channel"[50, 100, 2]
Ld = (close < LowerBd)
Sd = (close > UpperBd)
TIMEFRAME(4h)
ignored,UpperB4,LowerB4 = CALL "TMA center channel"[50, 100, 2]
L4 = (close < LowerB4)
S4 = (close > UpperB4)
TIMEFRAME(1h)
ignored,UpperB1,LowerB1 = CALL "TMA center channel"[50, 100, 2]
L1 = (close < LowerB1)
S1 = (close > UpperB1)
Timeframe(default)
//
N = 1
//
IF Ld = 1 THEN
Cond = 100
ELSIF Sd = 1 THEN
Cond = 200
ELSE
Cond = 900
ENDIF
//
IF L4 = 1 THEN
Cond = Cond + 10
ELSIF S4 = 1 THEN
Cond = Cond + 20
ELSE
Cond = Cond + 90
ENDIF
//
IF L1 = 1 THEN
Cond = Cond + 1
ELSIF S1 = 1 THEN
Cond = Cond + 2
ELSE
Cond = Cond + 9
ENDIF
//
IF Cond = 999 THEN
Cond = 0
ENDIF
x = Cond
IF x = 0 THEN
FOR i = 1 TO N
IF Cond[i] THEN
x = Cond[i]
ENDIF
NEXT
ENDIF
Screener[x](x AS "d41")
Gentilissimo e codice perfetto, come sempre.
Grazie