sclass Corridor { record noeq Position( settable double openingPrice, settable double direction) { settable double closingPrice = Double.NaN; } settable double ladderStep = 1; Position position; record noeq Loop( settable double startingPrice, settable double direction) { Position position; Loop successor; selfType init { addThreshold(startingPrice+ladderStep, direction, -> { position = openPosition(direction); if (successor == null) successor = new Loop(x+ladderStep, direction).init(); }); addThreshold(startingPrice-ladderStep, -direction, -> { position.close(); } } } void start { double price = currentPrice(); new Loop(price-ladderStep, 1).init(); new Loop(price+ladderStep, -1).init(); } } def downLoop x { addNegativeThreshold (x minus ladderStep) < Runnable { openLong downLoop (x minus ladderStep) } addPositiveThreshold (x /*plus ladderStep*/) < Runnable { closeLong } }