persistable sclass MAIndicator extends CandleBasedIndicator { // The MA calculator settable SimpleMovingAverage ma; // MA values collected as ticker gettable TickerSequence history = new TickerSequence("MA"); // MA value double value = Double.NaN; Double value() { ret value; } *(int *length) {} { length = 7; onCandleAdded((IVF1) candle -> { if (ma == null) ma = new SimpleMovingAverage(length); ma.add(candle.close()); value = ma.complete() ? ma! : 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"); ma?.reset(); } void integrityCheck { history?.integrityCheck(); } }