Volume Oscillator (VO) Definition & Implementation with LightningChart JS Trader

Article

Learn how to implement the Volume Oscillator in your fintech software projects using LightningChart JS Trader to analyze volume momentum.
Soroush Sohrabian

Ahmad Omid

Data Science Developer

LinkedIn icon
Volume-Oscillator-Cover

Introduction to Volume Oscillator (VO) Indicator

The Volume Oscillator (VO) is a technical analysis tool designed to evaluate the momentum of trading volume. It operates similarly to the Moving Average Convergence Divergence (MACD), but instead of price, it focuses on volume trends. Traders use the VO to confirm or refute signals generated by other indicators, providing an additional layer of market insight.

The VO is comprised of three main components:

  1. VO Line: The difference between short-period and long-period volume moving averages.
  2. Signal Line: A moving average of the VO line, typically over a shorter signal period.
  3. Histogram: Represents the difference between the VO line and the signal line.

How Is It Used in Trading?

The VO is instrumental in identifying periods of increased market activity, which often precedes significant price movements. When the VO is positive, it signals stronger volume momentum, typically supporting an ongoing trend. Conversely, a negative VO may indicate waning volume momentum, often preceding trend reversals.

Brief Comparison with Volume Zone Oscillator (VZO)

The Volume Zone Oscillator (VZO) is another volume-based indicator but differs from the VO in its methodology. While the VO focuses on the momentum of moving averages, the VZO integrates price and volume to plot values within predefined zones. The VO excels in pinpointing shifts in volume trends, while the VZO provides a broader view of volume dynamics in relation to price levels.

Formula

The Volume Oscillator is calculated using the following formula:

VO = ShortTerm MA (Volume) − LongTerm MA (Volume)

The Signal Line is a moving average of the VO:

SignalLine = MA(VO, Signal Period)

The Histogram is:

Histogram = VO − SignalLine

Interpretation

  • VO Line: Indicates the raw momentum of volume changes.
  • Signal Line: Smoothens VO values to reduce noise and confirm trends.
  • Histogram: Helps visualize the divergence or convergence between the VO line and the signal line.

Key Components

  1. Short Period Moving Average: Captures recent volume trends and reacts quickly to changes.
  2. Long Period Moving Average: Provides a baseline for evaluating volume momentum.
  3. Signal Line: Acts as a trigger for actionable signals, such as crossovers.
  4. Zero Line: A reference point. Values above indicate increasing volume momentum, while values below suggest decreasing momentum.

How to Create the Technical Indicator Using LC JS Trader

Step 1: Get LightningChart JS Trader

To begin, you’ll need access to LightningChart JS Trader. This library provides the tools necessary to create advanced technical indicators, including the Volume Oscillator Indicator. Visit the LightningChart JS Trader page to download the required components and review the documentation.

Step 2: Review the Interactive Example

LightningChart JS Trader includes interactive examples that demonstrate how to create custom technical indicators. Start by reviewing the documentation, focusing on how to integrate the Volume Oscillator Indicator into your chart setup. The interactive examples will guide you through the process of setting up the VO Indicator, from importing the necessary modules to modify the chart settings.

Step 3: Code Explanation

In this step, we will break down the code that creates the chart with the Volume Oscillator Indicator, as shown in the image, using LightningChart JS Trader. The code demonstrates how to initialize a trading chart, apply the VO Indicator, and customize its appearance.

Volume-Oscillator-Chart-Example

Here’s a detailed breakdown of each section:

A. Importing the Required Libraries:

   const lcjsTrader = require('@arction/lcjs-trader')
   const lcjs = require('@arction/lcjs')
   const { Themes } = lcjs
  • lcjsTrader: This library provides access to the LightningChart JS Trader functionalities, allowing you to create advanced financial charts.
  • lcjs: The main LightningChart JS library, used for general charting functionality.
  • Themes: A property within lcjs that provides access to pre-built themes. In this case, we are using the darkGold theme to style the chart.

