Binance API implemented in C++ for both synchronous and asynchronous way.
BTC: 3BJKvx6LyKB2J5KgRBqst415KKmwQE5eQX
This implementation has been developed as a consequence of the lack of suitable alternatives as part of my multiuser trading platform project.
- Test connectivity ->
api::ping() - Check server time ->
api::time() - Exchange information ->
api::exchange_info() - Account information ->
api::account_info() - Order book ->
api::depth() - Recent trades list ->
api::trades() - Aggregate trades list ->
api::agg_trades() - 24hr ticker price change statistics ->
api::_24hrs_ticker() - Symbol price ticker ->
api::price() - New order ->
api::new_order() - Query order ->
api::order_info() - Test new order ->
api::new_test_order() - Cancel order ->
api::cancel_order() - Current open orders ->
api::open_orders() - All orders ->
api::all_orders() - Account trade list ->
api::my_trades() - Start user data stream ->
api::start_user_data_stream() - Keepalive user data stream ->
api::ping_user_data_stream() - Close user data stream ->
api::close_user_data_stream()
- Partial Book Depth Streams ->
websockets::part_depth() - Diff. Depth Stream ->
websockets::diff_depth() - Kline/Candlestick Streams ->
websockets::klines() - Trade Streams ->
websockets::trade() - Aggregate Trade Streams ->
websockets::agg_trade() - Individual Symbol Mini Ticker Stream ->
websockets::mini_ticker() - All Market Mini Tickers Stream ->
websockets::mini_tickers() - Individual Symbol Ticker Streams ->
websockets::market() - All Market Tickers Stream ->
websockets::markets() - Individual Symbol Book Ticker Streams ->
websockets::book() - All Book Tickers Stream ->
websockets::books() - User Data Streams ->
websockets::userdata()
The project is written using C++14 and boost (at least version 1.70). boost.beast is used to interact with the network.
#include "binapi/api.hpp"
#include <boost/asio/io_context.hpp>
#include <iostream>
int main() {
const std::string pk = "...";
const std::string sk = "...";
boost::asio::io_context ioctx;
binapi::rest::api api(
ioctx
,"api.binance.com"
,"443"
,pk
,sk
,10000 // recvWindow
);
auto account = api.account_info();
if ( !account ) {
std::cerr << "account info error: " << account.errmsg << std::endl;
return EXIT_FAILURE;
}
std::cout << "account info: " << account.v << std::endl << std::endl;
return EXIT_SUCCESS;
}
#include "binapi/api.hpp"
#include <boost/asio/io_context.hpp>
#include <iostream>
int main() {
const std::string pk = "...";
const std::string sk = "...";
boost::asio::io_context ioctx;
binapi::rest::api api(
ioctx
,"api.binance.com"
,"443"
,pk
,sk
,10000 // recvWindow
);
api.account_info([](const char *fl, int ec, std::string errmsg, binapi::rest::account_info_t res) {
if ( ec ) {
std::cerr << "account info error: fl=" << fl << ", ec=" << ec << ", emsg=" << errmsg << std::endl;
return false;
}
std::cout << "account info: " << res << std::endl;
return true;
});
ioctx.run();
return EXIT_SUCCESS;
}#include <binapi/api.hpp>
#include <binapi/websocket.hpp>
#include <boost/asio/io_context.hpp>
#include <iostream>
int main() {
boost::asio::io_context ioctx;
binapi::ws::websockets ws{
ioctx
,"stream.binance.com"
,"9443"
};
ws.part_depth("BTCUSDT",
[](const char *fl, int ec, std::string emsg, auto depths) {
if ( ec ) {
std::cerr << "subscribe depth error: fl=" << fl << ", ec=" << ec << ", emsg=" << emsg << std::endl;
return false;
}
std::cout << "depths: " << depths << std::endl;
return true;
}
);
ws.trade("BTCUSDT",
[](const char *fl, int ec, std::string emsg, auto trades) {
if ( ec ) {
std::cerr << "subscribe trades error: fl=" << fl << ", ec=" << ec << ", emsg=" << emsg << std::endl;
return false;
}
std::cout << "trades: " << trades << std::endl;
return true;
}
);
ioctx.run();
return EXIT_SUCCESS;
}- filters
- report generators