L’ho riscritto per mettere in ordine tutte le barre (è meglio se scarichi il file ITF):
DEFPARAM DrawOnLastBarOnly = True
ONCE HH = 0
ONCE LL = 0
ONCE HHprec = 0
ONCE LLprec = 0
ONCE RotturaHH = 0
ONCE RotturaLL = 0
ONCE RotturaMAX = 0
ONCE RotturaMIN = 0
ONCE FineHH = 0
ONCE FineLL = 0
ONCE FineMAX = 0
ONCE FineMIN = 0
ONCE BarraHH = 0
ONCE BarraLL = 0
ONCE BarraMAX = 0
ONCE BarraMIN = 0
//
IF BarIndex <= BarraFine THEN
// verifica ad inizio nuovo giorno
IF (OpenTime = 000000) OR (OpenTime < OpenTime[1]) THEN
HHprec = HH
LLprec = LL
HH = high
LL = low
BarraInizio= BarIndex
Apertura = open
RotturaHH = 0
RotturaLL = 0
RotturaMAX = 0
RotturaMIN = 0
FineHH = 0
FineLL = 0
FineMAX = 0
FineMIN = 0
BarraHH = 0
BarraLL = 0
BarraMAX = 0
BarraMIN = 0
IF HH > HHprec THEN
RotturaHH = 1
BarraHH = BarraInizio
PrezzoHH = high
FineHH = BarIndex
ENDIF
IF LL < LLprec THEN
RotturaLL = 1
BarraLL = BarraInizio
PrezzoLL = low
FineLL = BarIndex
ENDIF
ENDIF
// aggiornare i Massimi/Minimi delm giorno corrente
HH = max(HH,high)
LL = min(LL,low)
// Verificare se c'è stata una rottura dei Massimi/Minimi del Giorno Precedente
IF (HH > HHprec) AND (RotturaHH = 0) THEN
RotturaHH = 1
RotturaMAX= 0
PrezzoHH = high
FineHH = BarIndex
ELSIF (LL < LLprec) AND (RotturaLL = 0) THEN
RotturaLL = 1
RotturaMIN= 0
PrezzoLL = low
FineLL = BarIndex
ENDIF
// Verificare se i Massimi/Minimi correnti sono stati superati (purché ci sia stata la rottura opposta sui
// Massimi/Minimi del Giorno Precedente)
IF (HH > HH[1]) AND (RotturaMAX = 0) AND (RotturaLL = 1) AND (RotturaHH = 0) THEN
RotturaMAX = 1
InizioMAX = FineLL//BarIndex
PrezzoMAXi = PrezzoLL
PrezzoMAX = high
FineMAX = BarIndex
ENDIF
IF (LL < LL[1]) AND (RotturaMIN = 0) AND (RotturaHH = 1) AND (RotturaLL = 0) THEN
RotturaMIN = 1
InizioMIN = FineHH//BarIndex
PrezzoMINi = PrezzoHH
PrezzoMIN = low
FineMIN = BarIndex
ENDIF
// Verificare se i Massimi/Minimi (dopo la rottura del Giorno Precedente), aumentano/diminuiscono
IF (HH > PrezzoHH) AND (RotturaHH = 1) THEN
PrezzoHH = high
FineHH = BarIndex
ENDIF
IF (LL < PrezzoLL) AND RotturaLL = 1 THEN
PrezzoLL = low
FineLL = BarIndex
ENDIF
// Verificare se i Massimi/Minimi (dopo la rottura dei valori Giornalieri), aumentano/diminuiscono
IF (HH > PrezzoMAX) AND (RotturaMAX = 1) AND (RotturaHH = 0) AND (RotturaLL = 1) THEN
PrezzoMAX = high
FineMAX = BarIndex
ENDIF
IF (LL < PrezzoMIN) AND (RotturaMIN = 1) AND (RotturaHH = 1) AND (RotturaLL = 0) THEN
PrezzoMIN = low
FineMIN = BarIndex
ENDIF
//
Termina = BarIndex
ENDIF
DrawSegment(BarraInizio,HHprec,Termina,HHprec) coloured("Green") style(Line,2) //Verde
DrawSegment(BarraInizio,LLprec,Termina,LLprec) coloured("Blue") style(Line,2) //Blù
//
IF RotturaHH = 1 THEN
DrawSegment(BarraInizio,Apertura,FineHH,PrezzoHH) coloured("Red") style(Line,2) //Rosso
endif
//
IF RotturaLL = 1 THEN
DrawSegment(BarraInizio,Apertura,FineLL,PrezzoLL) coloured("Purple") style(Line,2) //Porpora
endif
//
IF RotturaMAX = 1 THEN
DrawSegment(InizioMAX,PrezzoMAXi,FineMAX,PrezzoMAX) coloured("Cyan") style(Line,2) //Celeste
endif
//
IF RotturaMIN = 1 THEN
DrawSegment(InizioMIN,PrezzoMINi,FineMIN,PrezzoMIN) coloured("Bisque") style(Line,2) //Sabbia
endif
//
RETURN
i colori delle varie barre (che vedi scritte anche nei commenti del codice) sono:
- VERDE Massimo del Giorno PRECEDENTE
- BLU Minimo del Giorno PRECEDENTE
- ROSSO rottura della barra VERDE
- POPRPORA rottura della barra BLU
- CELESTE rottura del Massimo del Giorno CORRENTE
- SABBIA rottura del Minimo del Giorno CORRENTE
Se vuoi variarli puoi sostituirli, nel codice, con altri a piacere tra quelli qui indicati https://www.prorealcode.com/wp-content/uploads/2015/09/P1jHlnG.jpg.
Nelle proprietà ti ho messo un numero finale della barra dove l’indicatore deve smettere di funzionare (tienilo con 6 o 7 “nove”, 9999999, in modo che non termini). Serve solo per il debugging, cioè la verifica del funzionamento, per le barre passate. Se tu vuoi verificarne il funzionamento dalla barra 260 (supponendo che adesso sia 1000 o più) mettici il valore 260 e poi incrementa quel numero col mouse barra dopo barra per vedere come le linee cambiano sul grafico.
Per conoscere il numero di barra di ogni candela utilizza questo indicatore (o scarica BarInfo.itf):
RETURN BarIndex AS "Bar ID"