persistable sclass StopLossJuicer extends AbstractJuicer { new L signals; // How much loss we will accept // Can be positive (stop loss in profit) or negative (stop loss with actual loss) settable double stopLossThreshold; L calculateCloseSignals() { var signals = super.calculateCloseSignals(); double juiceValue = juiceable.juiceValue(); // How close are we to our loss limit? signals.add(new CloseSignal().createdBy(this), "Loss", doubleRatio(juiceValue, stopLossThreshold)); ret signals; } }