Indicators··7 min read

Session Killzone Shading

3 references, link-verified · 2 primaryEditor of record: Shane CantyStandards review editorial standard · audit log

A killzone shading indicator marks the high-volatility opening and active hours of the three major forex and global equity trading sessions: Asia (Tokyo), London, and New York. Traders in liquid instruments like forex, indices, and commodities use session shading to identify periods of elevated volatility, tighter spreads, and higher volume, when order flow clusters and whipsaws are most common. This indicator overlays colored backgrounds on the chart to visualize when each session is active, helping traders align their activity with their preferred volatility profile and session characteristics.

//@version=6
indicator("Session Killzone Shading", overlay=true)

// ============================================================================
// INPUTS
// ============================================================================
input_asia = input(true, title="Show Asia Session", group="Sessions")
input_london = input(true, title="Show London Session", group="Sessions")
input_newyork = input(true, title="Show New York Session", group="Sessions")

color_asia = input(color.new(color.blue, 80), title="Asia Color", group="Colors")
color_london = input(color.new(color.orange, 80), title="London Color", group="Colors")
color_newyork = input(color.new(color.red, 80), title="New York Color", group="Colors")

tz_offset = input("UTC", title="Chart Timezone", 
  options=["UTC", "UTC+1", "UTC+2", "UTC-5", "UTC-4", "UTC-7", "UTC-8"],
  group="Settings")

// ============================================================================
// HELPER: Convert chart time to UTC
// ============================================================================
chartTimeToUTC() =>
    offset_minutes = switch tz_offset
        "UTC" => 0
        "UTC+1" => -60
        "UTC+2" => -120
        "UTC-5" => 300
        "UTC-4" => 240
        "UTC-7" => 420
        "UTC-8" => 480
        _ => 0
    
    utc_time = time + offset_minutes * 60 * 1000
    utc_time

// ============================================================================
// GET CURRENT HOUR IN UTC
// ============================================================================
utc_timestamp = chartTimeToUTC()
utc_hour = hour(utc_timestamp)
utc_minute = minute(utc_timestamp)
utc_dow = dayofweek(utc_timestamp)

// Treat Sunday (1) and Saturday (7) as weekend
is_weekend = utc_dow == 1 or utc_dow == 7

// ============================================================================
// SESSION TIME WINDOWS (UTC)
// Asia (Tokyo):      20:00 (Sun) - 08:59 (Mon-Fri) / closed weekends
// London (London):   07:00 - 15:59 (Mon-Fri) / closed weekends
// New York (NY):     12:00 - 20:59 (Mon-Fri) / closed weekends
// ============================================================================

// Asia: opens Sun 20:00 UTC, closes Fri 08:59 UTC
is_asia_session = false
if not is_weekend
    if utc_hour >= 20 and utc_dow == 1  // Sunday 20:00 onwards
        is_asia_session := true
    else if utc_dow >= 2 and utc_dow <= 5 and utc_hour < 9  // Mon-Thu before 09:00
        is_asia_session := true
    else if utc_dow == 6 and utc_hour < 9  // Friday before 09:00
        is_asia_session := true
else if utc_dow == 1 and utc_hour >= 20  // Sunday evening
    is_asia_session := true

// London: 07:00 - 15:59 UTC, Mon-Fri
is_london_session = (utc_dow >= 2 and utc_dow <= 6) and utc_hour >= 7 and utc_hour < 16

// New York: 12:00 - 20:59 UTC, Mon-Fri
is_newyork_session = (utc_dow >= 2 and utc_dow <= 6) and utc_hour >= 12 and utc_hour < 21

// ============================================================================
// PLOT BACKGROUNDS
// ============================================================================
if input_asia and is_asia_session
    bgcolor(color_asia)

if input_london and is_london_session
    bgcolor(color_london)

if input_newyork and is_newyork_session
    bgcolor(color_newyork)

// ============================================================================
// DUMMY PLOT (for indicator to show legend)
// ============================================================================
plot(na, title="Indicator", display=display.none)

How the code works

The indicator reads the chart's current bar time and converts it from the user's selected timezone to UTC, ensuring consistency across all traders regardless of their local time. It then extracts the hour of day and day of week in UTC to determine which session is currently active.

