sclass Corridor { record noeq Position( settable double openingPrice, settable double direction) { settable double closingPrice = Double.NaN; } settable double ladderStep = 1; new L loops; record noeq Loop( settable double startingPrice, settable double direction) { Position position; Loop successor; selfType init { loops.add(this); 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(); } }