Panel oscillator
An oscillator in the panel below the chart: a smoothed aggression reading on a fixed scale, with its signal line, a filled body, a zero level and the crossings marked.
//@xfscript 1
indicator("Aggression Oscillator")
let smooth: int = input.int(14, "smooth", "Smoothing", 1, 200, 1)
let signal_length: int = input.int(9, "signalLength", "Signal", 1, 200, 1)
let trigger: float = input.float(40, "trigger", "Trigger level", 5, 100, 5)
let up_color: color = input.color("#22C55E", "upColor", "Positive")
let down_color: color = input.color("#EF4444", "downColor", "Negative")
let signal_color: color = input.color("#E5E7EB", "signalColor", "Signal")
let raw: float = tape.delta() / tape.volume() * 100
let oscillator: float = ta.ema(nz(raw, 0), smooth)
let signal: float = ta.ema(oscillator, signal_length)
let histogram: float = oscillator - signal
plot.panel_range(-100, 100)
plot.panel_area(oscillator, up_color, 0.16)
plot.panel_line(oscillator, up_color, 2, "solid")
plot.panel_line(signal, signal_color, 1, "dashed")
plot.panel_hline(0, "#6B7280", "dotted", "Flat")
plot.panel_hline(trigger, down_color, "dotted", "High")
plot.histogram(histogram, up_color, down_color)
plot.marker(ta.crossover(oscillator, signal), low, up_color, "square", "below", 7, 2)
plot.marker(ta.crossunder(oscillator, signal), high, down_color, "square", "above", 7, 2)