Home » Operators In Pinescript » Navigating the History-Referencing Operator [ ] in Pine Script

Navigating the History-Referencing Operator [ ] in Pine Script

Photo of author
Published on

Introduction to the [ ] Operator

In Pine Script, the history-referencing operator [ ] is a powerful tool that allows you to access past values of time series data. This capability is crucial for analyzing historical market data and creating dynamic trading strategies. Understanding how to use the [ ] operator effectively is key to unlocking the full potential of Pine Script.

How the [ ] Operator Works

  • Accessing Past Values: The [ ] operator is used after a variable, expression, or function call to reference values from past bars.
  • Syntax: variable[offset], where offset is the number of bars back in time you want to reference.
  • Dynamic Nature: As scripts execute over successive bars, the same offset refers to different bars, making the series dynamic.

Example Usage

  • Accessing volume two bars back: volume[2].
  • On the third bar of a dataset: close[1] refers to the close of the second bar.

Understanding the Execution Model

  • Script Execution on Bars: Scripts in Pine Script execute once for each historical bar, starting from the earliest (leftmost) bar.
  • Series vs. Arrays: Unlike arrays, Pine Script series dynamically grow, and their indexing structure changes as new bars are added.
  • Real-time and Historical Bars: On the real-time bar, close returns the current price, while on historical bars, it refers to the closing price of that bar.

bar_index Variable

  • bar_index indicates the bar number the script is executing on, starting from 0 for the first bar.

Handling Special Cases with [ ]

  • na Values: The [ ] operator can return na (not a number) for bars outside the dataset or under certain conditions.
  • Importance of Handling na: Without proper handling, na values can lead to invalid results in calculations.
  • Using na and nz Functions: These functions help manage cases where history references return na.

Valid Uses of the [ ] Operator

  • Reference high 10 bars back: high[10].
  • Reference the previous value of an SMA: ta.sma(close, 10)[1].
  • Compare the current close to the previous close, using open if close[1] is na: close > nz(close[1], open).

Use Case Example: Price Change Detection

Example Code

indicator("Price Change Detection", overlay=true)
priceChange = close - close[1]
significantChange = abs(priceChange) > ta.sma(abs(priceChange), 20)
plotshape(significantChange, title="Significant Price Change", location=location.belowbar, color=color.purple, style=shape.triangleup)
Referencing Operator

Explanation of Each Line

  1. Script Initialization: //@version=5 sets the Pine Script version.
  2. Indicator Declaration: indicator("Price Change Detection", overlay=true) declares a new indicator with an overlay on the price chart.
  3. Calculating Price Change:
  • priceChange = close - close[1]: Calculates the change in price from the previous bar.
  1. Detecting Significant Change:
  • significantChange = abs(priceChange) > ta.sma(abs(priceChange), 20): Determines if the absolute price change is greater than the 20-period SMA of absolute price changes.
  1. Plotting the Signal:
  • plotshape(significantChange, ...): Plots a purple triangle below the bar if a significant price change is detected.

Key Takeaways

  • The [ ] history-referencing operator is essential for accessing past values in Pine Script.
  • Its dynamic nature allows for powerful analysis of historical data.
  • Proper handling of na values is crucial to avoid invalid results in script calculations.


The history-referencing operator [ ] in Pine Script is an indispensable tool for traders and developers looking to analyze and respond to market dynamics. By understanding and effectively using this operator, you can create more sophisticated and responsive trading strategies. Remember, the key to utilizing the [ ] operator successfully lies in acknowledging its dynamic nature and handling special cases like na values to ensure accurate and meaningful script outputs.

Leave a Comment