B. Initializing the Trading Chart:

   lcjsTrader.trader(TRADER_LICENSE).then(async (trader) => {
    // Create a trading chart.
    const tradingChart = trader.tradingChart({ loadFromStorage: false, colorTheme: Themes.darkGold })
  • trader(TRADER_LICENSE): Initializes the LightningChart JS Trader with the provided license key (TRADER_LICENSE). This is required to access the charting functionalities for financial data.

Note you can request a LightningChart JS Trader trial license, which is free.

  • tradingChart(): This function creates a trading chart with certain options.
  • loadFromStorage: false: This disables the loading of previously stored chart data from local storage, ensuring a fresh chart setup.
  • colorTheme: Themes.darkGold: This applies the darkGold theme to the chart, which influences the background color, gridlines, and other visual elements.

C. Adding and Customizing the Indicator

    // Add a Volume Oscillator indicator
    const vo = tradingChart.indicators().addVolumeOscillator()
    vo.setPeriodCounts(12, 26, 9)
    vo.setMovingAverageType(0)
    vo.setMovingAverageSignal(0)
    vo.setCalculateAsPercentage(true)
    vo.setVOLineColor('#FFE433')
    vo.setSignalLineColor('#47C8FF')
    vo.setHistogramColor('#9E66B7')
    vo.setLineWidth(3)
  • addVolumeOscillator(): VO is a momentum oscillator for Volume, that works similarly to MACD. VO can be used to confirm or refute other signals.
  • vo.setPeriodCounts (12, 26, 9): Sets the numbers of time periods (n) used to calculate the indicator (New short period count, New long period count, New signal period count).
  • **vo.setMovingAverageType(0): This method sets the type of Moving Average used to calculate the short and long averages. In this case, 0 represents the Exponential Moving Average (EMA).
  • **vo.setMovingAverageSignal(0): This method sets the type of Moving Average used to calculate the Signal line. In this case, 0 represents the Exponential Moving Average (EMA).
  • vo.setVOLineColor('# FFE433'): Changes the color of the Volume Oscillator line to yellow.
  • vo.setSignalLineColor('# FFE433'): Changes the color of the Signal line to blue.
  • vo.setHistogramColor('# FFE433'): Changes the color of the Histogram to purple.
  • vo.setLineWidth(3): Sets the line thickness of Volume Oscillator indicator to 3 pixels. This makes the line more prominent and easier to observe during analysis.

D. Loading Data from a CSV File

    // Reading data from a file.
    await fetch(`${document.head.baseURI}examples/assets/0000/Alphabet Inc (GOOGL).csv`).then((res) => res.text()).then((text) => {
        tradingChart.readCsvString(text, 'Alphabet Inc (GOOGL)')
    })
  • fetch(): This function retrieves a CSV file containing historical data for Alphabet Inc. (GOOGL). The CSV file includes pricing information for the company’s stock, which is plotted on the chart.
  • readCsvString(): This function reads the CSV data and interprets it as pricing data for Alphabet Inc. The second argument (‘Alphabet Inc (GOOGL)’) sets the label for the chart, as seen at the top of the chart image.

E. Setting the Currency for the Chart

    tradingChart.setCurrency('USD')
   })
  • setCurrency('USD'): This sets the currency of the chart to USD, ensuring that the pricing data is interpreted and displayed in US dollars.

** Enumeration of Moving Average Types in LC JS Trader:

  • Exponential Moving Average (EMA): 0
  • None: 1 (No moving average applied)
  • Simple Moving Average (SMA): 2
  • Time Series Moving Average (TSMA): 3
  • Triangular Moving Average (TMA): 4
  • Variable Moving Average (VMA): 5
  • Variable Index Dynamic Average (VIDYA): 6
  • Volume Weighted Moving Average (VWMA): 7
  • Weighted Moving Average (WMA): 8
  • Welles Wilder’s Smoothing (WWS): 9

Analyzing Trend Strength with Volume Oscillator

Increase in Price and Volume

When both price and volume increase simultaneously, it suggests strong market momentum. A rising VO above the zero line confirms this trend, reinforcing bullish sentiment.

Fast Volume MA Above Slow Volume MA

A crossover where the short-period MA surpasses the long-period MA signals growing volume momentum. This often aligns with trend continuation or breakout scenarios.

Volume Oscillator Above Zero Line

The VO crossing above the zero line is a bullish signal, while a drop below indicates bearish conditions. Persistent readings above or below zero provide clarity on trend strength.

Volume Oscillator Divergences

Definition and Significance

Divergences occur when the VO moves in the opposite direction of price action. For instance:

  • Bullish Divergence: VO increases while the price declines, suggesting a potential reversal to the upside.
  • Bearish Divergence: VO decreases while the price rises, hinting at an impending downtrend.

Impact on Price Direction and Trend Reversal

Divergences are valuable predictors of trend changes. They provide early warnings, enabling traders to position themselves strategically ahead of reversals.

Advantages and Limitations of the Indicator

The Volume Oscillator (VO) is a versatile and insightful technical analysis tool, offering several advantages for traders. One of its primary benefits is its ability to analyze volume momentum, providing unique insights that complement price-based indicators. This makes it a powerful tool for confirming trends or identifying potential reversals.

The VO’s capacity to highlight divergences—where volume momentum contradicts price movement—provides early warnings of impending trend changes, allowing traders to position themselves strategically. Furthermore, its customizability ensures that users can tailor the short-term and long-term moving average periods to suit various market conditions and trading strategies, enhancing its adaptability.

Despite its strengths, the Volume Oscillator also has limitations. Like most moving average-based indicators, it suffers from a lagging effect, meaning that its signals may trail actual market movements. This delay can make it less effective in rapidly changing or highly volatile markets where swift decision-making is crucial.

Additionally, the VO relies heavily on the quality of volume data, which can vary across markets or assets. In instruments with low or inconsistent trading volumes, the VO’s signals may be unreliable. Another challenge is its sensitivity to parameter settings—incorrectly chosen periods for the short-term and long-term moving averages can generate false signals, potentially leading to poor trading decisions.

Conclusion

The Volume Oscillator (VO) is a powerful technical analysis tool for evaluating volume momentum, providing critical insights into market activity. By understanding its components, formulas, and applications, traders can leverage the VO to confirm trends, identify divergences, and make informed decisions.

Using LightningChart JS Trader, implementing the VO becomes seamless, allowing for interactive visualization and enhanced analysis. Mastering this indicator, alongside complementary tools, can significantly elevate a trader’s ability to navigate complex markets with confidence.

Continue learning with LightningChart

JavaScript Data Visualization With LightningChart JS

JavaScript Data Visualization With LightningChart JS

Written by a human | Updated on April 9th, 2025LightningChart JS  LightningChart JS is the top contestant for next-generation JavaScript data visualization tools for web and mobile applications. From the start, it has been engineered to deal with maximum-size...

The Complete Guide to JavaScript Charts

The Complete Guide to JavaScript Charts

Written by a human | Updated on April 9th, 2025JavaScript Charting Libraries  Charting libraries are at a high peak and their development and usage are becoming even more popular in languages like JavaScript. As proof, there are a lot of JavaScript charting...