persistable sclass SMAIndicator extends CandleBasedIndicator { // The SMA calculator settable SmoothedMovingAverage sma; // SMA values collected as ticker gettable TickerSequence history = new TickerSequence("SMA"); // SMA value double value = Double.NaN; Double value() { ret value; } *(int *length) {} { length = 7; onCandleAdded((IVF1) candle -> { if (sma == null) sma = new SmoothedMovingAverage(length); sma.add(candle.close()); value = sma.complete() ? sma! : Double.NaN; if (!isNaN(value)) { long time = candle.endTime().toLong(); history?.addIfPriceChanged(value, time); } }); } TickerSequence asTicker(L candles) { feed(candles); ret history; } void reset :: after { resetFields(this, "value history"); sma?.reset(); } }