DAX Session Prep Map
A clean TradingView script for DAX intraday traders who want to prep off the real cash session, not random 24h CFD candles or mystical “institutional” drawings.
What this tool does
It draws the levels I use every morning in my own DAX desk prep: previous cash session structure and overnight structure, based on the real Xetra cash times. No signals, no arrows, no magical “smart money” overlays.
- Prev Cash High / Low / Xetra Close (09:00–17:30 CET)
- Overnight High / Low / Mid (17:30–09:00 CET)
- Cash Open and Cash Close markers
- Clean information table with prices and session references
Your job is to interpret the structure and build a plan. The script just draws straight lines.
How it fits into your prep
This is the backbone of my daily DAX outlook. I look at:
- where price is versus previous cash high/low/close
- how the overnight range sits around that
- whether we are accepting above, inside, or below prior structure
- how that lines up with the cash open and first moves
From there I build scenarios: which side makes more sense to lean on, which levels are likely magnets, and where it makes sense to stand aside. That part is trading.
I am not keeping a paid TradingView subscription so people can press an “add to chart” button. If you want this, you copy and paste the code into Pine Editor yourself. It takes two minutes.
This is a free tool, not a full-time Pine support hotline.
If you want me to look at your DAX trading, you can always book a free 15 minute intro call or a 1 hour mentorship session on the mentorship page.
Go to mentorship and bookingHow to install in TradingView
- Open TradingView and your DAX chart (I use the 5 minute CFD)
- Open the Pine Editor at the bottom
- Delete everything in the editor
- Paste the script from the section below
- Click Add to chart
- Optionally save it as your own script and add it to your DAX template
- Before cash open, type in:
- Prev Cash High (yesterday 09:00–17:30 high)
- Prev Cash Low
- Xetra official close
- ON High (17:30–09:00)
- ON Low (17:30–09:00)
- ON Mid is calculated automatically
- The chart then shows session boundaries, extended levels, and the info table
- From there: describe the structure, define scenarios, and plan your trades
Different CFD feeds print different highs and lows. “Automated” session scripts break on timezones and symbol changes. Daily candles lie. Traders need control, not prophecy. This tool gives you control: you decide the levels, the script makes them usable.
Show full Pine Script (copy & paste into TradingView)
//@version=5
indicator("DAX Session Prep Map (CFD) - Manual Levels + Sessions", overlay = true, max_lines_count = 40, max_labels_count = 20)
// =====================
// USER INPUTS
// =====================
// Prev cash session levels (manual)
prevHigh = input.float(24444.5, "Prev Cash High", step = 0.1)
prevLow = input.float(24225.3, "Prev Cash Low", step = 0.1)
prevClose = input.float(24381.0, "Prev Cash Close (Xetra)", step = 0.1)
// Overnight levels (manual)
onHigh = input.float(24500.0, "ON High", step = 0.1)
onLow = input.float(24352.3, "ON Low", step = 0.1)
// Visual toggles
showPrev = input.bool(true, "Show Prev Cash levels (H/L/C)")
showON = input.bool(true, "Show ON High/Low/Mid")
showTable = input.bool(true, "Show prep table")
showSessions = input.bool(true, "Show cash session markers")
// Colors
colPrevHigh = color.new(color.green, 0)
colPrevLow = color.new(color.red, 0)
colPrevClose = color.new(color.yellow, 0)
colONHigh = color.new(color.blue, 0)
colONLow = color.new(color.orange, 0)
colONMid = color.new(color.gray, 0)
colCashOpen = color.new(color.lime, 0)
colCashClose = color.new(color.red, 0)
transparentCol = color.new(color.white, 100)
// Derived ON Mid
onMid = (na(onHigh) or na(onLow)) ? na : (onHigh + onLow) * 0.5
// =====================
// SESSION DETECTION (Europe/Berlin time) FOR MARKERS ONLY
// =====================
h = hour(time, "Europe/Berlin")
m = minute(time, "Europe/Berlin")
isCashOpenBar = h == 9 and m == 0
isCashCloseBar = h == 17 and m == 30
// =====================
// HORIZONTAL LINES (MANUAL LEVELS)
// =====================
var line lPrevHigh = na
var line lPrevLow = na
var line lPrevClose = na
var line lOnHigh = na
var line lOnLow = na
var line lOnMid = na
f_updateLine(line ln, float price, color col, bool visible) =>
line _ln = ln
if visible and not na(price)
if na(_ln)
_ln := line.new(bar_index - 500, price, bar_index + 500, price, xloc = xloc.bar_index, extend = extend.both, color = col, width = 1)
else
line.set_xy1(_ln, bar_index - 500, price)
line.set_xy2(_ln, bar_index + 500, price)
line.set_color(_ln, col)
else
if not na(_ln)
line.set_color(_ln, transparentCol)
_ln
// Prev session levels
lPrevHigh := f_updateLine(lPrevHigh, prevHigh, colPrevHigh, showPrev)
lPrevLow := f_updateLine(lPrevLow, prevLow, colPrevLow, showPrev)
lPrevClose := f_updateLine(lPrevClose, prevClose, colPrevClose, showPrev)
// Overnight levels
lOnHigh := f_updateLine(lOnHigh, onHigh, colONHigh, showON)
lOnLow := f_updateLine(lOnLow, onLow, colONLow, showON)
lOnMid := f_updateLine(lOnMid, onMid, colONMid, showON)
// =====================
// SESSION BOUNDARY LINES (VERTICAL)
// =====================
var line cashOpenLine = na
var line cashCloseLine = na
var label cashOpenLbl = na
var label cashCloseLbl = na
var int lastCashOpenDay = na
var int lastCashCloseDay = na
if showSessions
if isCashOpenBar and (na(lastCashOpenDay) or dayofmonth != lastCashOpenDay)
lastCashOpenDay := dayofmonth
cashOpenLine := line.new(bar_index, low, bar_index, high, xloc = xloc.bar_index, extend = extend.none, color = colCashOpen, width = 1, style = line.style_dotted)
cashOpenLbl := label.new(bar_index, high, "Cash Open / ON End", xloc = xloc.bar_index, yloc = yloc.price, color = colCashOpen, style = label.style_label_down, textcolor = color.white)
if isCashCloseBar and (na(lastCashCloseDay) or dayofmonth != lastCashCloseDay)
lastCashCloseDay := dayofmonth
cashCloseLine := line.new(bar_index, low, bar_index, high, xloc = xloc.bar_index, extend = extend.none, color = colCashClose, width = 1, style = line.style_dotted)
cashCloseLbl := label.new(bar_index, high, "Cash Close / ON Start", xloc = xloc.bar_index, yloc = yloc.price, color = colCashClose, style = label.style_label_down, textcolor = color.white)
// =====================
// TABLE OUTPUT (TOP RIGHT, FULLY OPAQUE)
// =====================
var table t = na
if showTable and na(t)
t := table.new(position.top_right, 3, 7, border_width = 1, frame_color = color.black)
f_fmt(val) =>
na(val) ? "-" : str.tostring(val, format.mintick)
if showTable and barstate.islast and not na(t)
// Header
table.cell(t, 0, 0, "Item", text_color = color.white, bgcolor = color.black)
table.cell(t, 1, 0, "Value", text_color = color.white, bgcolor = color.black)
table.cell(t, 2, 0, "Info", text_color = color.white, bgcolor = color.black)
// Prev Cash High
table.cell(t, 0, 1, "Prev Cash High", text_color = color.white, bgcolor = colPrevHigh)
table.cell(t, 1, 1, f_fmt(prevHigh), text_color = color.black, bgcolor = color.white)
table.cell(t, 2, 1, "09:00–17:30 CET (cash, CFD)", text_color = color.black, bgcolor = color.white)
// Prev Cash Low
table.cell(t, 0, 2, "Prev Cash Low", text_color = color.white, bgcolor = colPrevLow)
table.cell(t, 1, 2, f_fmt(prevLow), text_color = color.black, bgcolor = color.white)
table.cell(t, 2, 2, "09:00–17:30 CET (cash, CFD)", text_color = color.black, bgcolor = color.white)
// Prev Cash Close
table.cell(t, 0, 3, "Prev Cash Close", text_color = color.black, bgcolor = colPrevClose)
table.cell(t, 1, 3, f_fmt(prevClose), text_color = color.black, bgcolor = color.white)
table.cell(t, 2, 3, "Xetra official close (DB)", text_color = color.black, bgcolor = color.white)
// ON High
table.cell(t, 0, 4, "ON High", text_color = color.white, bgcolor = colONHigh)
table.cell(t, 1, 4, f_fmt(onHigh), text_color = color.black, bgcolor = color.white)
table.cell(t, 2, 4, "17:30–09:00 CET (ON, CFD)", text_color = color.black, bgcolor = color.white)
// ON Low
table.cell(t, 0, 5, "ON Low", text_color = color.white, bgcolor = colONLow)
table.cell(t, 1, 5, f_fmt(onLow), text_color = color.black, bgcolor = color.white)
table.cell(t, 2, 5, "17:30–09:00 CET (ON, CFD)", text_color = color.black, bgcolor = color.white)
// ON Mid
table.cell(t, 0, 6, "ON Mid", text_color = color.white, bgcolor = colONMid)
table.cell(t, 1, 6, f_fmt(onMid), text_color = color.black, bgcolor = color.white)
table.cell(t, 2, 6, "17:30–09:00 CET (ON, CFD)", text_color = color.black, bgcolor = color.white)
