Allego anche una versione che calcola sulla barra precedente,
forse più adatta per l'utilizzo in realtime, non essendo influenzata da ogni singolo tick in arrivo !!!
Da testare in realtime.
Saluti
Massimo


INPUTS: @price(CLOSE), @BandPeriods(20), @BigDev(1.6), @SmalDev(0.83), @SLperiods(7), @matype(SIMPLE),@x(4)
# @x è il nunero di barre di validità del segnale !!!
# Definiamo le variabili
SET BigTop = BollingerBandsTop(@price, @BandPeriods, @BigDev, @matype)
SET BigBottom = BollingerBandsBottom(@price, @BandPeriods, @BigDev, @matype)
SET BigTop1 = REF(BigTop, 1)
SET BigBottom1 = REF(BigBottom, 1)
SET SmallTop = BollingerBandsTop(@price, @BandPeriods, @SmalDev, @matype)
SET SmallBottom = BollingerBandsBottom(@price, @BandPeriods, @SmalDev, @matype)
SET SignalLine = LR(@price, @SLperiods)
SET SignalLine1 = REF(SignalLine,1)
# Definiamo le condizioni di crossover per long e short
SET goLong = CROSSOVER(SignalLine1, BigTop1)
SET goShort = CROSSOVER(BigBottom1, SignalLine1)
# Contiamo da quante barre si è verificata la condizione di crossover
# e superato il valore di @x azzeriamo i contatori
SET countH = LASTIF(goLong)
SET countH1 = IF(countH <= @x ,countH, 0)
SET countL = LASTIF(goShort)
SET countL1 = IF(countL <= @x ,countL, 0)
# Assegniamo al nostro signal un valore di countH1 se crossover long 
# di countL1 se crossover short, e zero se niente crossover 
SET condL = (countH1 = 0 AND countL1 > 0) OR (countH1 > 0 AND countL1 > 0 AND countL1 < countH1)
SET condH = (countL1 = 0 AND countH1 > 0) OR (countH1 > 0 AND countL1 > 0 AND countH1 < countL1)
SET signal = IF(condH, countH1, IF(condL, (-1 * countL1), 0))
# Assegnamo a signal2 valore di 1 se SignalLine conferma il crossover,
# valore di -1 se la SignalLine ha ritracciato, negando il crossover, 0 quando no segnale
SET condTrue = (signal > 0 AND SignalLine1 > BigTop1) OR (signal < 0 AND SignalLine1 < BigBottom1)
SET condFalse = (signal > 0 AND SignalLine1 < BigTop1) OR (signal < 0 AND SignalLine1 > BigBottom1)
SET signal2 = IF(condTrue, 1, IF(condFalse, -1, 0))
# Settiamo i PLOT
# Per signal in verde long ed il numero di barre dal crossover long,
# in rosso per short ed in negativo il numero di barre dal crossover short,
# in grigio 0 quando siamo oltre @x barre dal crossover 
SET PLOT1 = signal
SET PLOTCOLOR1 = IF(signal < 0, COLOR_RED, IF(signal > 0, COLOR_GREEN, COLOR_GRAY))
# Per signal2 verde con 1 se LR conferma il crossover long o short
# in rosso -1 se in invece LR ha ritracciato negando il crossover 
# 0 grigio se nessun segnale
SET PLOT2 = signal2
SET PLOTCOLOR2 = IF(signal2 < 0, COLOR_RED, IF(signal2 > 0, COLOR_GREEN, COLOR_GRAY))