<< Click to Display Table of Contents >>

Navigation:  NinjaScript > Language Reference > Common > AddDataSeries() >


Previous page Return to chapter overview Next page


Similar to the AddDataSeries() method for adding Bars objects, this method adds a Heiken Ashi Bars object for multi-series NinjaScript.



1.When running NinjaScript, you will be able to choose the first instrument and bar interval to run on. This first Bars object will carry a BarsInProgress index of 0.

2. In a multi-time frame and multi-instrument NinjaScript, supplementary Bars objects are added via this method in State.Configure state of the OnStateChange() method and given an incremented BarsInProgress index value. See additional information on running multi-bars scripts.

3.The BarsInProgress property can be used to filter updates between different bars series

4.If using OnMarketData(), a subscription will be created on all bars series added in your indicator or strategy strategy (even if the instrument is the same).  The market data subscription behavior occurs both in real-time and during TickReplay historical

5.For adding regular Bars types please use AddDataSeries()

6.A Tick Replay indicator or strategy CANNOT use a MarketDataType.Ask or MarketDataType.Bid series.  Please see Developing for Tick Replay for more information.




AddHeikenAshi(string instrumentName, Data.BarsPeriodType baseBarsPeriodType, int baseBarsPeriodTypeValue, Data.MarketDataType marketDataType)
AddHeikenAshi(string instrumentName, Data.BarsPeriodType baseBarsPeriodType, int baseBarsPeriodTypeValue, Data.MarketDataType marketDataType, string tradingHoursName)
AddHeikenAshi(string instrumentName, Data.BarsPeriodType baseBarsPeriodType, int baseBarsPeriodTypeValue, Data.MarketDataType marketDataType, string tradingHoursName, bool? isResetOnNewTradingDay)



This method should ONLY be called from the OnStateChange() method during State.Configure

Should your script be the host for other scripts that are creating indicators and series dependent resources in State.DataLoaded, please make sure that the host is doing the same AddHeikenAshi() calls as those hosted scripts would. For further reference, please also review the 'Adding additional Bars Objects to NinjaScript' section in Multi-Time Frame & Instruments

Arguments supplied to AddHeikenAshi() should be hardcoded and NOT dependent on run-time variables which cannot be reliably obtained during State.Configure (e.g., Instrument, Bars, or user input).  Attempting to add a data series dynamically is NOT guaranteed and therefore should be avoided.  Trying to load bars dynamically may result in an error similar to: Unable to load bars series. Your NinjaScript may be trying to use an additional data series dynamically in an unsupported manner.





A string determining instrument name such as "MSFT"


The underlying BarsType used for the Heiken Ashi bars period.


Possible values are:












An int determining the underlying period interval such as "3" for 3 minute bars


The MarketDataType used for the bars object (last, bid, ask)


Possible values are:






Note: Please see the article here on using Bid/Ask series.


A string determining the trading hours template for the instrument


A nullable bool* determining if the Bars object should Break at EOD


*Will accept true, false or null as the input.  If null is used, the data series will use the settings of the primary data series.



Tip: You can optionally add the exchange name as a suffix to the symbol name. This is only advised if the instrument has multiple possible exchanges that it can trade on and it is configured within the Instruments window. For example: AddHeikenAshi("MSFT Arca", BarsPeriodType.Minute, 1, MarketDataType.Last);





protected override void OnStateChange()
  if (State == State.SetDefaults)
      Name = "Examples Indicator";            
  else if (State == State.Configure)
      // Add a 1 minute Heiken Ashi Bars object for the ES 03-18 contract - BarsInProgress index = 1
      AddHeikenAshi("ES 03-18", BarsPeriodType.Minute, 1, MarketDataType.Last);
protected override void OnBarUpdate()
    // Ignore the primary Bars object and only process the Heiken Ashi object
    if (BarsInProgress == 1)
        // Do something;