8std::string
to_csv(std::span<const trade_t> summary) {
13 const auto average_profit =
16 : std::ranges::fold_left(summary, 0.0,
17 [](
const auto acc,
const auto trade) {
18 return acc + std::get<4>(trade);
24 "Time,Token,Open,Close,Hours,Profit ({:.2f}% avg, {} trades)\n",
25 average_profit, std::size(summary));
28 for (
const auto &s : summary) {
29 auto [file, entry_time, entry, exit, profit, duration] = s;
31 out += std::format(
"{},{},{:.2f},{:.2f},{},{:.1f}\n", utc, file, entry,
32 exit, duration / 3600, profit);
41 auto out = std::string{};
44 if (not std::empty(summary)) {
47 const auto average_profit =
50 : std::ranges::fold_left(summary, 0.0,
51 [](
const auto acc,
auto &&trade) {
52 auto [file, entry_time, entry, exit,
53 profit, duration] = trade;
59 out += std::format(
"{:.2f}% average profit over {} trades.\n\n",
60 average_profit, std::size(summary));
63 out += std::format(
"|Time|Token|Open|Close|Hours|Profit|\n");
64 out += std::format(
"|---|---|---|---|---|---|\n");
67 for (
const auto &trade : summary) {
68 auto [file, entry_time, entry, exit, profit, duration] = trade;
70 out += std::format(
"|{}|{}|{:.2f}|{:.2f}|{}|{:.1f}%|\n", utc, file, entry,
71 exit, duration / 3600, profit);