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