felipecrv / databento-cpp

The official C++ client library for Databento

Home Page:https://databento.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

databento-cpp

test license Slack

The official C++ client library for Databento. The client supports both streaming real-time and historical market data through similar interfaces.

Usage

The minimum C++ standard is C++11 and the minimum CMake version is 3.14.

Integration

The easiest way to use our library is by embedding it with CMake FetchContent. Your CMakeLists.txt should look something like the following:

# CMakeLists.txt
cmake_minimum_required(VERSION 3.14)

project(databento_example)
include(FetchContent)

FetchContent_Declare(
  databento
  GIT_REPOSITORY https://github.com/databento/databento-cpp
  GIT_TAG HEAD
)
FetchContent_MakeAvailable(databento)

add_executable(example main.cpp)
target_link_libraries(example PRIVATE databento::databento)

Alternatively, you can clone the source code from GitHub here.

To install the library to /usr, build and install it with the following:

git clone https://github.com/databento/databento-cpp
cd databento-cpp
cmake -S . -B build \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_INSTALL_PREFIX='/usr'
cmake --build build --target databento --parallel
cmake --install build

In your project's CMakeLists.txt, add the following:

# CMakeLists.txt
find_package(databento REQUIRED)
target_link_libraries(example PRIVATE databento::databento)

Dependencies

You'll need to ensure the following dependencies are installed:

By default, cpp-httplib and nlohmann_json are downloaded by CMake as part of the build process. If you would like to use a local version of these libraries, enable the CMake flag DATABENTO_ENABLE_EXTERNAL_HTTPLIB or DATABENTO_ENABLE_EXTERNAL_JSON.

Live

Real-time and intraday replay is provided through the Live clients. Here is a simple program that fetches 10 seconds of trades for all ES mini futures:

#include <chrono>
#include <databento/live.hpp>
#include <databento/symbol_map.hpp>
#include <iostream>
#include <string>
#include <thread>

using namespace databento;

int main() {
  PitSymbolMap symbol_mappings;

  auto client =
      LiveBuilder{}.SetKeyFromEnv().SetDataset("GLBX.MDP3").BuildThreaded();

  auto handler = [&symbol_mappings](const Record& rec) {
    symbol_mappings.OnRecord(rec);
    if (rec.Holds<TradeMsg>()) {
      auto trade = rec.Get<TradeMsg>();
      std::cout << "Received trade for "
                << symbol_mappings[trade.hd.instrument_id] << ':' << trade
                << '\n';
    }
    return KeepGoing::Continue;
  };

  client.Subscribe({"ES.FUT"}, Schema::Trades, SType::Parent);
  client.Start(handler);
  std::this_thread::sleep_for(std::chrono::seconds{10});
  return 0;
}

To run this program, set the DATABENTO_API_KEY environment variable with an actual API key.

Historical

Here is a simple program that fetches 10 minutes worth of historical trades for the entire CME Globex market:

#include <databento/constants.hpp>
#include <databento/historical.hpp>
#include <iostream>

using namespace databento;

int main() {
  auto client = HistoricalBuilder{}.SetKeyFromEnv().Build();
  auto print_trades = [](const Record& record) {
    const auto& trade_msg = record.Get<TradeMsg>();
    std::cout << trade_msg << '\n';
    return KeepGoing::Continue;
  };
  client.TimeseriesGetRange("GLBX.MDP3",
                            {"2022-06-10T14:30", "2022-06-10T14:40"},
                            kAllSymbols, Schema::Trades, SType::RawSymbol,
                            SType::InstrumentId, {}, {}, print_trades);
}

To run this program, set the DATABENTO_API_KEY environment variable with an actual API key.

Additional example standalone executables are provided in the examples directory. These examples can be compiled by enabling the cmake option DATABENTO_ENABLE_EXAMPLES with -DDATABENTO_ENABLE_EXAMPLES=1 during the configure step.

Documentation

You can find more detailed examples and the full API documentation on the Databento doc site.

License

Distributed under the Apache 2.0 License.

About

The official C++ client library for Databento

https://databento.com

License:Apache License 2.0


Languages

Language:C++ 94.1%Language:CMake 5.7%Language:Shell 0.3%