Данная header-only библиотека содержит класс для взаимодействия с Binary.com WebSocket API v3. https://developers.binary.com/api/.
На данный момент библиотека продолжает разрабатываться.
Чтобы начать использовать BinaryApi в своей программе, необходимо после подключения всех зависимостей в проект просто добавить заголовочный файл BinaryAPI.hpp.
Пример программы, которая выводит на экран цены закрытия (последние три минутные свечи) с трех валютных пар (EURUSD, EURGBP, EURJPY), а также время сервера:
#include "BinaryAPI.hpp"
int main() {
BinaryApi iBinaryApi; // класс для взаимодействия с BinaryApi
std::vector<std::string> symbols; // массив валютных пар
symbols.push_back("frxEURUSD");
symbols.push_back("frxEURGBP");
symbols.push_back("frxEURJPY");
// инициализируем список валютных пар
std::cout << "init_symbols " << std::endl;
iBinaryApi.init_symbols(symbols);
// инициализируем поток котировок, глубина начальной истории 60 минут
std::cout << "init_stream_quotations " << iBinaryApi.init_stream_quotations(60) << std::endl;
// инициализируем поток процентов выплат
std::cout << "init_stream_proposal " << iBinaryApi.init_stream_proposal(10, 3, iBinaryApi.MINUTES, "USD") << std::endl;
// последнее полученное с сервера время
unsigned long long servertime_last = 0;
// начинается основной цикл программы
std::cout << "..." << std::endl;
while(true) {
// для всех валютных пар
std::vector<std::vector<double>> close_data; // цены закрытия
std::vector<std::vector<unsigned long long>> time_data; // время открытия свечей
std::vector<double> buy_data; // проценты выплат (ставка вверх)
std::vector<double> sell_data; // проценты выплат (ставка вниз)
unsigned long long servertime = 0; // время сервера
if(iBinaryApi.get_servertime(servertime) != iBinaryApi.OK) {
// если время сервера не удалось получить
iBinaryApi.request_servertime(); // отправляем запрос на получение времени
std::this_thread::sleep_for(std::chrono::milliseconds(100)); // задержка
continue;
} else {
// время было получено, проверим, прошла ли секунда
if(servertime > servertime_last) {
// секунда прошла, сохраним последнее полученное от сервера время
servertime_last = servertime;
} else {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
// секунда еще не прошла, вернемся
continue;
}
}
// проверим, удалось ли получить данные по котировкам и процентам выплат
if(iBinaryApi.get_stream_quotations(close_data, time_data) == iBinaryApi.OK &&
iBinaryApi.get_stream_proposal(buy_data, sell_data) == iBinaryApi.OK) {
// выводим последние значения котировок валютных пар
for(size_t i = 0; i < symbols.size(); ++i) {
std::cout << symbols[i] << " " << buy_data[i] << "/" << sell_data[i] << std::endl;
for(size_t j = time_data[i].size() - 3; j < time_data[i].size(); ++j) {
std::cout << close_data[i][j] << " " << time_data[i][j] << std::endl;
}
std::cout << "size: " << time_data[i].size() << std::endl;
}
}
// время сервера в GMT\UTC
std::cout << servertime << std::endl;
std::cout << std::endl;
std::this_thread::yield();
}
}-
binary-cpp-api зависит от следующих внешних библиотек / пакетов
-
Simple-WebSocket-Server - https://gitlab.com/eidheim/Simple-WebSocket-Server
-
Boost.Asio или автономный Asio - http://think-async.com/Asio
-
Библиотека OpenSSL - http://slproweb.com/products/Win32OpenSSL.html
-
Библиотека JSON - https://github.com/nlohmann/json
-
gcc или mingw с поддержкой C++11, например - https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.3.0/threads-posix/seh/x86_64-7.3.0-release-posix-seh-rt_v5-rev0.7z/download
Все необходимые библиотеки добавлены, как субмодули, в папку lib.
Просмотреть схемы JSON можно здесь - https://github.com/binary-com/websockets/tree/gh-pages/config/v3
Сайт брокера - https://www.binary.com/
elektro yar electroyar2@gmail.com


