Premium & Discount Delta Volumen ist ein fortschrittliches volumenbasiertes Tool, das Händlern hilft, Zonen mit Marktungleichgewichten zu identifizieren, indem es die Konzepte der Premium- und Discount-Preise nutzt, die üblicherweise von IKT-Händlern gelehrt werden. Es berechnet und hebt Zeiträume hervor, in denen der Markt mit einem Aufschlag (Verkaufsdruck ist stärker) oder einem Abschlag (Kaufdruck ist stärker) handelt, und stellt diese Zonen dynamisch im Zeitverlauf dar. Der Indikator berechnet auch das Delta-Volumen zwischen Kauf und Verkauf innerhalb dieser Zonen und zeigt Veränderungen in der Marktstimmung und potenzielle Bereiche für Umkehrungen oder Fortsetzungen an.
IDEE
Der Premium- und Discount-Delta-Volumenindikator basiert auf dem ICT-Konzept (Inner Circle Trader) von Premium- und Discountzonen. Dieses Konzept unterteilt die Preisbewegung in zwei Schlüsselzonen:
Premium-Zone: In diesem Bereich handelt der Markt auf einem Niveau, auf dem die Verkäufer dominieren, was zu mehr Verkaufsdruck führt. Die Idee dahinter ist, dass der Preis überbewertet ist und es zu einem potenziellen Rückgang kommen könnte, wenn der Markt zu einem ausgeglichenen Zustand zurückkehrt.
Rabattzone: In diesem Bereich ist der Markt unterbewertet, da die Käufer dominieren und Aufwärtsdruck ausüben. Preise in diesem Bereich weisen häufig auf Gelegenheiten hin, sich an der Stärke zu beteiligen, wenn der Markt wieder ins Gleichgewicht gelangt.
Das Herzstück des Indikators ist das Delta-Volumen, das die Differenz zwischen Kauf- und Verkaufsdruck innerhalb der Premium- und Discountzone misst. Wenn das Delta-Volumen negativ ist, signalisiert es einen Abwärtstrend mit mehr Verkaufsdruck, während ein positives Delta-Volumen einen Aufwärtstrend mit mehr Kaufdruck signalisiert. Diese Zonen und die damit verbundenen Delta-Werte werden dynamisch aktualisiert und bieten Händlern Echtzeiteinblicke in die Marktstärke und mögliche Preisumkehrungen.
Das Gleichgewicht in der Mitte der Prämien- und Rabattzone stellt den Gleichgewichtspunkt zwischen Käufern und Verkäufern dar. Wenn sich der Preis vom Gleichgewicht entfernt, gelangt er entweder in die Premiumzone (potenziell überkauft) oder in die Rabattzone (potenziell überverkauft), was Händlern hilft, fundiertere Entscheidungen auf der Grundlage von Volumen und Preisstruktur zu treffen.

