ProRealCode - Trading & Coding with ProRealTime™
Buonasera (Buongiorno),
mi stavo chiedendo se fosse possibile colorare le bande di bollinger di verde o di rosso, alternativamente, in modo condizionato, in modo simile a quanto avviene già (visivamente) per l’indicatore supertrend, ma senza nascondere del tutto la banda che è stata violata dai prezzi; ovvero, va colorata di un verde acceso la banda inferiore quando i prezzi superano in chiusura la banda superiore (a 1 deviazione standard) che a questo punto va colorata di un verde più tenue e tratteggiato medio; tutto ciò deve rimanere così fino a quando non si inverte totalmente la tendenza e i prezzi vanno a chiudere sotto la banda inferiore (a 1 deviazione standard) e a tal punto la banda superiore si deve colorare di un rosso acceso mentre quella inferiore di un rosso più tenue tratteggiato medio, fino a quando i prezzi non vanno a chiudere di nuovo sopra la banda superiore di bollinger e così via … la media centrale (a 12 periodi) deve rimanere sempre invisibile …
Grazie mille in anticipo per il prezioso aiuto che mi vorrete dare
P
XXXXXXXXXXXXXXXXX
Per favore non inserire informazioni personali nei post (email, telefonoi, indirizzo ecc…).
Grazie 🙂
Quanto prima te lo farò.
Grazie mille in anticipo, per quanto riguarda i colori non è necessario che i due verdi e i due rossi delle due bande siano diversi tra loro, basta che uno sia tratteggiato medio (quello della banda violata dai prezzi) e l’altro linea continua, grazie.
P
La tratteggiatura non è possibile variarla di volta in volta, meglio usare colori più accesi o più tenui.
Per difetto quando il prezzo è all’interno delle bande il colore l’ho fatto celeste (cyan). Qui c’è l’elenco dei colori, in questo caso devi utilizzare quello numerico nel formato RGB (Red, Green,Blue) e T (Trasparenza) che può andare da 0 a 255, dove 0=invisibile https://www.prorealcode.com/documentation/coloured/.
BBper = 20 //20 periodi BB
BBdev = 1.0 //1.0 deviazione BB
// VERDE default
Rs = 0
Gs = 191
Bs = 255
Ts = 255
//
Ri = 0
Gi = 191
Bi = 255
Ti = 255
//
BBavg = average[BBper,0](close) //BB linea Mediana
BandaSup = BBavg + ((std[BBper](close)) * BBdev) //BB banda Superiore
BandaInf = BBavg - ((std[BBper](close)) * BBdev) //BB banda Inferiore
//
IF close > BandaSup THEN
Ri = 173 //VERDE acceso
Gi = 255
Bi = 47
Ti = 255
//
Rs = 46 //VERDE tenue
Gs = 139
Bs = 87
Ts = 100
ENDIF
IF close < BandaInf THEN
Rs = 255 //ROSSO acceso
Gs = 0
Bs = 0
Ts = 255
//
Ri = 178 //ROSSO tenue
Gi = 34
Bi = 34
Ti = 100
ENDIF
return BandaSup AS "Banda Superiore" style(line,3) coloured(Rs,Gs,Bs,Ts),BandaInf AS "Banda Inferiore" style(line,3) coloured(Ri,Gi,Bi,Ti)
Grazie mille Roberto del cortese e veloce riscontro, domani lo testo e ti faccio sapere
Cordialmente
P
Ho testato il tuo lavoro Roberto, mi dispiace dirlo ma è lontano anni luce da quello che desideravo.
A me serviva, come ti avevo scritto, un indicatore simile al supertrend ma applicato alle logiche delle bollinger bands, ovvero con la deviazione standard come base di calcolo. Ho passato delle notti intere a guardare bene nella library e alla fine dopo estenuanti ricerche ho trovato qualcosa di molto simile a quello che desideravo io; ho studiato un po’ il prorealcode e mi sono messo a modificarlo e alla fine il risultato è arrivato, ho il mio indicatore perfettamente funzionante …
Per chi fosse interessato si tratta di un indicatore di tendenza basato su una meda mobile semplice a 13 periodi con una sola bollinger a 1 deviazione std che funge alternativamente da supporto o resistenza, inserisco qui sotto il codice. Ovviamente da una marea di falsi segnali (come il supertrend) ma se si usa in modalità multitime-frame e avendo l’accortezza di lavorare solo sui pullback funziona benissimo, sia per il medio e lungo termine, sia per il day trading sia per lo scalping!!!
Un saluto cordiale al forum
P
// --- settings
SignalPeriod = 13
ArrowPeriod = 1
// --- end of settings
bbup = average[signalperiod]+std[signalperiod]*arrowperiod
bbdn = average[signalperiod]-std[signalperiod]*arrowperiod
signal = average[signalperiod]
if ts=0 and signalpos=0 then
if close crosses over bbup then
ts=bbdn
signalpos=signal
trend=1
elsif close crosses under bbdn then
ts=bbup
signalneg=signal
trend=-1
endif
endif
if trend=1 then
// ts=max(ts,bbdn)
ts=bbdn
signalpos=signal
elsif trend=-1 then
// ts=min(ts,bbup)
ts=bbup
signalneg=signal
endif
if trend=1 and close crosses under ts then
trend=-1
signalneg=signal
ts=bbup
r=255
g=0
drawarrowdown(barindex,ts) coloured("red")
// drawsegment(startbar,startts,barindex,ts) style(dottedline2) coloured("blue")
startbar=barindex
startts=ts
endif
if trend=-1 and close crosses over ts then
trend=1
signalpos=signal
ts=bbdn
r=0
g=255
drawarrowup(barindex,ts) coloured("lime")
// drawsegment(startbar,startts,barindex,ts) style(dottedline2) coloured("blue")
startbar=barindex
startts=ts
endif
return ts coloured(r,g,50) style(line,1), signal coloured (r,g,50) style(dottedline,1)
Ciao,
mi chiedevo se fosse possibile a determinate condizioni assegnare al trend valori diversi da 1 o -1 in modo da creare un indicatore vero e proprio (separato dal grafico) in modo da associarvi un allarme.
In parole povere, con un trend positivo (=1), se il prezzo fa un minimo sotto il ts (che è la bollinger down) ma chiude sopra il ts stesso (quindi non cambia il trend) ed inoltre chiude sopra la chiusura della barra precedente (in real time tick by tick), allora il trend assumerebbe un valore 2 invece che 1 e verrebbe anche disegnata un freccia verde sul grafico principale, similmente a quando cambia il trend in positivo. La situazione speculare sarebbe quella in caso di trend negativo (=-1), con una candela successiva che fa un massimo sopra il ts (che è la bollinger up), chiusura sotto il ts stesso e chiusura sotto la chiusura della barra precedente (in real time tick by tick); in tal caso il trend assumerebbe un valore pari a -2 invece che -1 e verrebbe anche disegnata un freccia rossa sul grafico principale.
Ho provato a mettere giù qualche riga di codice aggiuntivo ma non cambia più il trend correttamente come prima da verde a rosso e viceversa … non so come risolvere, mi riuscite ad aiutare per favore?
Grazie mille in anticipo
Cordialmente
P
if trend=1 and close[1]>ts and low<ts and close>ts and close>close[1] then
trend=2
signalpos=signal
ts=bbdn
r=0
g=255
drawarrowup(barindex,ts) coloured("lime")
startbar=barindex
startts=ts
endif
if trend=-1 and close[1]<ts and high>ts and close<ts and close<close[1] then
trend=-2
signalneg=signal
ts=bbup
r=255
g=0
drawarrowdown(barindex,ts) coloured("red")
startbar=barindex
startts=ts
endif
In pratica quando avviene un setup come quello visibile nell’immagine con test e tenuta del ts (bollinger down, linea verde continua) allora il trend assumerebbe un valore pari a 2 e si disegnerebbe una freccia verde alla base della candela. In aggiunta dovrebbe visualizzarsi in finestra separata il valore del ts che passa da 1 a 2.
Grazie dell’attenzione
Cordialmente
P
Puoi aggiungere queste righe proprio prima dell’ultima (quella con RETURN):
//----------------------------------------------------------------
IF Trend = 1 THEN
if low < ts and close > ts and close > close[1] then
Trend = 2
drawarrowup(barindex,ts) coloured("lime")
endif
ELSIF Trend = -1 THEN
if high > ts and close < ts and close < close[1] then
Trend = -2
drawarrowdown(barindex,ts) coloured("red")
endif
ENDIF
//----------------------------------------------------------------
però non funziona correttamente, perché una volta che gli viene assegnato 2 o -2, il resto del codice non riconosce questi valori (quindi va variata laprima parte del codice), inoltre quand’è che 2 e -2 devono ritornare a 1 e -1?
Grazie del feedback Roberto,
effettivamente ho inserito il codice e da lo stresso problema di quello che avevo provato ad inserire io, ovvero non cambia più il trend da positivo a negativo e viceversa. In pratica, con questa variante che vorrei introdurre, il trend passerebbe da +1 a +2 per poi tornare direttamente a -1 (in caso di inversione) senza poter più passare da +1. Viceversa, con il passaggio da -1 a -2 il trend tornerebbe poi direttamente a +1 senza poter passare da -1. Forse va inserito nella parte iniziale del codice >0 o <0 invece che =1 o =-1 ?
Puoi postare l’ultimo codice funzionante che hai provato (anche se non fa esattamente quello che vuoi), perché altrimenti tra i vari aggiornamenti parziali non so quale provare.
Certo Roberto, qui sotto trovi il codice funzionante con trend che passa da 1 a -1 e viceversa ….. a proposito, un problema che da questo codice, ma non del tutto importante, è che al primo trend che passa da 0 a 1 oppure a -1 non si colora niente, anzi si creano delle tracciature molto scure sulla bollinger che si dovrebbe colorare che coprono tutto ….
// --- settings
SignalPeriod = 13
ArrowPeriod = 1
// --- end of settings
bbup = average[signalperiod]+std[signalperiod]*arrowperiod
bbdn = average[signalperiod]-std[signalperiod]*arrowperiod
signal = average[signalperiod]
if ts=0 and signalpos=0 then
if close crosses over bbup then
ts=bbdn
signalpos=signal
trend=1
elsif close crosses under bbdn then
ts=bbup
signalneg=signal
trend=-1
endif
endif
if trend=1 then
// ts=max(ts,bbdn)
ts=bbdn
signalpos=signal
elsif trend=-1 then
// ts=min(ts,bbup)
ts=bbup
signalneg=signal
endif
if trend=1 and close crosses under ts then
trend=-1
signalneg=signal
ts=bbup
r=255
g=0
drawarrowdown(barindex,ts) coloured("red")
// drawsegment(startbar,startts,barindex,ts) style(dottedline2) coloured("blue")
startbar=barindex
startts=ts
endif
if trend=-1 and close crosses over ts then
trend=1
signalpos=signal
ts=bbdn
r=0
g=255
drawarrowup(barindex,ts) coloured("lime")
// drawsegment(startbar,startts,barindex,ts) style(dottedline2) coloured("blue")
startbar=barindex
startts=ts
endif
return ts coloured(r,g,50) style(line,1), signal coloured (r,g,50) style(dottedline,1)
FM, è questo quello che stai cercando per quanto riguarda le bande di colore.
Se necessario, è possibile nascondere la riga ‘ts’ dalla finestra di configurazione.
Rimuovi anche tutte le zone di colore predefinite che interferiscono con i colori della banda, una può essere impostata automaticamente.
Inoltre, in origine hai citato un periodo di 12, ma il codice è stato modificato in 13.
Potresti spiegare come stai utilizzando i segnali rispetto alla direzione del trading e ai punti di ingresso, stop e target proposti.
druby.
// Ref:
// Bollinger Bands --> https://www.britannica.com/money/bollinger-bands-indicator
// https://www.prorealcode.com/topic/colore-indicatore-condizionato/
// constants
period = 13
deviation = 1
up = 1
down = -1
begin = 1
null = 0
// (i) indicators
iSTD = deviation * STD[period](close)
iSMA = Average[period,0](close)
// (c) conditions
cUpperBand = iSMA + iSTD
cMiddleBand = iSMA
cLowerBand = iSMA - iSTD
// delay start
if begin = 1 and barindex < period then // hold off till enough bar present
ts = undefined // removes ts tangent line from 0 til real value available
else
begin = 0
endif
// logic operation
// setup block --> When 'begin' = 0, executes next block.
// Since 'trend' default = 0, being set to 1 or -1 will
// allow the 'following' logic code blocks to be executed
// Bollinger Logic -----------
// initial, set trend
if begin = null then
if close crosses over cUpperband then
trend = up
elsif close crosses under cLowerBand then
trend = down
endif
endif
// following from first time after trend set!
// change of trend, up --> down
if trend = up and close crosses under cLowerBand then
trend = down
endif
// change of trend, down --> up
if trend = down and close crosses over cUpperBand then
trend = up
endif
// set 'ts' values to appropriate band threshold level
if trend = up then
ts = cLowerBand
elsif trend = down then
ts = cUpperBand
endif
// drawing ==============================================================================
os = 5 // drawing offset
// arrow and set colors
if trend = down and trend[1] = up then
drawarrowdown(barindex,ts+os) coloured("red",255)
elsif trend = up and trend[1] = down then
drawarrowup(barindex,ts-os) coloured("lime",255)
endif
// color settings
if trend = down then
r = 255
g = 0
a1 = 90 // upperBand red
a2 = 60 // lowerBand red
a3 = 0
a4 = 0
elsif trend = up then
r = 0
g = 255
a1 = 0
a2 = 0
a3 = 50 // upperBand green
a4 = 90 // bottomBand green
endif
// band colors
colorbetween(cMiddleBand,cUpperBand, r,g,0,a1) // upperBand red - trend down
colorbetween(cMiddleBand,cLowerBand, r,g,0,a2) // lowerBand red - trend down
colorbetween(cMiddleBand,cUpperBand, r,g,0,a3) // upperBand green - trend up
colorbetween(cMiddleBand,cLowerBand, r,g,0,a4) // lowerBand green - trend up
return ts coloured(r,g,50) style(line,1) as "ts", cMiddleBand coloured(r,g,50) style(dottedline,1)as "signal"
Druby,
grazie della colorazione che gli hai dato, è interessante e da un buon colpo d’occhio, ed hai anche ovviato al problema che mi dava in precedenza, lavoro molto bello, complimenti!
Quest’indicatore io lo utilizzo su molteplici timeframe contemporaneamente, in modo da monitorare tutti i possibili trend presenti su un indice oppure su un titolo: il funzionamento è molto simile al supertrend: dopo un cambio di trend, prima di effettuare l’entrata a mercato, attendo però un ritorno dei prezzi o sulla media tratteggiata o sulla bollinger opposta; in caso di tenuta di uno dei due di questi indicatori di trend, entro a mercato solo quando il prezzo supera il massimo della candela precedente (in caso di long), o quando il prezzo scende sotto il minimo della candela precedente (in caso di short).
Sarebbe molto bello se si riuscisse a migliorare ulteriormente l’indicatore dando un valore di +2 0 -2 al verificarsi della suddetta situazione di pullback e ripartenza del trend, avendo magari un indicatore separato con alert collegato.
Un saluto, complimenti ancora per il lavoro!
PaFM
Chiedo aiuto, ho voluto aggiungere la colorazione anche alla 2° e 3° deviazione standard, ma credo di aver fatto confusione … vorrei che si colorassero di verde progressivo le 4 fasce rialziste quando il trend è up, e in rosso progressivo le quattro fasce ribassiste quando il trend è down, ma le colorazioni al cambio di trend proseguono e non si alternano correttamente
// constants
period = 13
deviation1 = 1
deviation2 = 2
deviation3 = 3
up = 1
down = -1
begin = 1
null = 0
// (i) indicators
iSTD1 = deviation1 * STD[period](close)
iSTD2 = deviation2 * STD[period](close)
iSTD3 = deviation3 * STD[period](close)
iSMA = Average[period,0](close)
// (c) conditions
cUpperBand1 = iSMA + iSTD1
cUpperBand2 = iSMA + iSTD2
cUpperBand3 = iSMA + iSTD3
cMiddleBand = iSMA
cLowerBand1 = iSMA - iSTD1
cLowerBand2 = iSMA - iSTD2
cLowerBand3 = iSMA - iSTD3
// delay start
if begin = 1 and barindex < period then // hold off till enough bar present
ts = undefined // removes ts tangent line from 0 til real value available
else
begin = 0
endif
// logic operation
// setup block --> When 'begin' = 0, executes next block.
// Since 'trend' default = 0, being set to 1 or -1 will
// allow the 'following' logic code blocks to be executed
// Bollinger Logic -----------
// initial, set trend
if begin = null then
if close crosses over cUpperband1 then
trend = up
elsif close crosses under cLowerBand1 then
trend = down
endif
endif
// following from first time after trend set!
// change of trend, up --> down
if trend = up and close crosses under cLowerBand1 then
trend = down
endif
// change of trend, down --> up
if trend = down and close crosses over cUpperBand1 then
trend = up
endif
// set 'ts' values to appropriate band threshold level
if trend = up then
ts = cLowerBand1
elsif trend = down then
ts = cUpperBand1
endif
// drawing ==============================================================================
// color settings
if trend = down then
r = 255
g = 0
colorbetween(cMiddleBand,cUpperBand1, r,g,0,30)
colorbetween(cMiddleBand,cLowerBand1, r,g,0,50)
colorbetween(cLowerBand1,cLowerBand2, r,g,0,70)
colorbetween(cLowerBand2,cLowerBand3, r,g,0,90)
colorbetween(cUpperBand1,cUpperBand2, 0,0,0,00)
colorbetween(cUpperBand2,cUpperBand3, 0,0,0,00)
elsif trend = up then
r = 0
g = 255
colorbetween(cMiddleBand,cUpperBand1, r,g,0,50)
colorbetween(cMiddleBand,cLowerBand1, r,g,0,30)
colorbetween(cUpperBand1,cUpperBand2, r,g,0,70)
colorbetween(cUpperBand2,cUpperBand3, r,g,0,90)
colorbetween(cLowerBand1,cLowerBand2, 0,0,0,00)
colorbetween(cLowerBand2,cLowerBand3, 0,0,0,00)
endif
// band colors
return ts coloured(r,g,50) style(line,1) as "dev", cMiddleBand coloured(r,g,50) style(dottedline,1)as "sma"
COLORE INDICATORE CONDIZIONATO
This topic contains 17 replies,
has 3 voices, and was last updated by PaFM
2 years ago.
| Forum: | ProBuilder: Indicatori & Strumenti Personalizzati |
| Language: | Italian |
| Started: | 02/02/2024 |
| Status: | Active |
| Attachments: | 3 files |
The information collected on this form is stored in a computer file by ProRealCode to create and access your ProRealCode profile. This data is kept in a secure database for the duration of the member's membership. They will be kept as long as you use our services and will be automatically deleted after 3 years of inactivity. Your personal data is used to create your private profile on ProRealCode. This data is maintained by SAS ProRealCode, 407 rue Freycinet, 59151 Arleux, France. If you subscribe to our newsletters, your email address is provided to our service provider "MailChimp" located in the United States, with whom we have signed a confidentiality agreement. This company is also compliant with the EU/Swiss Privacy Shield, and the GDPR. For any request for correction or deletion concerning your data, you can directly contact the ProRealCode team by email at privacy@prorealcode.com If you would like to lodge a complaint regarding the use of your personal data, you can contact your data protection supervisory authority.