persistable abstract sclass AbstractJuicer extends MetaWithChangeListeners { // what we are monitoring & closing (a position or a strategy) settableWithVar Juiceable juiceable; settableWithVar double juiceValue; // last calculated signals settableWithVar L currentSignals; event calculatingCloseSignals(L outList); // must return a new list swappable L calculateCloseSignals() { grabJuiceValue(); new L signals; calculatingCloseSignals(signals); currentSignals(signals); ret signals; } void grabJuiceValue { juiceValue(juiceable.juiceValue()); } selfType configClone() { ret restructure(this); } void copyTransientValuesFrom(AbstractJuicer juicer) {} }