aggregateToKlines function
Implementation
List<KLine> aggregateToKlines(List<Trade> trades, Duration interval) {
trades.sort((a, b) => a.timestamp.compareTo(b.timestamp));
final List<KLine> result = [];
if (trades.isEmpty) return result;
DateTime currentStart = DateTime.fromMillisecondsSinceEpoch(
(trades.first.timestamp.millisecondsSinceEpoch ~/ interval.inMilliseconds) *
interval.inMilliseconds,
);
List<Trade> bucket = [];
for (var trade in trades) {
final bucketStart = DateTime.fromMillisecondsSinceEpoch(
(trade.timestamp.millisecondsSinceEpoch ~/ interval.inMilliseconds) *
interval.inMilliseconds,
);
if (bucketStart != currentStart) {
if (bucket.isNotEmpty) {
result.add(_generateKLine(currentStart, bucket));
}
currentStart = bucketStart;
bucket = [];
}
bucket.add(trade);
}
if (bucket.isNotEmpty) {
result.add(_generateKLine(currentStart, bucket));
}
return result;
}