I'm trying to use a custom indicator with an alpha, and no matter how I try to do it it gives me a data mismatch. I've been spinning my wheels for days but there doesn't seem to be much out there.

in the alpha OnSecurityChanged event, I have 

// Initialize data for added securities
var symbols = changes.AddedSecurities.Select(x => x.Symbol);

algorithm.History(symbols, _numberOfBarsNeededForHistory, _resolution).PushThroughConsolidators(symbol =>
{
SymbolData symbolData;
if (!_symbolDataBySymbol.TryGetValue(symbol, out symbolData))
{
symbolData = new SymbolData(algorithm, symbol, _consolidatorTimeSpan);
_symbolDataBySymbol[symbol] = symbolData;
}

return symbolData.GetConsolidator();
});

In the SymbolData class

private class SymbolData
{
private readonly Symbol _symbol;
private readonly IDataConsolidator _consolidator;

private Tdi _tdiIndicator { get; }



public SymbolData(QCAlgorithm algorithm, Symbol symbol, TimeSpan consolidatorResolution)
{
_symbol = symbol;
_tdiIndicator = new Tdi();

_consolidator = algorithm.ResolveConsolidator(symbol, consolidatorResolution);
algorithm.RegisterIndicator(symbol, _tdiIndicator, _consolidator);
}

public bool IsReady {
get
{
return _tdiIndicator.IsReady;
}
}

internal void RemoveConsolidators(QCAlgorithm algorithm)
{
algorithm.SubscriptionManager.RemoveConsolidator(_symbol, _consolidator);
}

internal IDataConsolidator GetConsolidator()
{
return _consolidator;
}
}

And in the custom indicator class

public class Tdi : BarIndicator, IIndicatorWarmUpPeriodProvider
{

and

protected override decimal ComputeNextValue(IBaseDataBar input)
{

The error I get when I try to run this is 

System.ArgumentException: IndicatorBase.Update() 'input' expected to be of type QuantConnect.Indicators.IndicatorDataPoint but is of type QuantConnect.Data.Market.TradeBar
at QuantConnect.Indicators.IndicatorBase`1[T].Update (QuantConnect.Data.IBaseData input) [0x000aa] in <7096479a1e444df4a9f2ad9c767cb7f0>:0
at QuantConnect.Indicators.Tdi.ComputeNextValue (QuantConnect.Data.Market.IBaseDataBar input) [0x00001] in :0
at QuantConnect.Indicators.IndicatorBase`1[T].ValidateAndComputeNextValue (T input) [0x00000] in <7096479a1e444df4a9f2ad9c767cb7f0>:0
at QuantConnect.Indicators.IndicatorBase`1[T].Update (QuantConnect.Data.IBaseData input) [0x000bc] in <7096479a1e444df4a9f2ad9c767cb7f0>:0
at QuantConnect.Algorithm.QCAlgorithm+<>c__DisplayClass552_0`1[T].b__1 (System.Object sender, QuantConnect.Data.IBaseData consolidated) [0x0000e] in <48c39c54657e4638b08952dba8212e4d>:0
at QuantConnect.Data.Consolidators.DataConsolidator`1[TInput].OnDataConsolidated (QuantConnect.Data.IBaseData consolidated) [0x0000a] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Data.Consolidators.PeriodCountConsolidatorBase`2[T, TConsolidated].OnDataConsolidated (TConsolidated e) [0x00000] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Data.Consolidators.PeriodCountConsolidatorBase`2[T, TConsolidated].Update (T data) [0x001e0] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Data.Consolidators.DataConsolidator`1[TInput].Update (QuantConnect.Data.IBaseData data) [0x00037] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Data.SliceExtensions+<>c__DisplayClass10_0.b__0 (QuantConnect.Data.BaseData data) [0x0001b] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Data.SliceExtensions.PushThrough (System.Collections.Generic.IEnumerable`1[T] slices, System.Action`1[T] handler) [0x00095] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Data.SliceExtensions.PushThroughConsolidators (System.Collections.Generic.IEnumerable`1[T] slices, System.Func`2[T, TResult] consolidatorsProvider) [0x0000d] in <9974326b8fbc4e48acebad4ed7c9c9e4>:0
at QuantConnect.Algorithm.CSharp.Alphas.TDIAlphaModel.OnSecuritiesChanged (QuantConnect.Algorithm.QCAlgorithm algorithm, QuantConnect.Data.UniverseSelection.SecurityChanges changes) [0x000c5] in :0
at QuantConnect.Algorithm.QCAlgorithm.OnFrameworkSecuritiesChanged (QuantConnect.Data.UniverseSelection.SecurityChanges changes) [0x00030] in <48c39c54657e4638b08952dba8212e4d>:0
at QuantConnect.Lean.Engine.AlgorithmManager.Run (QuantConnect.Packets.AlgorithmNodePacket job, QuantConnect.Interfaces.IAlgorithm algorithm, QuantConnect.Lean.Engine.DataFeeds.ISynchronizer synchronizer, QuantConnect.Lean.Engine.TransactionHandlers.ITransactionHandler transactions,

Any help would be very much appreciated.