Algorithm Reference

Consolidating Data

Introduction

Consolidators are used to combine smaller data points into larger bars. Commonly this is used to create 5, 10 or 15 minute bars from minute data. We provide tick, second, minute, hour and daily resolution bars which can be consolidated into any form you wish.

To use consolidators you create the consolidator class and then register it to receive data. Once you've registered the class it automatically gets data updates. Once it has aggregated the desired data it emits an event on the DataConsolidated event handler. You setup the consolidator and bind to this event handler once from inside your Initialize()def Initialize: method.

// Create and initialize a consolidator
public override void Initialize()
{
	//...other initialization...
	AddEquity("SPY", Resolution.Minute);
	var consolidator = new TradeBarConsolidator(15);
	consolidator.DataConsolidated += {
		Debug(Time.ToString() + " > New Bar!");
	};
	SubscriptionManager.AddConsolidator("SPY", consolidator);
}
# Create and initialize a consolidator
def Initialize(self):
    # ...other initialization...
    self.AddEquity("SPY", Resolution.Minute)
    consolidator = TradeBarConsolidator(15)
    consolidator.DataConsolidated += self.OnDataConsolidated
    self.SubscriptionManager.AddConsolidator("SPY", consolidator)

def OnDataConsolidated(self, sender, bar):
    self.Debug(str(self.Time) + " > New Bar!")

TradeBars vs QuoteBars

The specific consolidator you should use depends on the data and assets you're requesting. TradeBars should be consolidated with a TradeBarConsolidator; QuoteBars with a QuoteBarConsolidator and Ticks with a TickConsolidator. Quote tick data must be consolidated by the TickQuoteBarConsolidator.

For each asset class and the data we provide please see the data library. It is a little confusing but here is the summary of QuantConnect provided data:

  • Equities - trade data only. For Resolution.Tick use the TickConsolidator, for all other resolutions use the TradeBarConsolidator.
  • Forex and CFD - quote data only. For Resolution.Tick use the TickQuoteBarConsolidator, for all other resolutions use the QuoteBarConsolidators.
  • Options- trade and quote data, at Resolution.Minute only. For consolidating options data use the TradeBarConsolidator or the QuoteBarConsolidator (depending on if you're consolidating trades or quotes).
  • Futures - trade and quote data, at tick, second and minute resolutions.

Consolidators Indicators

If you'd like to have an indicator updated using a specific resolution of data; e.g. 30-period, 15-minute EMA; then you should ideally use the helper methods which come with the indicators. Most indicators handle setting up these resolution periods for you. See Indicators for more information.

You may have a custom indicator which doesn't have this helper. In this case you should register your indicator with the RegisterIndicator function which will automatically create a consolidator and pipe the data into your Indicator class.

In very rare cases you may want to update your indicator manually. You can do this by passing each data point into your indicator.Update() method from your consolidator DataConsolidated event handler.

// Consolidating minute SPY into Daily SMA/EMA.
var ema = EMA("SPY", 14, Resolution.Daily);
var sma = SMA("SPY", 14, Resolution.Daily);
// Register for daily bars from minutely data.
AddEquity("SPY", Resolution.Minute);
var myTradeBarIndicator = new MyTradeBarIndicator(120);
RegisterIndicator("SPY", myTradeBarIndicator, Resolution.Daily);
# Consolidating minute SPY into Daily SMA/EMA.
ema = self.EMA("SPY", 14, Resolution.Daily)
sma = self.SMA("SPY", 14, Resolution.Daily)
# Register for daily bars from minutely data.
self.AddEquity("SPY", Resolution.Minute)
myTradeBarIndicator = MyTradeBarIndicator(120)
self.RegisterIndicator("SPY", myTradeBarIndicator, Resolution.Daily)
// Create, initialize a consolidator and add an indicator
private SimpleMovingAverage _sma;

public override void Initialize()
{
	//...other initialization...
	AddEquity("SPY", Resolution.Minute);
	var consolidator = new TradeBarConsolidator(30);
	_sma = new SimpleMovingAverage(10);
	RegisterIndicator("SPY", _sma, consolidator);
	SubscriptionManager.AddConsolidator("SPY", consolidator);
}
# Create, initialize a consolidator and add an indicator
def Initialize(self):
    # ...other initialization...
    self.AddEquity("SPY", Resolution.Minute)
    consolidator = TradeBarConsolidator(30)
    self._sma = SimpleMovingAverage(10)
    self.RegisterIndicator("SPY", self._sma, consolidator)
    self.SubscriptionManager.AddConsolidator("SPY", consolidator)

You can also see our Tutorials and Videos. You can also get in touch with us via Chat.

Did you find this page Helpful ?