How to Detect Market Close in Pine Script?

Importance of Identifying Market Close

Detecting the market close is crucial for many trading strategies. It allows you to:

  • Close positions to reduce overnight risk.
  • Execute specific actions based on end-of-day data.
  • Avoid trading during illiquid after-hours sessions.

Knowing precisely when the market closes provides a foundation for building robust and reliable trading algorithms in Pine Script.

Overview of Pine Script and its Limitations

Pine Script is TradingView’s proprietary scripting language designed for creating custom indicators and strategies. While powerful, it has limitations. One key challenge is the lack of a direct function to definitively determine market close without considering exchange-specific nuances.

Methods for Detecting Market Close

Several methods can be used to detect market close, each with its trade-offs.

Using the hour and minute Variables

The simplest approach is to use the built-in hour and minute variables. This involves directly checking if the current time matches the market’s closing time.

//@version=5
indicator("Market Close Detection", overlay=true)

market_close_hour = 16  // 4 PM
market_close_minute = 0  // 0 Minutes

is_market_close = hour == market_close_hour and minute == market_close_minute

plotshape(is_market_close, style=shape.flag, color=color.red, size=size.small, title="Market Close")

Limitation: This method is time-zone-dependent and requires manual adjustment based on the exchange.

Leveraging the time Variable and Session Information

The time variable provides a timestamp, and session strings can define trading hours. By combining these, more specific market close detection can be achieved.

//@version=5
indicator("Market Close Detection with Session", overlay=true)

session_time = session.regular
market_close_time = time(timeframe.period, session_time, "15:59-16:00")

is_market_close = not na(market_close_time)

plotshape(is_market_close, style=shape.flag, color=color.green, size=size.small, title="Market Close Session")

Explanation: We specify a session (session.regular) and then check if the current time falls within a specified interval (one minute before the close). not na(market_close_time) confirms that the current time is inside our close session.

Implementing Custom Session Logic

For complex scenarios or non-standard market hours, you can create custom session logic using comparisons of hour, minute, and dayofweek.

//@version=5
indicator("Custom Market Close", overlay=true)

close_hour = 17
close_minute = 0

is_market_close = hour == close_hour and minute == close_minute

plotshape(is_market_close, style=shape.flag, color=color.blue, size=size.small, title="Custom Close")

Flexibility: This method offers complete control but requires careful handling of different market schedules.

Practical Examples and Code Snippets

Detecting Market Close for Specific Exchanges (e.g., NYSE)

For NYSE, the standard close is 4:00 PM ET. The code needs to account for this specific time.

//@version=5
indicator("NYSE Market Close", overlay=true)

york_close_hour   = 16
york_close_minute = 00

is_close = hour == york_close_hour and minute == york_close_minute
plotshape(is_close, title = "NYSE Close", style=shape.xcross, color=color.red, size=size.small)

Handling Early Market Closes or Half-Days

Market holidays or half-days require conditional logic. You can use dayofmonth and month variables to check for specific dates.

//@version=5
indicator("Early Market Close", overlay=true)

close_hour_normal = 16
close_minute_normal = 0
close_hour_early = 13
close_minute_early = 0

is_early_close_day = (month == 11 and dayofmonth == 24) // Example: Day before Thanksgiving

close_hour = is_early_close_day ? close_hour_early : close_hour_normal
close_minute = is_early_close_day ? close_minute_early : close_minute_normal

is_market_close = hour == close_hour and minute == close_minute

plotshape(is_market_close, style=shape.flag, color=color.purple, size=size.small, title="Early Close")

Combining Multiple Conditions for Robust Detection

Combine different checks (time, day, session) to create a more reliable detection system.

Advanced Techniques and Considerations

Accounting for Time Zone Differences

TradingView charts display time in the exchange’s time zone. Always adjust your logic accordingly. This adjustment depends on the symbol and the exchange.

Using syminfo.timezone

syminfo.timezone returns the timezone of the chart’s symbol. You can use it with timestamp() to do advanced calculations across timezones.

//@version=5
indicator("Timezone Example", overlay=true)

ny_close = timestamp(syminfo.timezone, year, month, dayofmonth, 16, 00, 00)

plotshape(time == ny_close, style=shape.flag, color=color.orange, size=size.small)

Optimizing Code for Performance

Minimize calculations within if statements that are executed on every tick. Cache frequently used values to improve efficiency.

Conclusion

Summary of Methods and Best Practices

Detecting market close in Pine Script requires careful consideration of time zones, session information, and potential early closures. By combining the techniques discussed, you can create robust and reliable detection mechanisms for your trading strategies.

Further Resources and Learning

  • TradingView Pine Script documentation.
  • Community forums for advanced techniques.
  • Example scripts available on TradingView’s public library.

Leave a Reply