Buon tentativo… ‘Colorbetween’ è un cliente ingannevole in questo caso.
Non lo capisco ancora del tutto, ma posso usare abbastanza per portare a termine il lavoro per ora.
Druby
// 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
cUpperBand3 = iSMA + iSTD3 // ----3----
cUpperBand2 = iSMA + iSTD2 // ----2----
cUpperBand1 = iSMA + iSTD1 // ----1----
cMiddleBand = iSMA // ----0----
cLowerBand1 = iSMA - iSTD1 // ----1----
cLowerBand2 = iSMA - iSTD2 // ----2----
cLowerBand3 = iSMA - iSTD3 // ----3----
// 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, trend only changed by iSTD1
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 = up then
r = 0
g = 255
a1 = 90 // on upperband 3 green
a2 = 70 // on upperband 2 green
a3 = 50 // on upperband 1 green
a4 = 30 // on lowerband 1 green
a5 = 0 // off upperBand 1 red
a6 = 0 // off lowerBand 1 red
a7 = 0 // off lowerBand 2 red
a8 = 0 // off lowerBand 3 red
elsif trend = down then
r = 255
g = 0
a1 = 0 // off upperband 3 green
a2 = 0 // off upperband 2 green
a3 = 0 // off upperband 1 green
a4 = 0 // off lowerband 1 green
a5 = 30 // on upperBand 1 red
a6 = 50 // on lowerBand 1 red
a7 = 70 // on lowerBand 2 red
a8 = 90 // on lowerBand 3 red
endif
// band colors - # turn of any conflicting 'colour zones' in 'config settings'!!!
// green
colorbetween(cUpperBand2,cUpperBand3, r,g,0,a1) // upperBand3 green - trend up
colorbetween(cUpperBand1,cUpperBand2, r,g,0,a2) // upperBand2 green - trend up
colorbetween(cMiddleBand,cUpperBand1, r,g,0,a3) // upperBand1 green - trend up
colorbetween(cMiddleBand,cLowerBand1, r,g,0,a4) // lowerBand1 green - trend up
// red
colorbetween(cMiddleBand,cUpperBand1, r,g,0,a5) // upperBand1 red - trend down
colorbetween(cMiddleBand,cLowerBand1, r,g,0,a6) // lowerBand1 red - trend down
colorbetween(cLowerBand1,cLowerBand2, r,g,0,a7) // upperBand2 red - trend down
colorbetween(cLowerBand2,cLowerBand3, r,g,0,a8) // upperBand3 red - trend down
return ts coloured(r,g,50) style(line,1) as "dev", cMiddleBand coloured(r,g,50) style(dottedline,1)as "sma"