// a point in a ticker sequence srecord noeq TickerPoint(TickerSequence ticker, long currentTime) { double currentPrice() { ret lookback(0); } // time = ms to look back double lookback(long time) { ret ticker.priceAtTimestamp(currentTime-time); } // false if looking back would require going outside of the time range bool canLookback(long time) { ret currentTime-time >= ticker.startTime(); } TickerSequence ticker() { ret ticker; } long currentTime aka time() { ret currentTime; } }