Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions include/strategies/randomStrategy.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ class RandomStrategy : public IStrategy {
// is passed by mutable reference so future strategies (trailing
// stops, partial closes, scale-ins) can act on open positions
// here without changing the interface.
void during(std::size_t tickValue,
const PriceData& price,
void during(const PriceData& price,
TradeManager& tradeManager) override;

private:
Expand Down
3 changes: 1 addition & 2 deletions include/strategies/strategy.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ class IStrategy {
// analogue is just passing the manager as a parameter; C# has no
// distinction between reference and pointer so the by-ref nature
// is implicit there.
virtual void during(std::size_t tickValue,
const PriceData& price,
virtual void during(const PriceData& price,
TradeManager& tradeManager) = 0;
};
4 changes: 2 additions & 2 deletions include/utilities/base64.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@

class Base64 {
public:
static const std::string b64encode(const void* data, const size_t &len);
static const std::string b64decode(const void* data, const size_t &len);
static const std::string b64encode(const unsigned char* data, const size_t &len);
static const std::string b64decode(const unsigned char* data, const size_t &len);
static std::string b64encode(const std::string& str);
static std::string b64decode(const std::string& str64);
static bool isValidBase64(const std::string& input);
Expand Down
11 changes: 9 additions & 2 deletions source/databaseConnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,13 @@
#include <boost/decimal.hpp>

static std::chrono::system_clock::time_point fastParseTimestamp(const char* ts) {
int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0, usec = 0;
int year = 0;
int month = 0;
int day = 0;
int hour = 0;
int min = 0;
int sec = 0;
int usec = 0;
const int parsedFields =
std::sscanf(ts, "%4d-%2d-%2d %2d:%2d:%2d.%d", &year, &month, &day, &hour, &min, &sec, &usec);
if (parsedFields != 6 && parsedFields != 7) {
Expand Down Expand Up @@ -59,7 +65,8 @@ std::vector<PriceData> DatabaseConnection::streamQuery(const std::string& query)

for (std::size_t i = 0; i < result.size(); ++i) {
const auto& row = result[static_cast<pqxx::result::size_type>(i)];
boost::decimal::decimal64_t ask, bid;
boost::decimal::decimal64_t ask;
boost::decimal::decimal64_t bid;
auto symbol = row[0].view();
auto sv1 = row[1].view();
auto sv2 = row[2].view();
Expand Down
5 changes: 1 addition & 4 deletions source/operations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ void Operations::run(const std::vector<PriceData>& ticks,

const auto& tradingVars = config.STRATEGY.TRADING_VARIABLES;

std::size_t tickIndex = 0;
for (const auto& tick : ticks) {

// Close any trade whose stop-loss or take-profit fired on this tick
Expand All @@ -90,9 +89,7 @@ void Operations::run(const std::vector<PriceData>& ticks,
// (e.g. trailing stops, partial closes). The default
// RandomStrategy implementation is a no-op now that exits are
// handled by reviewStopAndLimit above.
strategy->during(tickIndex, tick, *tradeManager);

++tickIndex;
strategy->during(tick, *tradeManager);
}

std::cout << "Final PnL: " << std::fixed << std::setprecision(2) << tradeManager->calculatePnl() << std::endl;
Expand Down
3 changes: 1 addition & 2 deletions source/strategies/randomStrategy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ std::optional<Direction> RandomStrategy::decide(const PriceData& /*tick*/) {
return coin(rng) ? Direction::LONG : Direction::SHORT;
}

void RandomStrategy::during(std::size_t /*tickValue*/,
const PriceData& /*price*/,
void RandomStrategy::during(const PriceData& /*price*/,
TradeManager& /*tradeManager*/) {
// Exits are handled centrally by Operations using each trade's
// stop-loss / take-profit pip distances. Strategies that want
Expand Down
2 changes: 1 addition & 1 deletion source/trading/tradeManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
namespace {
std::string nextTradeId() {
static std::atomic<uint64_t> counter{0};
return "T" + std::to_string(counter.fetch_add(1, std::memory_order_relaxed));
return "T" + std::to_string(counter.fetch_add(1));
}
}

Expand Down
12 changes: 6 additions & 6 deletions source/utilities/base64.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ std::string Base64::checkInput(const std::string& base64_input) {
}

// Code adapted from Stack Overflow https://stackoverflow.com/a/37109258/20806857
const std::string Base64::b64encode(const void* data, const size_t &len)
const std::string Base64::b64encode(const unsigned char* data, const size_t &len)
{
std::string result((len + 2) / 3 * 4, '=');
unsigned char *p = (unsigned char*) data;
const unsigned char *p = data;
char *str = &result[0];
size_t j = 0, pad = len % 3;
const size_t last = len - pad;
Expand All @@ -59,11 +59,11 @@ const std::string Base64::b64encode(const void* data, const size_t &len)
return result;
}

const std::string Base64::b64decode(const void* data, const size_t &len)
const std::string Base64::b64decode(const unsigned char* data, const size_t &len)
{
if (len == 0) return "";

unsigned char *p = (unsigned char*) data;
const unsigned char *p = data;
size_t j = 0,
pad1 = len % 4 || p[len - 1] == '=',
pad2 = pad1 && (len % 4 > 2 || p[len - 2] != '=');
Expand Down Expand Up @@ -93,12 +93,12 @@ const std::string Base64::b64decode(const void* data, const size_t &len)

std::string Base64::b64encode(const std::string& str)
{
return b64encode(str.c_str(), str.size());
return b64encode(reinterpret_cast<const unsigned char*>(str.c_str()), str.size());
}

std::string Base64::b64decode(const std::string& str64)
{
return b64decode(str64.c_str(), str64.size());
return b64decode(reinterpret_cast<const unsigned char*>(str64.c_str()), str64.size());
}

bool Base64::isValidBase64(const std::string& input) {
Expand Down
Loading