#include #include #include #include #include "helpers.h" #include "argh.h" #include "common.h" #include "simulator.h" int main(int argc, const char* argv[]) { argh::parser args; args.add_params({ "s", "stock" }); args.add_params({ "m", "money" }); args.add_params({ "o", "output" }); args.parse(argc, argv); std::string network, input, output; args(1) >> network; args(2, "") >> input; args({"o", "output"}, "") >> output; bool quiet = args[{"q", "quiet"}] && output.empty(); double start_money; unsigned start_stock; args({"s", "stock"}, 1000) >> start_stock; args({"m", "money"}, 1000.) >> start_money; std::function normalizer = [](const double& result) -> double { return result / (1 + abs(result)); }; std::ifstream network_file(network, std::ios::in | std::ios::binary); std::ifstream input_file; std::ofstream output_file; std::istream *in; std::ostream *out; if (!output.empty()) { output_file.open(output); out = &output_file; } else { out = &std::cout; } if (!input.empty()) { input_file.open(input); in = &input_file; } else { in = &std::cin; } current_decider decider(normalizer); decider.load(network_file); simulator sim(&decider, start_money, start_stock); double price; if(!quiet) *out << "x,price,decsion,money,stock" << std::endl; for(int i = 0; *in >> price; i++) { auto decision = sim.proceed(price); if (!quiet) { *out << i + 1 << "," << price << "," << decision << "," << sim.money << "," << sim.stock << std::endl; } } auto wealth = sim.money + sim.stock * price; auto start = start_money + sim.start_price * start_stock; auto hodl = start_money + price * start_stock; std::cout << "Koniec: " << wealth << " " << std::showpos << "S: "<< (wealth - start)*100 / (start) << "%, " << "H: "<< (wealth - hodl)*100 / (hodl) << "%" << std::noshowpos << std::endl; /* decider.network.save(std::cout); */ }