sclass PositionCloseOracle { // The currently open position settable TradingPosition position; // our loss tolerance (how much of our investment we are // prepared to lose in one trade) settable double lossTolerancePercent = 10; // Set when position should be closed settable bool closeSignal; // Set when the position is expected to lose money settable bool badClose; // React to a new ticker value coming in void addValue(double price, Timestamp timestamp) { // Feed new price to position position.closingPrice(price); // Bad case - end because too much loss if (lossTooBig()) { closeSignal(true); badClose(true); } // Good case - end because good run ended (TODO) } double absoluteLossTolerance() { ret lossTolerancePercent()*100*position.margin(); } bool lossTooBig() { ret position.expectedPNL() > absoluteLossTolerance(); } }