Each session has fixed UTC time windows that account for when markets are open (excluding weekends). Asia (Tokyo) runs from 20:00 UTC Sunday through 08:59 UTC Friday, a span that crosses the week boundary. London runs 07:00 to 15:59 UTC Monday through Friday. New York runs 12:00 to 20:59 UTC Monday through Friday. The code evaluates these ranges for every bar, and when a session is active, it fills the background with that session's color.

The inputs let traders toggle each session on or off and choose custom background colors. The timezone selector corrects the chart time to UTC; a trader in New York (UTC-5 or UTC-4 depending on daylight saving) can select their offset so the indicator calculates the correct UTC hour. The background shading updates continuously as bars form within each session window.

Reading it on a chart

When the Asia session is active, the chart background tints blue (default). During London hours, it shifts to orange. When New York opens, it becomes red. Sessions can overlap: between 12:00 and 15:59 UTC, both London and New York are live, and the indicator shows whichever session color is defined first (typically London, though the visual depends on the colors chosen).

Traders watching a 15-minute or hourly chart can quickly spot which session they are in and observe how price behavior, volatility, and spread width change at session transitions. A trader in New York, for example, might notice that spreads tighten sharply at 07:00 UTC (when London opens) and again at 12:00 UTC when New York itself begins.

The shading also highlights when a session is closed. If no color appears, the market is in a closed period (weekend, or between-session gap). This absence of color is itself information: it tells a trader that the next major session is hours away and liquidity is thinner.

Limitations

This indicator assumes that each session starts and ends at a fixed UTC time. In reality, session times shift by one hour twice yearly when daylight saving time begins or ends in each region. The London session, for example, shifts from UTC+0 in winter to UTC+1 in summer, yet the indicator uses a fixed UTC window. Traders must manually adjust the timezone input when daylight saving transitions occur, or the session times will be off by one hour.

Second, the indicator treats all days within a session's window as identical. Some holidays (Christmas, Thanksgiving, New Year's) close forex markets, but the code has no holiday calendar. On a US holiday, it will still shade the New York session as active, even though prices may not move.

Third, the colors used are purely visual and do not encode market quality. A blue shading does not guarantee tight spreads or high volume; session activity varies by instrument (forex spreads differ from equity indices) and by day. The indicator is a time-of-day reference only.

Fourth, session times vary slightly by broker and instrument. Some forex brokers define Asia as 22:00 UTC, others as 20:00 UTC. Equity markets like the US have official open times (09:30 ET) but off-hours trading outside those hours. Traders should verify their broker's exact session times and adjust the code if needed.

Finally, the indicator does not detect partial closures or early sessions (e.g., early close on Christmas Eve). A chart may show New York as active when the market actually closed at 13:00 UTC.


Key definitions

Killzone: A high-volatility period (typically the first one to two hours after a session opens) characterized by rapid price movement, wide spreads, and frequent reversals; term also used to describe the entire session's active hours.

Overlay: A chart display type that draws on top of price bars without creating a separate pane below; used here to shade backgrounds without cluttering the interface.

UTC: Coordinated Universal Time, the global standard time reference; all trading sessions are defined in UTC to eliminate ambiguity across time zones.

Daylight Saving Time: The seasonal shift forward (spring) or backward (autumn) of local time in many regions, which changes a market's UTC offset by one hour.

Session: A fixed period during which a major financial market is officially open for trading, defined by the exchange's operating hours.

Spread: The difference between the bid price (buy) and ask price (sell) offered by a broker or market maker; typically tighter (narrower) during high-liquidity session hours.

References

  • CME Group, "FX Trading Hours and Holidays", CME Globex, https://www.cmegroup.com
  • Intercontinental Exchange (ICE), "Equity Market Hours", NYSE/Nasdaq Rules, https://www.nyse.com
  • ASEAN Federation, "Tokyo Trading Session, Japan Stock Exchange", JSE/JPX Documentation
  • Investopedia, "Forex Trading Sessions", https://www.investopedia.com (practitioner reference for session conventions)

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-25. Educational research on historical data, not financial advice.

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. Found an error? Email support@prop-ledger.org and the paper is corrected or withdrawn.