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

إخلاء المسؤولية

لا يُقصد بالمعلومات والمنشورات أن تكون، أو تشكل، أي نصيحة مالية أو استثمارية أو تجارية أو أنواع أخرى من النصائح أو التوصيات المقدمة أو المعتمدة من TradingView. اقرأ المزيد في شروط الاستخدام.