OPEN-SOURCE SCRIPT

Session Boxes Higher / Low + Nachhandelszeiten

240
//version=6
indicator("Session Boxes", overlay=true)

// Zeit-Einstellung
is_summertime = input.bool(true, title="Sommerzeit aktiv", group="Zeiteinstellung", tooltip="Bei Winterzeit werden alle Zeiten automatisch um 1 Stunde früher angesetzt")
time_offset = is_summertime ? 0 : -1 // -1 Stunde im Winter

// Einstellungen für Sessions anzeigen/ausblenden
show_asia = input.bool(true, title="Asien Session anzeigen", group="Session Anzeige")
show_london = input.bool(true, title="London Session anzeigen", group="Session Anzeige")
show_ny_morning = input.bool(true, title="New York Vormittag anzeigen", group="Session Anzeige")
show_ny_afternoon = input.bool(true, title="New York Nachmittag anzeigen", group="Session Anzeige")
show_afterhours = input.bool(true, title="Nachhandelszeit anzeigen (2h)", group="Session Anzeige")

// Zeiten konfigurierbar machen (Sommerzeit-Zeiten, werden automatisch für Winterzeit angepasst)
asia_start = input.float(1.0, title="Asien Start (Stunde)", minval=0, maxval=23.59, step=0.5, group="Asien Zeiten")
asia_end = input.float(7.0, title="Asien Ende (Stunde)", minval=0, maxval=23.59, step=0.5, group="Asien Zeiten")

london_start = input.float(9.0, title="London Start (Stunde)", minval=0, maxval=23.59, step=0.5, group="London Zeiten")
london_end = input.float(11.0, title="London Ende (Stunde)", minval=0, maxval=23.59, step=0.5, group="London Zeiten")

ny_morning_start = input.float(15.5, title="NY Vormittag Start (Stunde)", minval=0, maxval=23.59, step=0.5, group="NY Vormittag Zeiten")
ny_morning_end = input.float(17.0, title="NY Vormittag Ende (Stunde)", minval=0, maxval=23.59, step=0.5, group="NY Vormittag Zeiten")

ny_afternoon_start = input.float(19.5, title="NY Nachmittag Start (Stunde)", minval=0, maxval=23.59, step=0.5, group="NY Nachmittag Zeiten")
ny_afternoon_end = input.float(21.0, title="NY Nachmittag Ende (Stunde)", minval=0, maxval=23.59, step=0.5, group="NY Nachmittag Zeiten")

// Angepasste Zeiten mit Sommer/Winterzeit-Offset
asia_start_adjusted = asia_start + time_offset
asia_end_adjusted = asia_end + time_offset
london_start_adjusted = london_start + time_offset
london_end_adjusted = london_end + time_offset
ny_morning_start_adjusted = ny_morning_start + time_offset
ny_morning_end_adjusted = ny_morning_end + time_offset
ny_afternoon_start_adjusted = ny_afternoon_start + time_offset
ny_afternoon_end_adjusted = ny_afternoon_end + time_offset

// Berechnung der Bars für 2 Stunden basierend auf dem Timeframe
t = str.tonumber(timeframe.period)
bars_2hours = int(120 / t) // 120 Minuten = 2 Stunden

// Farben für die verschiedenen Sessions
asia_color = input.color(color.new(color.red, 70), title="Asien Session Farbe", group="Farben")
london_color = input.color(color.new(color.blue, 70), title="London Session Farbe", group="Farben")
ny_morning_color = input.color(color.new(color.green, 70), title="NY Vormittag Farbe", group="Farben")
ny_afternoon_color = input.color(color.new(color.purple, 70), title="NY Nachmittag Farbe", group="Farben")

// Nachhandelszeit Farben (heller als die Hauptsessions)
asia_afterhours_color = color.new(color.red, 85)
london_afterhours_color = color.new(color.blue, 85)
ny_morning_afterhours_color = color.new(color.green, 85)
ny_afternoon_afterhours_color = color.new(color.purple, 85)

// Funktionen zur Überprüfung, ob wir uns in einer bestimmten Session befinden
inAsiaSession(t) =>
h = hour(t)
m = minute(t)
time_decimal = h + m/60
time_decimal >= asia_start_adjusted and time_decimal < asia_end_adjusted

inLondonSession(t) =>
h = hour(t)
m = minute(t)
time_decimal = h + m/60
time_decimal >= london_start_adjusted and time_decimal < london_end_adjusted

inNYMorningSession(t) =>
h = hour(t)
m = minute(t)
time_decimal = h + m/60
time_decimal >= ny_morning_start_adjusted and time_decimal < ny_morning_end_adjusted

inNYAfternoonSession(t) =>
h = hour(t)
m = minute(t)
time_decimal = h + m/60
time_decimal >= ny_afternoon_start_adjusted and time_decimal < ny_afternoon_end_adjusted

