Skip to content

Hailios/databento-cpp

 
 

Repository files navigation

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, date, 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_DATE, DATABENTO_ENABLE_EXTERNAL_HTTPLIB, or DATABENTO_ENABLE_EXTERNAL_JSON respectively.

Ubuntu

Run the following commands to install the dependencies on Ubuntu:

$ sudo apt update
$ sudo apt install libssl-dev libzstd-dev

macOS

On macOS, you can install the dependencies with Homebrew by running the following:

$ brew install openssl@3 zstd

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 (const auto* trade = rec.GetIf<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 two CME futures:

#include <databento/dbn.hpp>
#include <databento/historical.hpp>
#include <databento/symbol_map.hpp>
#include <iostream>

using namespace databento;

int main() {
  auto client = HistoricalBuilder{}.SetKey("$YOUR_API_KEY").Build();
  TsSymbolMap symbol_map;
  auto decode_symbols = [&symbol_map](const Metadata& metadata) {
    symbol_map = metadata.CreateSymbolMap();
  };
  auto print_trades = [&symbol_map](const Record& record) {
    const auto& trade_msg = record.Get<TradeMsg>();
    std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": "
              << 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, {}, decode_symbols,
      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 example 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

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 94.4%
  • CMake 5.4%
  • Shell 0.2%