persistable sclass TickerSequences is IntSize { settable S market; // e.g. "TRBUSDT" new L tickers; void add(TickerSequence ticker) { tickers.add(ticker); } TickerSequence get(int i) { ret tickers.get(i); } void sort { sortInPlaceByCalculatedField(tickers, ->. startTime()); } public int size() { ret tickers.size(); } toString { ret commaCombine( spaceCombine( n2(tickers, " ticker sequence"), empty(market) ? null : "for " + market), "total time: " + formatDouble1(toDays(totalTime())) + " days"); } long totalTime() { ret longSum(map(tickers, ticker -> ticker.timeRange().length())); } void merge(double maximumGapSeconds default 120) { sort(); for (int i = 0; i+1 < l(tickers); i++) { var t1 = tickers.get(i); var t2 = tickers.get(i+1); if (t2.startTime()-t1.endTime() <= fromSeconds(maximumGapSeconds)) { t1.add(t2); tickers.remove(i+1); } } } }