NinjaScript > Language Reference > Data >


Print this Topic Previous pageReturn to chapter overviewNext page

The OnMarketDepth() method is called and guaranteed to be in the correct sequence for every change in level two market data (market depth) for the underlying instrument. This method can be used to build your own level two book.


Programming to this method is considered advanced programming and exposed for experienced programmer
This is a real-time data stream and can be CPU intensive if your program code is compute intensive (not optimal)
This method is not called on historical data (backtest)


Method Return Value

This method does not return a value.


Method Parameters

MarketDepthEventArgs e


You must override the method in your strategy or indicator with the following syntax.


protected override void OnMarketDepth(MarketDepthEventArgs e)




protected override void OnMarketDepth(MarketDepthEventArgs e)
    // Print some data to the Output window
    if (e.MarketDataType == MarketDataType.Ask && e.Operation == Operation.Update)
         Print("The most recent ask change is " + e.Price + " " + e.Volume);


Additional Reference Samples
Additional reference code samples are available the NinjaScript Educational Resources section of our support forum.



1.With multi-time frame and instrument strategies, OnMarketDepth will be called for all unique instruments in your strategy. Use the BarsInProgress to filter the OnMarketDepth() method for a specific instrument. (BarsInProgress will return the first BarsInProgress series that matches the instrument for the event)
2.Do not leave an unused OnMarketDepth() method declared in your NinjaScript object. This will unnecessarily attach a data stream to your strategy which uses unnecessary CPU cycles.
3.Should you wish to run comparisons against prior values you will need to store and update local variables to track the relevant values.
4.With NinjaTrader being multi-threaded, you should not rely on any particular sequence of events like OnMarketDepth() always being called before OnMarketData() or vice versa.