The following script demonstrates how to construct user-selectable start and end date inputs to restrict backtesting execution to an exact historical window, while filtering out trades on specific days of the week.
Pine Script v6: Date range filter and trading session managerpinescript
//@version=6
strategy("Date Range & Session Filter [v6]",
overlay = true,
initial_capital = 10000,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 10)
// Date filter inputs using timestamp input type
int startYear = input.int(2024, "Start Year", minval = 2000)
int startMonth = input.int(1, "Start Month", minval = 1, maxval = 12)
int startDay = input.int(1, "Start Day", minval = 1, maxval = 31)
int endYear = input.int(2026, "End Year", minval = 2000)
int endMonth = input.int(12, "End Month", minval = 1, maxval = 12)
int endDay = input.int(31, "End Day", minval = 1, maxval = 31)
// Day of week filters
bool tradeMonday = input.bool(true, "Trade Monday")
bool tradeFriday = input.bool(false, "Trade Friday (Weekend Risk Filter)")
// Construct timestamps
int startTimestamp = timestamp("UTC", startYear, startMonth, startDay, 0, 0)
int endTimestamp = timestamp("UTC", endYear, endMonth, endDay, 23, 59)
// Evaluate whether current bar is within active test window
bool inDateRange = time >= startTimestamp and time <= endTimestamp
// Evaluate day-of-week eligibility
bool isMonday = dayofweek == dayofweek.monday
bool isFriday = dayofweek == dayofweek.friday
bool validDay = (not isMonday or tradeMonday) and (not isFriday or tradeFriday)
// Technical signals
float fastEma = ta.ema(close, 20)
float slowEma = ta.ema(close, 50)
bool buySignal = ta.crossover(fastEma, slowEma)
bool exitSignal = ta.crossunder(fastEma, slowEma)
// Execution inside allowed window
if inDateRange and validDay
if buySignal
strategy.entry("Long", strategy.long)
if exitSignal or (time > endTimestamp and strategy.position_size > 0)
strategy.close("Long", comment = "Exit Trigger / Window End")
// Plot moving averages
plot(fastEma, "Fast EMA", color = color.blue)
plot(slowEma, "Slow EMA", color = color.orange)
// Background highlight for active backtest date window
bgcolor(inDateRange ? color.new(color.blue, 95) : na)