Day-of-Week Effect
The day-of-week effect tests whether specific weekdays exhibit statistically distinct return patterns that persist enough to trade mechanically. This strategy enters positions based on calendar day alone, using mean-reversion logic if the hypothesis holds, and exits at a fixed time horizon or profit/loss threshold. The rules prioritize reproducibility over optimization: a stranger should be able to implement them without judgment calls.
Why this might work
Academic researchers have documented persistent return anomalies correlated with the calendar. The Monday effect, first described in the 1970s, posited that equity returns on Mondays were abnormally low compared to other weekdays [1]. Proposed explanations range from behavioral (accumulation of bad news over weekends; Monday trading volume from weekend decision-making) to structural (options expiration typically occurs on Fridays, creating rebalancing flows on Monday; settlement cycles and fund flows align with calendar windows) [2].
The empirical support has weakened substantially. Early studies showed measurable Monday underperformance in U.S. Equities, but the effect diminished after the 1980s and appears to have largely evaporated in modern data [3]. Some researchers have documented other day-of-week patterns, Tuesday and Wednesday outperformance, Friday rallies in certain regimes, but these effects are regime-dependent, inconsistent across asset classes, and often disappear once they are publicized and traded by systematic managers [1].
The persistence of any day-of-week effect in the present market is uncertain. Market microstructure, institutional trading behavior, and the rise of algorithms have compressed many calendar anomalies. Transaction costs alone erode small edge. Nevertheless, cyclical patterns in funding availability (quarter-end, month-end, options expiry) continue to shape intraday and inter-day flows, and capturing mean-reversion moves around those calendar events remains plausible [2]. This strategy does not assume a reliable effect; it specifies rules to test whether one survives honest backtesting.
The rules
Instrument and timeframe: ES (E-mini S&P 500 futures), daily bars. The strategy trades the U.S. Equity index because the day-of-week effect has been most extensively studied there.
Entry trigger: If the prior close occurred on a Friday, enter a long position at the open of the next Monday. Rationale: if the Monday effect exists, Monday opens should present a mean-reversion long into depressed prices. Alternatively, test a short entry on Tuesday or Wednesday (hypothesis: those days outperform, so opening short on lower momentum days captures pullbacks).
Initial stop: 1.5% below entry price (absolute ticks in ES: 60 points below entry). This caps single-trade loss to accommodate the strategy's high trade frequency.
Exit: Close the position at the end of the same trading day (EOD). Rationale: day-of-week anomalies, if they exist, manifest primarily in overnight and open-to-close patterns; holding multiday assumes compounding of a weak effect.
Position sizing: 1 contract per 50k equity; scale down if account falls below 30k. This ensures compliance with NinjaTrader/TradingView position limits and realistic margin use.
Session and time filters: Trade only during U.S. Regular session (09:30 to 16:00 ET). Do not trade on days with major economic data releases (FOMC announcements, employment reports) or on the day before or after holidays, to avoid regime shifts. This filter reduces noise.
Expected trade frequency: Approximately 52 trades per year (one per Monday). This is below the preferred 150+ trades per year for solid statistics. To increase sample size, add a second rule: on Wednesdays, if the week's open-to-Wednesday close is positive, short 1 contract at Wednesday open, exit EOD. This adds ~52 trades. Total: ~104 trades per year. Still modest; robustness will require multi-year backtest.
Code
//@version=6
strategy("Day-of-Week Effect", overlay=true, initial_capital=50000,
commission_type=strategy.commission.percent, commission_value=0.001,
slippage=2)
// Inputs
stop_loss_pct = input.float(1.5, title="Stop Loss %", minval=0.1)
Monday_long = input.bool(true, title="Trade Monday Long")
Wednesday_short = input.bool(true, title="Trade Wednesday Short")
holiday_buffer = input.int(1, title="Days to Skip Before/After Holiday")
// Holiday dates (sample: only major US holidays; extend as needed)
is_holiday = (month == 1 and dayofmonth == 1) or // New Year
(month == 7 and dayofmonth == 4) or // July 4th
(month == 12 and dayofmonth == 25) or // Christmas
(month == 12 and dayofmonth == 26) // Boxing Day (sometimes observed)
is_near_holiday = ta.barssince(is_holiday) <= holiday_buffer or
(is_holiday and bar_index == 0)
// Session filter: 9:30-16:00 ET (only during regular hours)
in_session = hour >= 9 and (hour < 16 or (hour == 16 and minute == 0))
// Calculate price at start of week (Monday open) and current week performance
week_open = request.security(syminfo.tickerid, "W", open)
current_week_close = close
week_performance = ((current_week_close - week_open) / week_open) * 100
// Day of week (1=Monday, 2=Tuesday, ..., 5=Friday, 6=Saturday, 7=Sunday)
dow = dayofweek
// Entry logic
monday_long_entry = Monday_long and dow == 2 and in_session and not is_near_holiday
wednesday_short_entry = Wednesday_short and dow == 4 and in_session and
not is_near_holiday and week_performance > 0
// Stop loss levels
entry_price = strategy.opentrades > 0 ? strategy.opentrades.entry_price(0) : na
stop_price = entry_price * (1 - stop_loss_pct / 100)
// Exit logic: EOD or stop loss hit
eod_exit = hour == 15 and minute >= 45 // Last 15 minutes of day
is_stop_hit = low <= stop_price
// Entries
if monday_long_entry
strategy.entry("Monday_Long", strategy.long)
if wednesday_short_entry
strategy.entry("Wednesday_Short", strategy.short)
// Exits
if strategy.position_size != 0
if eod_exit or is_stop_hit
strategy.close_all()
// Plot for reference
plot(entry_price, "Entry Price", color=color.blue, linewidth=1)
plot(stop_price, "Stop Loss", color=color.red, linewidth=1)
barcolor(monday_long_entry ? color.new(color.green, 80) :
wednesday_short_entry ? color.new(color.red, 80) : na)
How the code works
The strategy initializes with 50k capital, 0.1% commission per trade (standard for ES), and 2-point slippage to reflect realistic execution costs.
Holiday buffer: is_holiday flags major U.S. Trading holidays. is_near_holiday suppresses entries for holiday_buffer days before and after to avoid regime shifts around long weekends and announcements. This reduces false signals.
Session filter: in_session enforces trades only between 09:30 and 16:00 ET, excluding overnight moves and low-liquidity pre-market hours.
Monday long: If Monday_long is true and the current bar is a Monday (dow == 2), the strategy enters one long contract. The entry price is recorded.
Wednesday short: If Wednesday_short is true, the current day is Wednesday (dow == 4), and the week's open-to-date return is positive (week_performance > 0), a short entry fires. The rationale is weak: if early-week moves are strong, Wednesday is often a mean-reversion entry point (practitioner convention).
Stop and exit: For each open trade, the stop-loss price is set 1.5% below entry. If the low of the bar touches the stop or it reaches 15:45 ET (end of day), the position is closed at market.
Plot: Entry price and stop loss are plotted for visual reference; bars where entries occur are colored.
Testing it honestly
Backtest this strategy on ES using at least 10 years of daily data to accumulate roughly 100-150 trades. Split the data: train on 2010-2020, test on 2021-2024. Compare results:
- In-sample: Record win rate, average trade duration, largest drawdown. These figures will likely be inflated by overfitting to the training period.
- Out-of-sample: Apply the exact same rules to 2021-2024 with no parameter changes. Out-of-sample performance is the only honest measure of edge.
On TradingView, set commission to 0.001 (0.1%) and slippage to 2 points. Do not use order.fills or lookahead assumptions. Run the backtest and document:
- Total trades (Monday entries + Wednesday entries + any whipsaw exits).
- Win rate (% of trades closed profitably).
- Average P&L per trade.
- Sharpe ratio or Calmar ratio (return relative to volatility or drawdown).
- Maximum consecutive losses.
A single "good" backtest over 10 years is meaningless if out-of-sample performance collapses. The effect, if it ever existed, may have already been arbitraged away. A handful of profitable weeks proves nothing.
Limitations
The effect has weakened or disappeared: The Monday effect was solid in 1970s-1980s data but is barely detectable in modern markets [1]. Modern execution, algorithmic trading, and real-time information dissemination have flattened calendar anomalies. This strategy may find no edge whatsoever.
Regime dependence: Day-of-week patterns vary by market regime, volatility environment, and macroeconomic conditions. A pattern observed in low-volatility bull markets may reverse in choppy bear markets. No single set of rules will capture the effect across all regimes.
Overfitting and data mining: If no true day-of-week effect exists, parameter tuning (stop loss %, entry time, confirmation filters) will create the illusion of one. Out-of-sample testing is mandatory; the majority of calendar anomaly strategies fail when tested forward.
Low trade frequency: ~100 trades per year is below statistical significance. Random noise can produce streaks of winning trades. True edge requires either (a) large sample sizes or (b) very high Sharpe ratios on small samples. This strategy provides neither.
Costs: Commission, slippage, and bid-ask spread easily consume 0.1-0.2% per round-trip. A day-of-week effect that generates 0.3% average edge is eroded to breakeven or loss after costs. The empirical evidence for a profitable effect strong enough to survive costs is absent.
No confirmation: The strategy trades day of week alone. No trend, no volatility filter, no momentum check. This makes it vulnerable to whipsaw in choppy markets.
Wednesday short weakness: The Wednesday short rule is speculative; no published evidence supports it. It exists to increase trade frequency for testing, not because it is grounded in mechanism or evidence.
Key definitions
Day-of-week effect: A tendency for returns on specific weekdays (e.g., Monday) to differ systematically from other days, attributed to behavioral or structural market cycles. [1]
Monday effect: The empirically documented pattern of abnormally low equity returns on Mondays relative to other weekdays, first reported in academic literature in the 1970s but largely absent in recent data. [1]
Mean reversion: The tendency for an asset price to return toward its average after a temporary deviation; trades betting on this mechanism exit when price recovers to historical mean.
Calendar anomaly: A persistent statistical pattern tied to a specific calendar feature (day of week, month, holiday proximity) that survives transaction costs; most documented anomalies have weakened after publicization.
Slippage: The difference between expected execution price and actual fill price, typically measured in ticks; includes market impact and adverse price movement during order routing.
Regime dependence: The property of a trading rule performing differently under different market conditions (e.g., trending vs. ranging, high vs. low volatility), limiting its robustness.
References
-
Keim, D.B., Stambaugh, R.F., "A Further Investigation of the Weekend Effect in Stock Returns", Journal of Finance, vol. 39, no. 3 (1984), pp. 819-835. Doi.org/10.1111/j.1540-6261.1984.tb03897.x
-
Damodaran, A., Damodaran on Valuation, 2nd ed., John Wiley & Sons (2006). Chapter on market microstructure and calendar effects.
-
Schwert, G.W., "Anomalies and Market Efficiency", in Handbook of the Economics of Finance, Elsevier (2003), pp. 939-974. Discusses weakening of the Monday effect post-1980s.
-
Investopedia, "Day of the Week Effect", https://www.investopedia.com/terms/d/dayoftheweekeffect.asp (accessed 2025).
-
CME Group, "E-mini S&P 500 Futures Contract Specifications", https://www.cmegroup.com/markets/equities/sp-500.html (2025).
-
TradingView, "Strategy Tester Documentation: Commission and Slippage", https://www.tradingview.com/pine-script-docs/en/v5/concepts/strategies.html (2025).
Educational research on historical data only. Not investment advice, not a signal, and never a performance promise. Past results do not predict future performance. Every reference is link-verified before publication and every paper is re-audited weekly against the library's editorial standard.
Last reviewed by the PropLedger research pipeline: 2026-10-05. Educational research on historical data, not financial advice.
Keep reading
Prior-Day High and Low Breakout: Exploiting Stop Clustering
A complete, testable trading strategy: a prior-day high and low breakout strategy: why levels where stops cluster behave differently from arbitrary recent extremes. Exact rules, full Pine Script code, and an honest reading of the evidence.
Auditable Trend Continuation: Converting Discretionary Price-Action Rules into Testable Mechanical Logic
A complete, testable trading strategy: a discretionary trend-continuation playbook made auditable: how to write discretionary rules precisely enough that they can be backtested at all. Exact rules, full Pine Script code, and an honest reading of the evidence.
Futures Contract Expiry Week Reversion
A complete, testable trading strategy: a contract-roll cycle strategy for futures: how behavior changes in expiry week, who must trade then, and time-boxed rules around the roll. Exact rules, full Pine Script code, and an honest reading of the evidence.