Order flow on the price axis: buy and sell volume of every bar (the chart's real buy / sell volume when it supplies it, else bulk volume classification) spread over the bar's range and summed by price over the visible bars, plus a second pane with the net delta at each close.
QuaScriptengine result
Loading the engine result…
quatick-charts · QuaScript engine on synthetic 1-minute bars · drag to pan · scroll to zoom · Run executes the script on the engine (⌘/Ctrl+Enter while editing)
delta_at_price.qs
analysis "Delta at Price" {
pane = vpane
width = 150
}
/// Order flow on the price axis: buy and sell volume of every bar (the chart's real buy / sell
/// volume when it supplies it, else bulk volume classification) spread over the bar's range and
/// summed by price over the visible bars, plus a second pane with the net delta at each close.
rows = param.int(48, title = "Rows", min = 8, max = 200)
win = param.int(20, title = "Classification window", min = 5, max = 200)
(buy, sell, imb) = hft.flow(win)
render.vpane.histogram(buy, value2 = sell, low = low, high = high, rows = rows, title = "Buy | Sell",
color = color.emerald.400, color2 = color.rose.500)
render.vpane.histogram(buy - sell, price = close, rows = rows, title = "Net delta",
color = color.teal.400, color2 = color.red.500, show_poc = false)
Average RSI of the bars that closed in each price row: where buyers (high) or sellers (low) were in control. The window is the last 1000 bars, so the pane follows the live market.
QuaScriptengine result
Loading the engine result…
quatick-charts · QuaScript engine on synthetic 1-minute bars · drag to pan · scroll to zoom · Run executes the script on the engine (⌘/Ctrl+Enter while editing)
momentum_at_price.qs
analysis "Momentum at Price" {
pane = vpane
width = 120
}
/// Average RSI of the bars that closed in each price row: where buyers (high) or sellers (low)
/// were in control. The window is the last 1000 bars, so the pane follows the live market.
len = param.int(14, title = "RSI length", min = 2, max = 100)
r = ta.rsi(close, len)
render.vpane.histogram(r - 50, price = close, aggregate = "mean", period = "bars", bars = 1000,
rows = 40, title = "RSI - 50", color = color.lime.400, color2 = color.orange.500, show_poc = false)
The chart's own price-axis profiles next to each other: visible-range volume with point of control and value area, a market profile (TPO) of the session, and time spent at each price. VWAP stays on the price pane for reference.
QuaScriptengine result
Loading the engine result…
quatick-charts · QuaScript engine on synthetic 1-minute bars · drag to pan · scroll to zoom · Run executes the script on the engine (⌘/Ctrl+Enter while editing)
profile_columns.qs
analysis "Profile Columns" {
pane = vpane
}
/// The chart's own price-axis profiles next to each other: visible-range volume with point of
/// control and value area, a market profile (TPO) of the session, and time spent at each price.
/// VWAP stays on the price pane for reference.
va = param.float(0.7, title = "Value area", min = 0.5, max = 0.95, step = 0.05)
render.vpane.profile(kind = "volume", value_area = va, width = 130, title = "VPVR")
render.vpane.profile(kind = "tpo", width = 120, title = "TPO")
render.vpane.profile(kind = "time_at_price", width = 90, title = "Time")
(vw, _, _) = ta.vwap(bar.typical)
render.line(vw, "VWAP", color = color.amber.400, width = 2)
Where the market is violent and where it is rejected. The first pane spreads each bar's true range over its high-low range and sums it by price, so wide-range areas stand out. The second pane sums the wick volume of each bar over its upper wick (sellers rejecting, red) and lower wick (buyers rejecting, green).
QuaScriptengine result
Loading the engine result…
quatick-charts · QuaScript engine on synthetic 1-minute bars · drag to pan · scroll to zoom · Run executes the script on the engine (⌘/Ctrl+Enter while editing)
volatility_at_price.qs
analysis "Volatility & Rejection at Price" {
pane = vpane
width = 150
}
/// Where the market is violent and where it is rejected. The first pane spreads each bar's true
/// range over its high-low range and sums it by price, so wide-range areas stand out. The second
/// pane sums the wick volume of each bar over its upper wick (sellers rejecting, red) and lower
/// wick (buyers rejecting, green).
rows = param.int(60, title = "Rows", min = 10, max = 200)
tr = ta.true_range()
render.vpane.histogram(tr, low = low, high = high, rows = rows, period = "bars", bars = 400, title = "Range at price",
color = color.violet.400, poc_color = color.amber.300)
rng = math.max(high - low, 1e-12)
up_w = volume * (high - math.max(open, close)) / rng
dn_w = volume * (math.min(open, close) - low) / rng
render.vpane.histogram(dn_w, value2 = up_w, low = low, high = high, rows = rows, period = "bars", bars = 400,
title = "Wick rejection", color = color.emerald.400, color2 = color.rose.500, show_poc = false)