tzutrader
A composable C++ backtesting library for trading strategies (experimental)
Loading...
Searching...
No Matches
defs.h
Go to the documentation of this file.
1
12
13#ifndef DEFS_H
14#define DEFS_H
15
16#include <cstdint>
17#include <cmath>
18#include <ostream>
19
20namespace tzu {
21
28enum class Side {
32};
33
44struct Signal {
45 int64_t timestamp;
47 double price;
48 double volume;
49
57 Signal(int64_t ts = 0, Side s = Side::NONE, double p = 0.0, double v = 1.0)
58 : timestamp(ts), side(s), price(p), volume(v) {}
59};
60
74
84struct Ohlcv {
85 int64_t timestamp;
86 double open;
87 double high;
88 double low;
89 double close;
90 double volume;
91
95 Ohlcv(int64_t ts = 0, double o = 0.0, double h = 0.0, double l = 0.0,
96 double c = 0.0, double v = 0.0)
97 : timestamp(ts), open(o), high(h), low(l), close(c), volume(v) {}
98
102 double getFieldValue(OhlcvField field) const {
103 switch (field) {
104 case OhlcvField::OPEN: return open;
105 case OhlcvField::HIGH: return high;
106 case OhlcvField::LOW: return low;
107 case OhlcvField::CLOSE: return close;
108 case OhlcvField::VOLUME: return volume;
109 }
110 return std::nan(""); // Should never reach here
111 }
112};
113
119struct Tick {
120 int64_t timestamp;
121 double price = 0.0;
122 double volume = 0.0;
124 Tick() = default;
125 Tick(int64_t ts, double p, double v, Side s)
126 : timestamp(ts), price(p), volume(v), side(s) {}
127};
128
135 int64_t timestamp;
136 double value = 0.0;
137 SingleValue() = default;
138 SingleValue(int64_t ts, double v) : timestamp(ts), value(v) {}
139};
140
151
157struct Position {
158 int64_t timestamp;
159 double quantity;
160 double price;
161 Position(int64_t ts = 0, double q = 0.0, double p = 0.0)
162 : timestamp(ts), quantity(q), price(p) {}
163};
164
168struct Trade {
169 int64_t open_time;
170 int64_t close_time;
173 double quantity;
174 double profit;
175 bool closed;
176
177 Trade() = default;
178 Trade(int64_t ot =0 , int64_t ct = 0, double op = 0.0, double cp = 0.0,
179 double q = 0.0, double p = 0.0, bool c = false) :
180 open_time(ot), close_time(ct), open_price(op), close_price(cp),
181 quantity(q), profit(p), closed(c) {}
182};
183
188 double total_return = 0.0;
189 double annual_return = 0.0;
190 double max_drawdown = 0.0;
191 double sharpe_ratio = 0.0;
192 double years = 0.0;
193 bool has_annual_return = false;
194};
195
200 double quantity = 0.0;
201 double cash_left = 0.0;
202 double final_value = 0.0;
203 double total_return = 0.0;
204 double annual_return = 0.0;
205 bool has_annual_return = false;
206 bool valid = false;
207};
208
221
222
223} // namespace tzu
224
225
230inline std::ostream& operator<<(std::ostream& os, const tzu::Signal& signal) {
231 os << "timestamp: " << signal.timestamp
232 << " side: "
233 << (signal.side == tzu::Side::BUY
234 ? "BUY"
235 : signal.side == tzu::Side::SELL
236 ? "SELL" : "NONE")
237 << " price: " << signal.price
238 << " volume: " << signal.volume << ")";
239 return os;
240}
241
242#endif // DEFS_H
std::ostream & operator<<(std::ostream &os, const tzu::Signal &signal)
Definition defs.h:230
Definition defs.h:20
Side
Trade direction enumeration.
Definition defs.h:28
@ SELL
Sell signal or short position.
Definition defs.h:30
@ NONE
No action, hold current position.
Definition defs.h:31
@ BUY
Buy signal or long position.
Definition defs.h:29
TimeInterval
Definition defs.h:209
@ HOURS
Definition defs.h:215
@ NANOSECONDS
Definition defs.h:210
@ WEEKS
Definition defs.h:217
@ MINUTES
Definition defs.h:214
@ DAYS
Definition defs.h:216
@ MICROSECONDS
Definition defs.h:211
@ SECONDS
Definition defs.h:213
@ MILLISECONDS
Definition defs.h:212
@ YEARS
Definition defs.h:219
@ MONTHS
Definition defs.h:218
OhlcvField
Field selector for OHLCV data.
Definition defs.h:67
@ LOW
Lowest price in period.
Definition defs.h:70
@ CLOSE
Closing price.
Definition defs.h:71
@ VOLUME
Trading volume.
Definition defs.h:72
@ OPEN
Opening price.
Definition defs.h:68
@ HIGH
Highest price in period.
Definition defs.h:69
DataType
Definition defs.h:146
@ TICK
Definition defs.h:148
@ OHLCV
Definition defs.h:147
@ SINGLE_VALUE
Definition defs.h:149
Definition defs.h:199
double final_value
Definition defs.h:202
double cash_left
Definition defs.h:201
double annual_return
Definition defs.h:204
bool has_annual_return
Definition defs.h:205
double total_return
Definition defs.h:203
bool valid
Definition defs.h:206
double quantity
Definition defs.h:200
double close
Closing price.
Definition defs.h:89
double high
Highest price during period.
Definition defs.h:87
double volume
Trading volume during period.
Definition defs.h:90
int64_t timestamp
Unix timestamp for the candle.
Definition defs.h:85
double low
Lowest price during period.
Definition defs.h:88
Ohlcv(int64_t ts=0, double o=0.0, double h=0.0, double l=0.0, double c=0.0, double v=0.0)
Definition defs.h:95
double getFieldValue(OhlcvField field) const
Definition defs.h:102
double open
Opening price.
Definition defs.h:86
Definition defs.h:187
double annual_return
Definition defs.h:189
double years
Definition defs.h:192
double total_return
Definition defs.h:188
double sharpe_ratio
Definition defs.h:191
double max_drawdown
Definition defs.h:190
bool has_annual_return
Definition defs.h:193
int64_t timestamp
Definition defs.h:158
double quantity
Definition defs.h:159
Position(int64_t ts=0, double q=0.0, double p=0.0)
Definition defs.h:161
double price
Definition defs.h:160
Trading signal generated by a strategy.
Definition defs.h:44
Signal(int64_t ts=0, Side s=Side::NONE, double p=0.0, double v=1.0)
Construct a new Signal object.
Definition defs.h:57
double volume
Volume or size multiplier (default: 1.0).
Definition defs.h:48
double price
Price at which to execute the trade.
Definition defs.h:47
int64_t timestamp
Unix timestamp when signal was generated.
Definition defs.h:45
Side side
Trade direction (BUY/SELL/NONE).
Definition defs.h:46
SingleValue(int64_t ts, double v)
Definition defs.h:138
SingleValue()=default
double value
Definition defs.h:136
int64_t timestamp
Definition defs.h:135
Tick(int64_t ts, double p, double v, Side s)
Definition defs.h:125
double price
Definition defs.h:121
Tick()=default
int64_t timestamp
Definition defs.h:120
Side side
Definition defs.h:123
double volume
Definition defs.h:122
double open_price
Definition defs.h:171
double quantity
Definition defs.h:173
bool closed
Definition defs.h:175
int64_t open_time
Definition defs.h:169
int64_t close_time
Definition defs.h:170
double close_price
Definition defs.h:172
Trade(int64_t ot=0, int64_t ct=0, double op=0.0, double cp=0.0, double q=0.0, double p=0.0, bool c=false)
Definition defs.h:178
Trade()=default
double profit
Definition defs.h:174