HAUPTMERKMALE UND VERWENDUNG
Premium- und Rabattzonen:
Der Indikator identifiziert automatisch Prämien- und Rabattzonen und stellt sie im Diagramm dar. Premiumzonen zählen nur negative (Verkaufs-)Volumen, während Rabattzonen nur positive (Kauf-)Volumen zählen. Diese Zonen sind wichtige Bereiche von Interesse für die Identifizierung potenzieller Preisumkehrungen oder -fortsetzungen auf der Grundlage des Volumendrucks.
Dynamische Delta-Volumenberechnung:
Der Indikator berechnet das Deltavolumen zwischen den Premium- und Rabattzonen und zeigt das Ungleichgewicht zwischen Käufern und Verkäufern an. Ein positives Delta-Volumen innerhalb der Rabattzone deutet auf starken Kaufdruck hin, während ein negatives Delta innerhalb der Premiumzone auf starken Verkaufsdruck hindeutet. Dies hilft Händlern, Trends oder Markterschöpfung schnell zu erkennen.
Die Zonen aktualisieren sich dynamisch alle 100 Balken oder nachdem der Preis sie überschreitet, um sicherzustellen, dass Händler immer über die relevantesten Marktdaten verfügen. Die Gleichgewichtslinie in der Mitte der Zonen hilft Händlern zu beurteilen, ob der Markt ausgeglichen ist oder sich in den überkauften (Premium) oder überverkauften (Discount) Bereich bewegt.
Makro- und lokale Periodenberechnungen:
Der Indikator ermöglicht es Händlern, zwei verschiedene Zeiträume für die Analyse anzupassen: einen kleineren Lookback-Zeitraum (z. B. 50 Balken) für kurzfristige Preisbewegungen und einen Makrozeitraum (z. B. 200 Balken) für größere Trends. Jeder Zeitraum verfügt über eigene Prämien- und Rabattzonen, die einen Überblick über die Marktstärke über mehrere Zeiträume hinweg ermöglichen.
Die Hintergrundfarbe des Prämien- und Rabattfelds für kleinere Zeiträume ändert sich je nach Delta-Volumen. Ein positives Delta färbt den Hintergrund blau, was auf einen höheren Kaufdruck hinweist, während ein negatives Delta den Hintergrund rot färbt, was einen höheren Verkaufsdruck signalisiert.
ANPASSUNG
Prämie und Rabatt umschalten: Händler können wählen, ob sie Unterstützungs- und Widerstandsniveaus basierend auf den Hoch- und Tiefpunkten der Prämien- und Rabattzonen anzeigen möchten.
Premium- und Rabatt-Lookback-Zeitraum: Händler können den Lookback-Zeitraum anpassen, um die Länge der Preisbewegung zu definieren, die für Premium- und Rabattzonen analysiert werden soll. Ein kürzerer Zeitraum konzentriert sich auf aktuellere Marktaktivitäten, während ein längerer Zeitraum einen umfassenderen Überblick über Trends bietet.
Makro-Höchst-/Tiefs-Periode: Der Indikator bietet auch eine Makro-Rückblicksperiode zur Identifizierung größerer Markttrends und wichtiger Kauf- oder Verkaufsvolumina.
Makroebenen umschalten: Makroebenen helfen dabei, langfristige Preisextreme zu erkennen, und Händler können diese Funktion nach Bedarf ein- oder ausschalten.
Download Pine Script
TradingView Code – Pine Script
// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
// © BigBeluga
//@version=5
indicator("Premium & Discount Delta Volume [BigBeluga]",
overlay = true, max_lines_count = 2, max_boxes_count = 3)
// INPUTS --------------------------------------------------------------------------------------------------------------
// @variable: Toggle to show Support and Resistance levels
bool showSR = input.bool(true, "", inline = "0")
// @variable: Lookback period for calculating Support and Resistance
int srPeriod = input.int(50, "Premium & Discount Lookback Period", minval = 10, step = 10, inline = "0",
tooltip = "Lookback period for Premium & Discount Levels with Delta Volume")
// @variable: Toggle to show macro High and Low levels
bool showMacro = input.bool(true, "", inline = "1")
// @variable: Lookback period for calculating macro Highs and Lows
int macroPeriod = input.int(200, "Macro Lookback Period", minval = 10, step = 10, inline = "1",
tooltip = "Lookback period for Macro Highs/Lows and Delta Volume")
// Color variables for trends
color upColor = input.color(#79c1f1, "Discount", inline = "col", group = "Color")
color downColor = input.color(#f19579, "Premium", inline = "col", group = "Color")
// ARRAYS FOR STORING DATA ---------------------------------------------------------------------------------------------
// Arrays to store high/low data for S/R levels
var float[] srHighs = array.new_float(srPeriod, 0.)
var float[] srLows = array.new_float(srPeriod, 0.)
// Arrays to store high/low data for Macro levels
var float[] macroHighs = array.new_float(macroPeriod, 0.)
var float[] macroLows = array.new_float(macroPeriod, 0.)
// Arrays to store delta volume data
var float[] posVolSR = array.new_float(srPeriod, 0.)
var float[] negVolSR = array.new_float(srPeriod, 0.)
var float[] posVolMacro = array.new_float(macroPeriod, 0.)
var float[] negVolMacro = array.new_float(macroPeriod, 0.)
// VARIABLES FOR DELTA VOLUME CALCULATIONS -----------------------------------------------------------------------------
// Variables to store delta volume percentages for S/R and Macro periods
var float deltaVolSR = na
var float deltaVolMacro = na
// VARIABLES FOR BOX DRAWING --------------------------------------------------------------------------------------------
// Variables for box indices for both S/R and Macro periods
int srStartIdx = bar_index - srPeriod
int srEndIdx = bar_index + 50
int macroStartIdx = bar_index - macroPeriod
int macroEndIdx = bar_index + 70
// Variables for box drawing
var box srUpperBox = na
var box srLowerBox = na
var box macroUpperBox = na
var box macroLowerBox = na
var box midBox = na
// ATR for box scaling
float atrValue = ta.atr(200)*0.8
// VOLUME DELTA CALCULATIONS -------------------------------------------------------------------------------------------
// @description: Calculate the delta volume for Macro period
if barstate.islast and showMacro
for int i = 0 to macroPeriod - 1
array.push(macroHighs, high[i])
array.push(macroLows, low[i])
// Store positive and negative volume based on candle direction
if close[i] > open[i]
posVolMacro.set(i, volume[i])
if close[i] < open[i]
negVolMacro.set(i, -volume[i])
// Calculate Macro Delta Volume
deltaVolMacro := (negVolMacro.avg() / posVolMacro.avg() + 1) * 100
deltaVolMacro := math.min(math.max(deltaVolMacro, -100), 100) // Cap delta volume between -100 and 100
// Calculate the delta volume for S/R period
if barstate.islast and showSR
for int i = 0 to srPeriod - 1
array.push(srHighs, high[i])
array.push(srLows, low[i])
// Store positive and negative volume based on candle direction
if close[i] > open[i]
posVolSR.set(i, volume[i])
if close[i] < open[i]
negVolSR.set(i, -volume[i])
// Calculate S/R Delta Volume
deltaVolSR := (negVolSR.avg() / posVolSR.avg() + 1) * 100
deltaVolSR := math.min(math.max(deltaVolSR, -100), 100) // Cap delta volume between -100 and 100
// BOX HANDLING AND UPDATING -------------------------------------------------------------------------------------------
// Update and manage boxes based on crossover conditions
if ta.crossover(low, srUpperBox.get_top()) or ta.crossunder(high, srLowerBox.get_bottom()) or bar_index % 100 == 0
// Set new bounds for S/R and Macro boxes
srUpperBox.set_top(srHighs.max() + atrValue)
srUpperBox.set_bottom(srHighs.min())
srLowerBox.set_top(srLows.min())
srLowerBox.set_bottom(srLows.min() - atrValue)
macroUpperBox.set_top(macroHighs.max() + atrValue)
macroUpperBox.set_bottom(macroHighs.min())
macroLowerBox.set_top(macroLows.min())
macroLowerBox.set_bottom(macroLows.min() - atrValue)
// Delete previous boxes
box.delete(srUpperBox[1])
box.delete(srLowerBox[1])
box.delete(macroUpperBox[1])
box.delete(macroLowerBox[1])
// DRAW AND UPDATE BOXES ------------------------------------------------------------------------------------------------
// Draw and update lower box if not initialized for S/R period
if na(srLowerBox) and barstate.islast and showSR
srLowerBox := box.new(srStartIdx, srLows.min(), srEndIdx, srLows.min() - atrValue,
upColor, 1,
bgcolor = color.new(upColor, 100),
text = "DISCOUNT: " + str.tostring(posVolSR.sum(), format.volume),
text_size = size.small,
text_color= chart.fg_color, force_overlay = true)
else
srLowerBox.set_text("DISCOUNT: " + str.tostring(posVolSR.sum(), format.volume))
box.set_left(srLowerBox, srStartIdx)
box.set_right(srLowerBox, srEndIdx)
array.clear(srLows)
// Draw and update upper box if not initialized for S/R period
if na(srUpperBox) and barstate.islast and showSR
srUpperBox := box.new(srStartIdx, srHighs.max() + atrValue, srEndIdx, srHighs.max(),
downColor, 1,
bgcolor = color.new(downColor, 100),
text = "PREMIUM: " + str.tostring(negVolSR.sum(), format.volume),
text_size = size.small,
text_color= chart.fg_color, force_overlay = true)
else
srUpperBox.set_text("PREMIUM: " + str.tostring(negVolSR.sum(), format.volume))
box.set_left(srUpperBox, srStartIdx)
box.set_right(srUpperBox, srEndIdx)
array.clear(srHighs)
// DRAW BOXES FOR MACRO PERIOD ------------------------------------------------------------------------------------------
// Draw and update upper box for Macro period
if na(macroUpperBox) and barstate.islast and showMacro
macroUpperBox := box.new(
macroStartIdx, macroHighs.max() + atrValue, macroEndIdx, macroHighs.max(),
downColor, 0,
bgcolor = color.new(downColor, 60),
text = str.tostring(negVolMacro.sum(), format.volume),
text_size = size.small,
text_color = chart.fg_color,
text_halign= showSR ? text.align_right : text.align_center
)
else
macroUpperBox.set_text(str.tostring(negVolMacro.sum(), format.volume))
box.set_left(macroUpperBox, macroStartIdx)
box.set_right(macroUpperBox, macroEndIdx)
array.clear(macroHighs)
// Draw and update lower box for Macro period
if na(macroLowerBox) and barstate.islast and showMacro
macroLowerBox := box.new(
macroStartIdx, macroLows.min(), macroEndIdx, macroLows.min() - atrValue,
upColor, 0,
bgcolor = color.new(upColor, 60),
text = str.tostring(posVolMacro.sum(), format.volume),
text_size = size.small,
text_color = chart.fg_color,
text_halign= showSR ? text.align_right : text.align_center
)
else
macroLowerBox.set_text(str.tostring(posVolMacro.sum(), format.volume))
box.set_left(macroLowerBox, macroStartIdx)
box.set_right(macroLowerBox, macroEndIdx)
array.clear(macroLows)
// ADDITIONAL PLOTTING --------------------------------------------------------------------------------------------------
// Draw line for equilibrium and box for delta volume display
if barstate.islast and showSR
float mid = math.avg(srLowerBox.get_top(), srUpperBox.get_bottom())
line.delete(line.new(srStartIdx, mid, srEndIdx, mid, color=chart.fg_color, style=line.style_dashed)[1])
midBox := box.new(srStartIdx, srUpperBox.get_bottom(), srEndIdx, srLowerBox.get_top(),
na, 0,
bgcolor = color.new(deltaVolSR > 0 ? upColor : downColor, 93),
text = "Delta Volume\n" + str.tostring(deltaVolSR, format.percent),
text_size = size.normal, text_color=deltaVolSR > 0 ? upColor : downColor,
text_halign = text.align_right, text_valign=text.align_bottom)
box.delete(midBox[1])
// If only macro levels are shown, handle box and line drawing
if not showSR and showMacro and barstate.islast
float midMacro = math.avg(macroLowerBox.get_top(), macroUpperBox.get_bottom())
line.delete(line.new(macroStartIdx, midMacro, macroEndIdx, midMacro,
color=chart.fg_color, style=line.style_dashed)[1])
// Display Macro Delta Volume as a table
if showMacro and barstate.islast
var table deltaTable = table.new(position.top_right, 5, 5)
table.cell(deltaTable, 0, 0,
text = "Macro\n Delta Volume:\n" + str.tostring(deltaVolMacro, format.percent),
text_color = deltaVolMacro > 0 ? upColor : downColor,
text_size = size.large)