Originariamente Scritto da
maxmax68
Ciao Claudio,
per il segnale invertito mi scuso, ma non conoscevo il funzionamento del Bobao.
Per quanto riguarda il segnale sulla barra attuale basta scegliere tra le due versioni, e vedo che hai già risolto.
Per quanto riguarda il countH + 1 e countL + 1 prendo per buona la tua esperienza diretta sui dati realtime.
Per quanto riguarda la conferma del segnale, scusa ma continuo a non capire se vuoi il confronto solo con
il valore precedente di SignalLine, o con tutti i valori dal punto in cui è avvenuto il crossover in poi.
Se ti basta il confronto con REF(SignalLine, 1) ti basta sostituire in condTrue e condFalse i valori di BigTop
e BigBottom con REF(SignalLine, 1).
Saluti
Massimo
Ciao Massimo,
Per l'inversione del segnale non ti devi scusare ... senza conoscere il funzionamento del Bobao hai fatto fin troppo.
Per avere il numero di barre compresa l'attuale ho appunto aggiunto il +1 in countH e countL .... non so se è corretto ma il risultato sì.
Per il SignalLine con la sostituzione che mi hai detto sopra si è risolto tutto.
Praticamente perfetto: segnale corretto, conteggio delle barre giusto, orientamento regressione (SignalLine) ottimo.
Allego 2 screen e lo script finale.
Grazie infinite Massimo ....grazie Smash
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 SmallTop = BollingerBandsTop(@price, @BandPeriods, @SmalDev, @matype)
SET SmallBottom = BollingerBandsBottom(@price, @BandPeriods, @SmalDev, @matype)
SET SignalLine = LR(@price, @SLperiods)
# Definiamo le condizioni di crossover per long e short
SET goLong = CROSSOVER(SignalLine, BigBottom)
SET goShort = CROSSOVER(BigTop, SignalLine)
# 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 + 1, 0)
SET countL = LASTIF(goShort)
SET countL1 = IF(countL <= @x ,countL + 1, 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 SignalLine > REF(SignalLine, 1)) OR (signal < 0 AND SignalLine < REF(SignalLine, 1))
SET condFalse = (signal > 0 AND SignalLine < REF(SignalLine, 1)) OR (signal < 0 AND SignalLine > REF(SignalLine, 1))
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_DARK_RED, IF(signal > 0, COLOR_DARK_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_DARK_RED, IF(signal2 > 0, COLOR_DARK_GREEN, COLOR_GRAY))