#include "aggregation.hpp" #include #include #include std::vector aggregate_days(const std::vector& records) { // Накопители для каждого дня struct DayAccumulator { double avg_sum = 0.0; double open_min = std::numeric_limits::max(); double open_max = std::numeric_limits::lowest(); double close_min = std::numeric_limits::max(); double close_max = std::numeric_limits::lowest(); int64_t count = 0; }; std::map days; for (const auto& r : records) { DayIndex day = static_cast(r.timestamp) / 86400; auto& acc = days[day]; double avg = (r.low + r.high) / 2.0; acc.avg_sum += avg; acc.open_min = std::min(acc.open_min, r.open); acc.open_max = std::max(acc.open_max, r.open); acc.close_min = std::min(acc.close_min, r.close); acc.close_max = std::max(acc.close_max, r.close); acc.count++; } std::vector result; result.reserve(days.size()); for (const auto& [day, acc] : days) { DayStats stats; stats.day = day; stats.avg = acc.avg_sum / static_cast(acc.count); stats.open_min = acc.open_min; stats.open_max = acc.open_max; stats.close_min = acc.close_min; stats.close_max = acc.close_max; stats.count = acc.count; result.push_back(stats); } return result; }