Untitled
unknown
plain_text
5 months ago
3.5 kB
19
Indexable
//@version=5 indicator('Single Zig Zag with HHLL', overlay=true, max_bars_back=1000) // Input for ZigZag period prd = input.int(defval=14, title='ZigZag Period', minval=2, maxval=500) // Input for showing ZigZag and HHLL showzz = input.string(defval='Show', title='Show Zig Zag', options=['Show', 'Hide']) showhhll = input.string(defval='Show', title='Show HHLL', options=['Show', 'Hide']) // Colors are now fixed upcol = color.new(#ffb74d, 0) // Fixed color for Zig Zag Up dncol = color.new(#ffb74d, 0) // Fixed color for Zig Zag Down txtcol = color.black zzstyle = input.string(defval='Solid', title='Zig Zag Line Style', options=['Solid', 'Dashed', 'Dotted']) zzwidth = input.int(defval=2, title='Zig Zag Line Width', minval=1, maxval=4) // Variables to store high and low points float ph = ta.highestbars(high, prd) == 0 ? high : na float pl = ta.lowestbars(low, prd) == 0 ? low : na var dir = 0 // Variable to track direction (1 = up, -1 = down) iff_1 = pl and na(ph) ? -1 : dir dir := ph and na(pl) ? 1 : iff_1 var max_array_size = 10 // Define the maximum array size var zigzag = array.new_float(0) oldzigzag = array.copy(zigzag) // Function to add points to the zigzag array add_to_zigzag(pointer, value, bindex) => array.unshift(pointer, bindex) array.unshift(pointer, value) if array.size(pointer) > max_array_size array.pop(pointer) array.pop(pointer) // Function to update zigzag points based on direction update_zigzag(pointer, value, bindex, dir) => if array.size(pointer) == 0 add_to_zigzag(pointer, value, bindex) else if dir == 1 and value > array.get(pointer, 0) or dir == -1 and value < array.get(pointer, 0) array.set(pointer, 0, value) array.set(pointer, 1, bindex) na // Check for direction change dirchanged = ta.change(dir) if ph or pl if dirchanged add_to_zigzag(zigzag, dir == 1 ? ph : pl, bar_index) else update_zigzag(zigzag, dir == 1 ? ph : pl, bar_index, dir) // Plot the zigzag and label HH/LL if there are enough points if array.size(zigzag) >= 6 var line zzline = na var label zzlabel = na if array.get(zigzag, 0) != array.get(oldzigzag, 0) or array.get(zigzag, 1) != array.get(oldzigzag, 1) if array.get(zigzag, 2) == array.get(oldzigzag, 2) and array.get(zigzag, 3) == array.get(oldzigzag, 3) line.delete(zzline) label.delete(zzlabel) if showzz == 'Show' zzline := line.new(x1=math.round(array.get(zigzag, 1)), y1=array.get(zigzag, 0), x2=math.round(array.get(zigzag, 3)), y2=array.get(zigzag, 2), color=dir == 1 ? upcol : dncol, width=zzwidth, style=zzstyle == 'Dashed' ? line.style_dashed : zzstyle == 'Dotted' ? line.style_dotted : line.style_solid) // Added Solid option zzline if showhhll == 'Show' hhlltxt = dir == 1 ? array.get(zigzag, 0) > array.get(zigzag, 4) ? 'HH' : 'LH' : array.get(zigzag, 0) < array.get(zigzag, 4) ? 'LL' : 'HL' labelcol = dir == 1 ? array.get(zigzag, 0) > array.get(zigzag, 4) ? upcol : dncol : array.get(zigzag, 0) < array.get(zigzag, 4) ? dncol : upcol zzlabel := label.new(x=math.round(array.get(zigzag, 1)), y=array.get(zigzag, 0), text=hhlltxt, color=labelcol, textcolor=txtcol, style=dir == 1 ? label.style_label_down : label.style_label_up) zzlabel
Editor is loading...
Leave a Comment