''fill' between two lines? Pine-script
How can I fill up an area with yellow between fib 50 and fib 61.8 lines (probably around line 111 in the script @ 'fibolines'), e.g. using fill?
I have tried playing around with:
hh1 = hline(y1, color = color.gray, linestyle = hline.style_solid, linewidth=1)
hh2 = hline(y2, color = color.gray, linestyle = hline.style_solid, linewidth=1)
fill(hh1,hh2,color=color.yellow, title="Background")
but it gives errors because of y1 and y2. Source code:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © LonesomeTheBlue
//@version=4
study("ModifiedLonesomeTheBlue", overlay = true, max_bars_back = 500, max_lines_count = 300)
prd = input(defval = 15, title="ZigZag Period", minval = 2, maxval = 50)
showzigzag = input(defval = true, title = "Show Zig Zag")
showfibo = input(defval = true, title = "Show Fibonacci Ratios")
labelcol = input(defval = color.blue, title = "Text Color")
fibolinecol = input(defval = color.blue, title = "Line Color")
upcol = input(defval = color.blue, title = "Zigzag Up Color")
dncol = input(defval = color.blue, title = "Zigzag Down Color")
labelloc = input(defval = "Left", title = "Label Location", options = ["Left", "Right"])
enable236 = input(defval = false, title = "Enable Level 0.236")
enable382 = input(defval = false, title = "Enable Level 0.382")
enable500 = input(defval = true, title = "Enable Level 0.500")
enable618 = input(defval = true, title = "Enable Level 0.618")
enable786 = input(defval = false, title = "Enable Level 0.786")
enable1618 = input(defval = false, title = "Enable Level 1.618")
var fibo_ratios = array.new_float(0)
var shownlevels = 1
if barstate.isfirst
array.push(fibo_ratios, 0.000)
if enable236
array.push(fibo_ratios, 0.236)
shownlevels := shownlevels + 1
if enable382
array.push(fibo_ratios, 0.382)
shownlevels := shownlevels + 1
if enable500
array.push(fibo_ratios, 0.500)
shownlevels := shownlevels + 1
if enable618
array.push(fibo_ratios, 0.618)
shownlevels := shownlevels + 1
if enable786
array.push(fibo_ratios, 0.786)
shownlevels := shownlevels + 1
if enable1618
array.push(fibo_ratios, 1.618)
shownlevels := shownlevels + 1
for x = 1 to 1
array.push(fibo_ratios, x)
// array.push(fibo_ratios, x + 0.272)
// array.push(fibo_ratios, x + 0.414)
// array.push(fibo_ratios, x + 0.618)
float ph = highestbars(high, prd) == 0 ? high : na
float pl = lowestbars(low, prd) == 0 ? low : na
var dir = 0
dir := iff(ph and na(pl), 1, iff(pl and na(ph), -1, dir))
var max_array_size = 10
var zigzag = array.new_float(0)
add_to_zigzag(value, bindex)=>
array.unshift(zigzag, bindex)
array.unshift(zigzag, value)
if array.size(zigzag) > max_array_size
array.pop(zigzag)
array.pop(zigzag)
update_zigzag(value, bindex)=>
if array.size(zigzag) == 0
add_to_zigzag(value, bindex)
else
if (dir == 1 and value > array.get(zigzag, 0)) or (dir == -1 and value < array.get(zigzag, 0))
array.set(zigzag, 0, value)
array.set(zigzag, 1, bindex)
0.
Round_it(value)=> round(value / syminfo.mintick) * syminfo.mintick
dirchanged = change(dir)
if ph or pl
if dirchanged
add_to_zigzag(dir == 1 ? ph : pl, bar_index)
else
update_zigzag(dir == 1 ? ph : pl, bar_index)
if showzigzag and array.size(zigzag) >= 4
var line zzline = na
float val = array.get(zigzag, 0)
int point = round(array.get(zigzag, 1))
if change(val) or change(point)
float val1 = array.get(zigzag, 2)
int point1 = round(array.get(zigzag, 3))
if change(val1) == 0 and change(point1) == 0
line.delete(zzline)
zzline := line.new(x1 = point, y1 = val, x2 = point1, y2 = val1, color = dir == 1 ? upcol : dncol, width = 2)
var fibolines = array.new_line(0)
var fibolabels = array.new_label(0)
if showfibo and array.size(zigzag) >= 6 and barstate.islast
if array.size(fibolines) > 0
for x = 0 to array.size(fibolines) - 1
line.delete(array.get(fibolines, x))
label.delete(array.get(fibolabels, x))
diff = array.get(zigzag, 4) - array.get(zigzag, 2)
stopit = false
for x = 0 to array.size(fibo_ratios) - 1
if stopit and x > shownlevels
break
array.unshift(fibolines,
line.new(x1 = round(array.get(zigzag, 5)),
y1 = array.get(zigzag, 2) + diff * array.get(fibo_ratios, x),
x2 = bar_index,
y2 = array.get(zigzag, 2) + diff * array.get(fibo_ratios, x),
color = fibolinecol,
extend = extend.right))
label_x_loc = labelloc == "Left" ? time[bar_index - (round(array.get(zigzag, 5)) - 1)] : time + 15 * (time - time[1])
array.unshift(fibolabels,
label.new( x = label_x_loc,
y = array.get(zigzag, 2) + diff * array.get(fibo_ratios, x),
//text = tostring(array.get(fibo_ratios, x), '#.###') + "(" + tostring(Round_it(array.get(zigzag, 2) + diff * array.get(fibo_ratios, x))) + ")",
text = tostring(array.get(fibo_ratios, x), '#.###'),
xloc = xloc.bar_time,
textcolor = labelcol,
style = label.style_none))
if (dir == 1 and array.get(zigzag, 2) + diff * array.get(fibo_ratios, x) > array.get(zigzag, 0)) or
(dir == -1 and array.get(zigzag, 2) + diff * array.get(fibo_ratios, x) < array.get(zigzag, 0))
stopit := true
Solution 1:[1]
Have a read of the new release information about:
linefill.new
https://www.tradingview.com/pine-script-docs/en/v5/Release_notes.html
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | frien_dd |
