Daily range

 avatar
EBTURK
plain_text
a month ago
2.5 kB
9
Indexable
Never
//@version=5
// © EBTURK
strategy("daily range", overlay=true)

// input
session  = input.session("0000-0000", title="Trading Session")
timeZone = input.string("UTC", title="Time Zone")
monSession = input.bool(true, title="Mon ", group="Trading Session", inline="d1")
tuesSession = input.bool(true, title="Tue ", group="Trading Session", inline="d1")
wedSession = input.bool(true, title="Wed ", group="Trading Session", inline="d1")
thuSession = input.bool(true, title="Thu ", group="Trading Session", inline="d1")
friSession = input.bool(true, title="Fri ", group="Trading Session", inline="d1")

SessionLow(sessionTime, sessionTimeZone=syminfo.timezone) =>
    insideSession = not na(time(timeframe.period, sessionTime, sessionTimeZone))
    var float sessionLowPrice = na

    if insideSession and not insideSession[1]
        sessionLowPrice := low
    else if insideSession
        sessionLowPrice := math.min(sessionLowPrice, low)
    sessionLowPrice

SessionHigh(sessionTime, sessionTimeZone=syminfo.timezone) =>
    insideSession = not na(time(timeframe.period, sessionTime, sessionTimeZone))
    var float sessionHighPrice = na

    if insideSession and not insideSession[1]
        sessionHighPrice := high
    else if insideSession
        sessionHighPrice := math.max(sessionHighPrice, high)
    sessionHighPrice

InSession(sessionTimes, sessionTimeZone=syminfo.timezone) =>
    not na(time(timeframe.period, sessionTimes, sessionTimeZone))

// days of the week
sessionDays = ""

if monSession
    sessionDays += "2"
if tuesSession
    sessionDays += "3"    
if wedSession
    sessionDays += "4"
if thuSession
    sessionDays += "5"
if friSession
    sessionDays += "6"

tradingSession = session + ":" + sessionDays

// h and l
sessLow = SessionLow(tradingSession, timeZone)
sessHigh = SessionHigh(tradingSession, timeZone)

// Plot the session low and high
plot(sessLow, color=#09e43f, title="Session Low")
plot(sessHigh, color=color.red, title="Session High")

// Open long when the price crosses below the session low and returns within the range
if (low < sessLow) and (close > sessLow)
    strategy.entry("Long", strategy.long)

// Open short when the price crosses above the session high and returns within the range  
if (high > sessHigh) and (close < sessHigh)
    strategy.entry("Short", strategy.short)

// Highlight the session background
bgcolor(InSession(tradingSession, timeZone) ? color.new(color.aqua, 90) : na)