10std::vector<trade_t>
to_summary(std::span<const std::string_view> files) {
13 std::vector<trade_t> results;
14 auto &&results_mutex = std::mutex{};
17 std::ranges::for_each(files, [&](
auto &&csv) {
18 using namespace std::views;
30 for (
auto &&x : entries) {
33 auto &&entry_it = std::ranges::find_if(
37 auto &&offset = std::ranges::distance(std::cbegin(series), entry_it);
40 auto trade_window_size =
41 std::min(std::size(series) - offset,
static_cast<size_t>(
fx::win));
45 auto &&trade = std::vector<std::vector<double>>{
46 std::cbegin(series) + offset,
47 std::cbegin(series) + offset + trade_window_size};
57 auto &&duration = exit_time - entry_time;
60 auto &&to_token = csv | take(std::ranges::size(csv) - 4uz) | drop(12uz);
63 std::scoped_lock lock(results_mutex);
64 results.push_back({to_token, entry_time,
fx::to_spot(entry),
71 results, [](
auto a,
auto b) {
return std::get<1>(a) > std::get<1>(b); });