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++17 and the minimum CMake version is 3.24.
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.24) project(databento_example) include(FetchContent) FetchContent_Declare( databento GIT_REPOSITORY https://github.com/databento/databento-cpp GIT_TAG main ) 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:
- OpenSSL (minimum version 3.0)
- Libcrypto
- Zstandard (zstd)
- nlohmann_json (header-only)
- cpp-httplib (header-only)
- date (header-only)
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_USE_EXTERNAL_DATE, DATABENTO_USE_EXTERNAL_HTTPLIB, or DATABENTO_USE_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 <thread> namespace db = databento; int main() { db::PitSymbolMap symbol_mappings; auto client = db::LiveThreaded::Builder() .SetKeyFromEnv() .SetDataset(db::Dataset::GlbxMdp3) .BuildThreaded(); auto handler = [&symbol_mappings](const db::Record& rec) { symbol_mappings.OnRecord(rec); if (const auto* trade = rec.GetIf<db::TradeMsg>()) { std::cout << "Received trade for " << symbol_mappings[trade->hd.instrument_id] << ':' << *trade << '\n'; } return db::KeepGoing::Continue; }; client.Subscribe({"ES.FUT"}, db::Schema::Trades, db::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> namespace db = databento; int main() { auto client = db::Historical::Builder().SetKey("$YOUR_API_KEY").Build(); auto store = client.TimeseriesGetRange( "GLBX.MDP3", {"2022-06-10T14:30", "2022-06-10T14:40"}, {"ESM2", "NQZ2"}, db::Schema::Trades); auto symbol_map = store.GetMetadata().CreateSymbolMap(); while (const auto* record = store.NextRecord()) { const auto& trade_msg = record->Get<db::TradeMsg>(); std::cout << "Received trade for " << symbol_map.At(trade_msg) << ": " << trade_msg << '\n'; } }
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.