// High/Low-Berechnung für Asien Session
var float asiaHigh = na
var float asiaLow = na
var int asiaStartBar = na
var bool inAsiaSessionPrev = false
inAsiaSessionCurr = inAsiaSession(time)

if inAsiaSessionCurr and not inAsiaSessionPrev
asiaHigh := high
asiaLow := low
asiaStartBar := bar_index
else if inAsiaSessionCurr
asiaHigh := math.max(asiaHigh, high)
asiaLow := math.min(asiaLow, low)
else if not inAsiaSessionCurr and inAsiaSessionPrev and show_asia
box.new(asiaStartBar, asiaHigh, bar_index, asiaLow, asia_color, bgcolor=asia_color)
if show_afterhours
box.new(bar_index, asiaHigh, bar_index + int(bars_2hours), asiaLow, asia_afterhours_color, bgcolor=asia_afterhours_color)
asiaHigh := na
asiaLow := na

inAsiaSessionPrev := inAsiaSessionCurr

// High/Low-Berechnung für London Session
var float londonHigh = na
var float londonLow = na
var int londonStartBar = na
var bool inLondonSessionPrev = false
inLondonSessionCurr = inLondonSession(time)

if inLondonSessionCurr and not inLondonSessionPrev
londonHigh := high
londonLow := low
londonStartBar := bar_index
else if inLondonSessionCurr
londonHigh := math.max(londonHigh, high)
londonLow := math.min(londonLow, low)
else if not inLondonSessionCurr and inLondonSessionPrev and show_london
box.new(londonStartBar, londonHigh, bar_index, londonLow, london_color, bgcolor=london_color)
if show_afterhours
box.new(bar_index, londonHigh, bar_index + int(bars_2hours), londonLow, london_afterhours_color, bgcolor=london_afterhours_color)
londonHigh := na
londonLow := na

inLondonSessionPrev := inLondonSessionCurr

// High/Low-Berechnung für NY Morning Session
var float nyMorningHigh = na
var float nyMorningLow = na
var int nyMorningStartBar = na
var bool inNYMorningSessionPrev = false
inNYMorningSessionCurr = inNYMorningSession(time)

if inNYMorningSessionCurr and not inNYMorningSessionPrev
nyMorningHigh := high
nyMorningLow := low
nyMorningStartBar := bar_index
else if inNYMorningSessionCurr
nyMorningHigh := math.max(nyMorningHigh, high)
nyMorningLow := math.min(nyMorningLow, low)
else if not inNYMorningSessionCurr and inNYMorningSessionPrev and show_ny_morning
box.new(nyMorningStartBar, nyMorningHigh, bar_index, nyMorningLow, ny_morning_color, bgcolor=ny_morning_color)
if show_afterhours
box.new(bar_index, nyMorningHigh, bar_index + int(bars_2hours), nyMorningLow, ny_morning_afterhours_color, bgcolor=ny_morning_afterhours_color)
nyMorningHigh := na
nyMorningLow := na

inNYMorningSessionPrev := inNYMorningSessionCurr

// High/Low-Berechnung für NY Afternoon Session
var float nyAfternoonHigh = na
var float nyAfternoonLow = na
var int nyAfternoonStartBar = na
var bool inNYAfternoonSessionPrev = false
inNYAfternoonSessionCurr = inNYAfternoonSession(time)

if inNYAfternoonSessionCurr and not inNYAfternoonSessionPrev
nyAfternoonHigh := high
nyAfternoonLow := low
nyAfternoonStartBar := bar_index
else if inNYAfternoonSessionCurr
nyAfternoonHigh := math.max(nyAfternoonHigh, high)
nyAfternoonLow := math.min(nyAfternoonLow, low)
else if not inNYAfternoonSessionCurr and inNYAfternoonSessionPrev and show_ny_afternoon
box.new(nyAfternoonStartBar, nyAfternoonHigh, bar_index, nyAfternoonLow, ny_afternoon_color, bgcolor=ny_afternoon_color)
if show_afterhours
box.new(bar_index, nyAfternoonHigh, bar_index + int(bars_2hours), nyAfternoonLow, ny_afternoon_afterhours_color, bgcolor=ny_afternoon_afterhours_color)
nyAfternoonHigh := na
nyAfternoonLow := na

inNYAfternoonSessionPrev := inNYAfternoonSessionCurr

Penafian

Maklumat dan penerbitan adalah tidak dimaksudkan untuk menjadi, dan tidak membentuk, nasihat untuk kewangan, pelaburan, perdagangan dan jenis-jenis lain atau cadangan yang dibekalkan atau disahkan oleh TradingView. Baca dengan lebih lanjut di Terma Penggunaan.