TradeBench 1.0.0
Algorithmic Trading Backtesting Platform
Loading...
Searching...
No Matches
tradebench_core.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5#include <pqxx/pqxx>
6#include <grpcpp/grpcpp.h>
7#include "analysis.grpc.pb.h"
8
12struct MarketData {
13 std::vector<long long> timestamps;
14 std::vector<double> prices;
15};
16
21 double profit;
23 double win_rate;
25 std::vector<double> equity_curve;
26 std::vector<int> buy_signals;
27 std::vector<int> sell_signals;
28 std::vector<long long> timestamps;
29};
30
35public:
36 explicit DataRepository(const std::string& conn_str);
37 bool checkConnection() const;
38 MarketData fetchPrices(const std::string& pair, const std::string& timeframe, int64_t start_ts, int64_t end_ts);
39 void saveResult(const std::string& task_id, const std::string& result_data);
40private:
41 std::string m_conn_str;
42};
43
48public:
49 std::string optimizeParameters(const MarketData& market_data);
50 BacktestResult runSimulation(const MarketData& market_data, const std::string& strategy_payload);
51
52private:
53 std::vector<std::string> parsePayload(const std::string& payload);
54 BacktestResult runMovingAverageCross(const MarketData& market_data, int fast_window, int slow_window, bool use_ema);
55 BacktestResult runRSI(const MarketData& market_data, int period, double overbought, double oversold);
56 BacktestResult runMACD(const MarketData& market_data, int fast_period, int slow_period, int signal_period);
57 BacktestResult runBollingerBands(const MarketData& market_data, int period, double std_dev_multiplier);
58
59 void calculateEMA(const std::vector<double>& source, int period, int start_idx, std::vector<double>& ema_out);
60 void calculateRSI(const std::vector<double>& prices, int period, std::vector<double>& rsi_out);
61 void finalizeMetrics(BacktestResult& res, double last_price, double initial, double current, double amount, bool in_pos, int wins);
62};
63
67class AnalysisServiceImpl final : public analyzer::AnalysisService::Service {
68public:
69 grpc::Status StartAnalysis(grpc::ServerContext* context, const analyzer::AnalysisRequest* request, analyzer::AnalysisResponse* response) override;
70};
Implementation of the gRPC Analysis Service.
Definition tradebench_core.h:67
grpc::Status StartAnalysis(grpc::ServerContext *context, const analyzer::AnalysisRequest *request, analyzer::AnalysisResponse *response) override
Handles incoming gRPC requests for backtesting.
Definition grpc_service.cpp:18
Engine responsible for executing trading strategies.
Definition tradebench_core.h:47
void finalizeMetrics(BacktestResult &res, double last_price, double initial, double current, double amount, bool in_pos, int wins)
Calculates final profit and win rate metrics for the backtest.
Definition engine.cpp:32
std::string optimizeParameters(const MarketData &market_data)
Finds the best strategy and parameters using an evolutionary Genetic Algorithm.
Definition engine.cpp:448
std::vector< std::string > parsePayload(const std::string &payload)
Parses the strategy payload string into separate tokens.
Definition engine.cpp:12
void calculateRSI(const std::vector< double > &prices, int period, std::vector< double > &rsi_out)
Calculates the Relative Strength Index (RSI).
Definition engine.cpp:66
BacktestResult runMovingAverageCross(const MarketData &market_data, int fast_window, int slow_window, bool use_ema)
Executes the Moving Average Crossover strategy (SMA or EMA).
Definition engine.cpp:132
BacktestResult runBollingerBands(const MarketData &market_data, int period, double std_dev_multiplier)
Executes the Bollinger Bands strategy.
Definition engine.cpp:370
BacktestResult runSimulation(const MarketData &market_data, const std::string &strategy_payload)
Routes the simulation request to the appropriate mathematical strategy.
Definition engine.cpp:99
BacktestResult runMACD(const MarketData &market_data, int fast_period, int slow_period, int signal_period)
Executes the MACD strategy.
Definition engine.cpp:286
BacktestResult runRSI(const MarketData &market_data, int period, double overbought, double oversold)
Executes the Relative Strength Index (RSI) strategy.
Definition engine.cpp:220
void calculateEMA(const std::vector< double > &source, int period, int start_idx, std::vector< double > &ema_out)
Calculates the Exponential Moving Average (EMA).
Definition engine.cpp:47
Handles all interactions with the PostgreSQL database.
Definition tradebench_core.h:34
bool checkConnection() const
Definition database.cpp:6
MarketData fetchPrices(const std::string &pair, const std::string &timeframe, int64_t start_ts, int64_t end_ts)
Definition database.cpp:16
DataRepository(const std::string &conn_str)
Definition database.cpp:4
void saveResult(const std::string &task_id, const std::string &result_data)
Definition database.cpp:40
std::string m_conn_str
Definition tradebench_core.h:41
Structure to hold the advanced result of a backtest simulation.
Definition tradebench_core.h:20
double profit
Definition tradebench_core.h:21
double win_rate
Definition tradebench_core.h:23
std::vector< int > buy_signals
Definition tradebench_core.h:26
std::vector< double > equity_curve
Definition tradebench_core.h:25
double max_drawdown
Definition tradebench_core.h:24
int trades_count
Definition tradebench_core.h:22
std::vector< long long > timestamps
Definition tradebench_core.h:28
std::vector< int > sell_signals
Definition tradebench_core.h:27
Structure to hold market data including timestamps.
Definition tradebench_core.h:12
std::vector< double > prices
Definition tradebench_core.h:14
std::vector< long long > timestamps
Definition tradebench_core.h:13