Некоторые индикаторы могут использовать другие индикаторы, встроенные в них, для подсчета конечных значений. Для создания такого индикатора, создайте вложенный индикатор, добавляя в Initialize() объект Indicators и оставляя его в поле кода. Высчитывая значения индикатора, мы можем использовать исходные данные данного индикатора. Ниже приведен пример индикатора "Detrended Price Oscilator", который использует для расчетов простые скользящие средние:

[Indicator("Detrended Price Oscillator"]
public class DetrendedPriceOscillator : Indicator{
  [Parameter]
  public DataSeries Source { get; set; }
  [Parameter]
  public int Periods { get; set; }
  [Output("Main")]
  public IndicatorDataSeries Result { get; set; }
  private MovingAverage movingAverage;
  protected override void Initialize(){
  movingAverage = Indicators.SimpleMovingAverage(Source, Periods);
}
public override void Calculate(int index){
  Result[index] = Source[index] - movingAverage.Result[index - Periods / 2 - 1];
}

Мы также можем создать вложенный индикатор, основанный на расчетах другого вложенного индикатора. Например, индикатор "Chaikin Volatility" использует средние скользящие индикатора "High minus Low":

[Parameter(DefaultValue = 14)]
public int Periods { get; set; }
[Parameter("MA Type")]
public MovingAverageType MAType { get; set; }
private HighMinusLow highMinusLow;
private MovingAverage movingAverage;
protected override void Initialize(){
  highMinusLow = Indicators.HighMinusLow();
  movingAverage = Indicators.MovingAverage(highMinusLow.Result, Periods, MAType);
}