Joel Grunbaum
2022-01-19 9ae8b92ba549ab916c88e9004a95c1ed0cd16059
Added loop to click trader and hit self for perf testing
3 files modified
65 ■■■■■ changed files
click.cpp 54 ●●●●● patch | view | raw | blame | history
json.cpp 4 ●●●● patch | view | raw | blame | history
strat.cpp 7 ●●●● patch | view | raw | blame | history
click.cpp
@@ -2,9 +2,11 @@
#include "json.hpp"
#include "protocol.hpp"
#include <cstdint>
#include <cstdlib>
#include <getopt.h>
#include <iostream>
#include <string>
#include <unordered_map>
enum clickType { Buy, Sell, Flash, Delete };
@@ -30,6 +32,7 @@
              << "\t-p price" << std::endl
              << "\t-v volume" << std::endl
              << "\t-i id" << std::endl
              << "\t-l loop count (default to 1)" << std::endl
              << "Always need product, need side, price and volume for "
                 "adding/flash, need id for deleting"
              << std::endl;
@@ -69,10 +72,12 @@
    if (d->type == json::DELETED) {
        std::cout << static_cast<json::DeletedMessage*>(d)->as_string()
                  << std::endl;
    } else {
    } else if (d->type == json::REJECT) {
        std::cout << static_cast<json::RejectMessage*>(d)->as_string()
                  << std::endl;
    }
    } else if (d->type == json::ERROR) {
        std::cout << static_cast<json::ErrorMessage*>(d)->as_string() << std::endl;
    }
    delete b;
    delete d;
}
@@ -87,7 +92,7 @@
    } else if (b->type == json::REJECT) {
        std::cout << static_cast<json::RejectMessage*>(b)->as_string()
                  << std::endl;
    } else {
    } else if (b->type == json::ERROR) {
        std::cout << static_cast<json::ErrorMessage*>(b)->as_string()
                  << std::endl;
    }
@@ -100,11 +105,12 @@
    double price;
    clickType click, side;
    uint64_t volume;
    uint64_t times = 1;
    initialise();
    if (argc == 1) {
        usage(), exit(0);
    }
    while ((c = getopt(argc, argv, "a::t::s::p::v::i::")) != -1) {
    while ((c = getopt(argc, argv, "a::t::s::p::v::i::l::")) != -1) {
        switch (c) {
        case 'a':
            product = std::string(optarg);
@@ -124,6 +130,9 @@
        case 'i':
            id = std::string(optarg);
            break;
        case 'l':
            times = std::stoll(optarg);
            break;
        case '?':
            std::cout << "*1" << std::endl;
        default:
@@ -132,21 +141,24 @@
            exit(0);
        }
    }
    switch (click) {
    case Buy:
        buy(product, price, volume);
        break;
    case Sell:
        sell(product, price, volume);
        break;
    case Flash:
        if (side == clickType::Buy)
            flash(product, price, volume, book::Buy);
        else
            flash(product, price, volume, book::Sell);
        break;
    case Delete:
        deleteOrder(product, id);
        break;
    }
    for (std::uint64_t i = 0; i < times; i++)
    {
        switch (click) {
        case Buy:
            buy(product, price, volume);
            break;
        case Sell:
            sell(product, price, volume);
            break;
        case Flash:
            if (side == clickType::Buy)
                flash(product, price, volume, book::Buy);
            else
                flash(product, price, volume, book::Sell);
            break;
        case Delete:
            deleteOrder(product, id);
            break;
        }
    }
}
json.cpp
@@ -192,7 +192,7 @@
RejectMessage* reject(rapidjson::Value& d)
{
    return new RejectMessage(mapTypes[d["type"].GetString()], "",
    return new RejectMessage(mapTypes[d["type"].GetString()], "",
                             d["error"].GetString(), uint64_t(0), double(0));
}
@@ -392,7 +392,7 @@
std::string RejectMessage::as_string()
{
    return "{\"type\": \"REJECT\", \"product\": \"" + this->product =
    return "{\"type\": \"REJECT\", \"product\": \"" + this->product +
               "\", \"error\": \"" + this->error +
               "\", \"sequence\": " + std::to_string(this->sequence) +
               ", \"timestamp\": " + std::to_string(this->timestamp) + "}";
strat.cpp
@@ -105,14 +105,17 @@
    for (auto& i : m) {
        if (i->type == json::ADDED) {
            json::AddedMessage* j = (json::AddedMessage*) i;
            if (j->owner == "nseow") {
            if (j->owner == "jgrunbau") {
                book::OrderSideEnum s = j->side == book::Buy ? book::Sell : book::Buy;
                json::AddMessage a(json::ADD, j->product, j->price, s, j->resting);
                auto b = protocol::addOrder(a);
                if (b->type == json::ADDED) {
                if (b->type == json::ADDED && ((json::AddedMessage*) b)->resting > 0) {
                    json::DeleteMessage d(json::DELETE, j->product, ((json::AddedMessage*) b)->id);
                    delete protocol::deleteOrder(d);
                }
                if (b->type == json::ADDED) {
                    std::cout << "Hit " << j->owner << " for " << ((json::AddedMessage*) b)->filled << ", resting " << ((json::AddedMessage*) b)->resting << std::endl;
                }
                delete b;
            }
        }