Skip to content

NewYaroslav/binary-cpp-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

80 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

binary-cpp-api logo


ОписаниС

Данная header-only Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит класс для взаимодСйствия с Binary.com WebSocket API v3. https://developers.binary.com/api/.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° находится Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

Как ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ?

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ BinaryAPI Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ послС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ всСх зависимостСй Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» BinaryAPI.hpp. Π’Π°ΠΊΠΆΠ΅ для использования Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΡ… использованиС API, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ΠΌ Easy.hpp

  • BinaryAPI.hpp содСрТит класс для взаимодСйствия с Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ Binary
  • BinaryApiEasy.hpp содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, записи, чтСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ.
  • ZstdEasy.hpp позволяСт Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ zstd для сТатия ΠΈ дСкомпрСсии Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ.
  • CorrelationEasy.hpp содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для опрСдСлСния коррСляции
  • IndicatorsEasy.hpp содСрТит ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ тСхничСского Π°Π½Π°Π»ΠΈΠ·Π°
  • HistoricalDataEasy.hpp содСрТит класс для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ использования историчСских Π΄Π°Π½Π½Ρ‹Ρ…
  • NormalizationEasy.hpp содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
  • BinaryOptionsEasy.hpp содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ классы для провСдСния тСстов стратСгий (имитация Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»ΠΈ)
  • WavEasy.hpp позволяСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Π·Π²ΡƒΠΊ
  • FannEasy.hpp мСстами ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ FANN

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран Ρ†Π΅Π½Ρ‹ закрытия (послСдниС Ρ‚Ρ€ΠΈ ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Π΅ свСчи) с Ρ‚Ρ€Π΅Ρ… Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€ (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();
        }
}

example_1

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса BinaryAPI

  • ОбъявлСниС класса BinaryAPI
#include "BinaryAPI.hpp"

//...

BinaryAPI apiBinary; // ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ соСдинСниС с сСрвСром Π±Π΅Π· Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
/* Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ с Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ выглядит Ρ‚Π°ΠΊ:
 * std::string token = "ваш Ρ‚ΠΎΠΊΠ΅Π½", app_id = "id вашСго Π½ΠΎΠΌΠ΅Ρ€Π° прилоТСния"
 * BinaryAPI apiBinary(token, app_id);
 */
  • Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ошибок
apiBinary.set_use_log(true);

ВсС сообщСния с ошибками Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ„Π°ΠΉΠ», имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΎ макросом BINARY_API_LOG_FILE_NAME Π² Ρ„Π°ΠΉΠ»Π΅ BinaryAPI.hpp
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сообщСний ΠΈΠ· Ρ„Π°ΠΉΠ»Π°:


//------------------------------------------------------------------------------
start of error message (04.12.2018 18:30:02):
{"echo_req":{"end":1544054400,"granularity":60,"start":1544080800,"style":"candles","ticks_history":"frxEURUSD"},"error":{"code":"InvalidStartEnd","message":"Start time 1544080800 must be before end time 1544054400"},"msg_type":"ticks_history"}
end of error message
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
start of error message (04.12.2018 18:30:22):
BinaryApi: Error, error message: ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π±Ρ‹Π»Π° ΠΏΡ€Π΅Ρ€Π²Π°Π½Π° ΠΈΠ·-Π·Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ»ΠΈ ΠΏΠΎ запросу прилоТСния.
end of error message
//------------------------------------------------------------------------------

  • Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚ ΠΈΠ»ΠΈ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€

std::vector<std::string> symbols; // массив Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€
symbols.push_back("frxEURUSD");
symbols.push_back("frxEURGBP");
symbols.push_back("frxEURJPY");
// ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ список Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€ 
apiBinary.init_symbols(symbols);
  • ΠŸΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚
if(!apiBinary.is_proposal_stream()) { // Ссли ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½
	const double amount = 10.0; // Ρ€Π°Π·ΠΌΠ΅Ρ€ ставки,ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ расчитываСтся ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π²Ρ‹ΠΏΠ»Π°Ρ‚
    const int duration = 3; // Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°
    const int duration_uint = BinaryAPI::MINUTES; // Π΅Π΄ΠΈΠ½ΠΈΡ†Π° измСрСния Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°, ΠΌΠΈΠ½ΡƒΡ‚Ρ‹
    const std::string currency = "USD"; // Π²Π°Π»ΡŽΡ‚Π° счСта (ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ)
	// ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚
	int err_data = apiBinary.init_stream_proposal(amount, duration, duration_uint, currency);
	if(err_data != apiBinary.OK) { // Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹ΠΏΠ»Π°Ρ‚
		// Ρ‡Ρ‚ΠΎ Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Π΅Π»Π°Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π·
	} 
}

// ...

// Допустим Ρƒ нас Π±Π΅Π· ошибок ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅

/* массив ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚ 
 * Π½ΠΎΠΌΠ΅Ρ€ элСмСнта соотвСтствуСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² массивС Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€
 * Π”Π° это Ρ‚ΠΎΡ‚ самый массив Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ init_symbols
 * НапримСр, Ссли  frxEURUSD ΠΈΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ Π²Ρ‹ΠΏΠ»Π°Ρ‚ Π·Π° ставку BUY находится
 * Ρ‚ΡƒΡ‚ buy_data[0];
 */
std::vector<double> buy_data; 
std::vector<double> sell_data;
if(apiBinary.get_stream_proposal(buy_data, sell_data) == apiBinary.OK) { // Ссли ΠΌΡ‹ Π±Π΅Π· ошибок ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠ»Π°Ρ‚
	// НапримСр, Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ послСдниС значСния ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚
	for(size_t i = 0; i < symbols.size(); ++i) {
			std::cout << symbols[i] << " " << buy_data[i] << "/" << sell_data[i] << std::endl;
	}
}

// Π’Π΄Ρ€ΡƒΠ³ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠ»Π°Ρ‚, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠΆΠ½ΠΎ (ΠΈΠ»ΠΈ Π½ΡƒΠΆΠ½ΠΎ) ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ
apiBinary.stop_stream_proposal();
  • ΠŸΠΎΡ‚ΠΎΠΊ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ
const int LAST_TIME = 60; // количСство ΠΌΠΈΠ½ΡƒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π² массивы с ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ
// ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² массивах ΡƒΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ "историчСскиС" Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° послСдниС 60 ΠΌΠΈΠ½ΡƒΡ‚
apiBinary.init_stream_quotations(LAST_TIME);

// ПьСм Ρ‡Π°ΠΉ, ΠΈ Π²Π΄Ρ€ΡƒΠ³

std::vector<std::vector<double>> close_data; // Ρ†Π΅Π½Ρ‹ закрытия
std::vector<std::vector<unsigned long long>> time_data; // врСмя открытия свСчСй
// ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ
if(apiBinary.get_stream_quotations(close_data, time_data) == apiBinary.OK) {
	/* Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массивы ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ Π±Π΅Π· ошибок, Π΄Π΅Π»Π°Π΅ΠΌ с Π½ΠΈΠΌΠΈ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΠΌ
	 * Π½ΠΎΠΌΠ΅Ρ€ элСмСнта соотвСтствуСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² массивС Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€
	 * Π² close_data[0] хранится массив ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ для Π²Π°Π»ΡŽΡ‚Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ frxEURUSD (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅!)
	 * соотвСтствСнно, close_data[0].back() Π²Π°ΠΌ Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡƒΡŽ Ρ†Π΅Π½Ρƒ закрытия (ΠΈΠ»ΠΈ просто Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ‚ΠΈΠΊ, Ссли свСча Π΅Ρ‰Π΅ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Π°)
	 * /
}

// Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π»ΠΈΠ»ΠΈ Ρ‡Π°ΠΉ, пошли эти ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ...

apiBinary.stop_stream_quotations(); // останавливаСм ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ

/* Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ здСсь Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ is_quotations_stream() 
 * с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, подписаны ΠΌΡ‹ сСйчас Π½Π° ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚
 */
  • ΠŸΠΎΡ‚ΠΎΠΊ баланса Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°
/* подпишСмся Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ баланса Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°
 * ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚ измСняСт Π½Π°ΠΌ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, сливаСт наши Π±Π°Π±ΠΊΠΈ
 * ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ
 */
if(apiBinary.init_stream_balance() != apiBinary.OK) {
	// Ρ‚ΡƒΡ‚ ΠΌΡ‹ окаТСмся, Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΠΎΡˆΠΈΠ±ΠΎΡ‡ΠΊΠ°
}

double balance; // Ρ‚ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ наш баланс
if(apiBinary.get_balance(balance) != apiBinary.OK) {
	/* Ρ‚ΡƒΡ‚ ΠΌΡ‹ окаТСмся, Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΠΎΡˆΠΈΠ±ΠΎΡ‡ΠΊΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΡ‹ Π½Π΅ смогли 
	 * Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ
	 */
}

// Π° Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ get_currency, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π²Π°Π»ΡŽΡ‚Ρƒ счСта

// ΠΎΡ‚ΠΏΠΈΡˆΠ΅ΠΌΡΡ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° баланса
apiBinary.stop_stream_balance();
  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ врСмя сСрвСра
unsigned long long server_time;
// пытаСмся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ врСмя сСрвСра
if(apiBinary.get_servertime(server_time) != apiBinary.OK) { 
	// Ρ‚ΡƒΡ‚ ΠΌΡ‹ окаТСмся, Ссли Ρƒ нас Π½Π΅ удалося ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ врСмя сСрвСра
	
	// ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‡Ρ‚ΠΎ Π»ΠΈ Ρ‚ΠΎΠ³Π΄Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ запрос Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ сСрвСра
	apiBinary.request_servertime();
}

//...
  • ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΡ€Π΄Π΅Ρ€Π° BUY ΠΈΠ»ΠΈ SELL
double amount = 1000.0; // поставим 1000 USD, яТ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅ ΠΆΠ°Π΄Π½Ρ‹ΠΉ!
int duration = 3; // ΠΎΠΏΡ†ΠΈΠΎΠ½ Π½Π° ΠΏΡ€ΠΈ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹!
// ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ ΠΎΡ€Π΄Π΅Ρ€ BUY!
apiBinary.send_order("frxEURUSD", amount, apiBinary.BUY, duration, apiBinary.MINUTES);

// ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ ΠΎΡ€Π΄Π΅Ρ€ SELL! Π£ нас ΠΆΠ΅ Π²ΠΈΠ»ΠΊΠ°!
apiBinary.send_order("frxEURUSD", amount, apiBinary.SELL, duration, apiBinary.MINUTES);

// дальшС ΠΆΠ΄Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ»ΡŒΠ΅Ρ‚ΡΡ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚
  • Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° историчСских Π΄Π°Π½Π½Ρ‹Ρ…
// Π½Π°ΠΉΠ΄Π΅ΠΌ timestamp Π΄Π°Ρ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Ρ… Π±Π°Ρ€ΠΎΠ²/свСчСй
unsigned long long t1 = xtime::get_unix_timestamp(5,11,2018,0,0,0);
unsigned long long t2 = t1 + xtime::SEC_DAY * 30; // Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° 30 Π΄Π½Π΅ΠΉ!

std::vector<double> candles_close;
std::vector<unsigned long long> candles_times;
// Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· Π»ΠΈΠΌΠΈΡ‚ΠΎΠ²
int err = apiBinary.get_candles_without_limits("frxEURUSD", candles_close, candles_times, t1 + 30, t2);

/* Ссли err == 0, Π·Π½Π°Ρ‡ΠΈΡ‚ всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ
 * Π²Π΅ΠΊΡ‚ΠΎΡ€ candles_close содСрТит Ρ†Π΅Π½Ρ‹ закрытия свСчСй
 * Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ candles_times - врСмя открытия свСчСй
 * ясно понятно?!
 */

std::vector<double> prices;
std::vector<unsigned long long> times;
// Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Ρ‚ΠΈΠΊΠΎΠ²
apiBinary.get_ticks_without_limits("frxEURUSD", prices, times, t1, t2)

// ...
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ состояния ошибок
// Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ошибок API
enum ErrorType {
	OK = 0, 					// процСсс Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ ΡƒΠ΄Π°Ρ‡Π½ΠΎ
	NO_AUTHORIZATION = -1, 		// Π½Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
	NO_COMMAND = -2, 			// Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
	UNKNOWN_ERROR = -3, 		// нСизвСстная ошибка
	NO_INIT = -4, 				// Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
	NO_OPEN_CONNECTION = -5, 	// Π½Π΅Ρ‚ соСдинСния с сСрвСром
	INVALID_PARAMETER = -6, 	// ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ
	DATA_NOT_AVAILABLE = -7, 	// Π½Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π΄ΠΎ Тэ...
};

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

  • Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° послСдниС ΠΏΠ°Ρ€Ρƒ Π΄Π½Π΅ΠΉ
#include "BinaryApiEasy.hpp"

//...

BinaryAPI iBinaryApi; // класс для взаимодСйствия с BinaryApi

std::string symbol = "frxEURUSD";
unsigned long long timestamp = 12345678910; // дСнь, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ начнСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°
std::vector<std::vector<double>> prices; // Ρ†Π΅Π½Ρ‹ (Π·Π° N Π΄Π½Π΅ΠΉ)
std::vector<std::vector<unsigned long long>> times; // Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ (Π·Π° N Π΄Π½Π΅ΠΉ)
int num_days = 5; // количСство послСдних Π΄Π½Π΅ΠΉ
bool is_skip_day_off = true; // ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π½ΠΈ
int type = BinaryApiEasy::QUOTES_BARS;

/* Данная функция Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π° дСнь Π·Π° послСдниС N Π΄Π½Π΅ΠΉ
 * Π’Π°ΠΆΠ½ΠΎ: ΠŸΡ€ΠΈ этом Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ дСнь Π½Π΅ учавствуСт Π² Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅! Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚,
 * Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ загруТая Π΄Π°Π½Π½Ρ‹Π΅ 5 числа Π² 12 часов дня ΠΏΠΎ GMT Π·Π° послСдниС 3 дня,
 * данная функция Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ 4, 3, 2 Π΄Π½ΠΈ мСсяца. ΠšΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΈΠ· 5-Π³ΠΎ числа ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚!
 */
int err = BinaryApiEasy::download_last_few_days(iBinaryApi, symbol, timestamp, prices, times, num_days, is_skip_day_off, type);
if(err == BinaryApiEasy:OK) {
	// Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ ΡƒΠ΄Π°Ρ‡Π½ΠΎ
}
  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Π΄Π°Ρ‚Ρ‹
unsigned long long timestamp = 12345678910;
/* Π’Ρ‹Π±Ρ€Π°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π“ΠžΠ” ΠœΠ•Π‘Π―Π¦ ДЕНЬ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ Π±Ρ‹Π»ΠΈ
 * Π² Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½ΠΎΠΌ порядкС
 * file_name Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ!
 */
std::string file_name = BinaryApiEasy::get_file_name_from_date(timestamp);
  • Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ
std::vector<double> prices;
std::vector<unsigned long long> times;
// Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ prices ΠΈ times ...

std::string file_name = "2015_6_6.hex";
// Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ
int err = BinaryApiEasy::write_binary_quotes_file(file_name, prices, times);
  • Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ
std::vector<double> prices;
std::vector<unsigned long long> times;

std::string file_name = "2015_6_6.hex";
// Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ
int err = BinaryApiEasy::read_binary_quotes_file(file_name, prices, times);

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ сТатия Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΡŒ zstd

  • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ словаря для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° компрСсии ΠΈ дСкомпрСсии
#include "ZstdEasy.hpp"

//...

std::string path = "..//..//train"; // ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ обучСния
std::string dictionary_file = "quotes_ticks.zstd"; // имя Ρ„Π°ΠΉΠ»Π° словаря
size_t dictionary_size = 100 * 1024; // Ρ€Π°Π·ΠΌΠ΅Ρ€ словаря

/* ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сэмплов (Ρ„Π°Ρ†Π»ΠΎΠ²) для обучСния Π΄ΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 1000 ΡˆΡ‚ ΠΈ Π±ΠΎΠ»Π΅Π΅
 * Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ~ 100 ΠšΠ‘.
 * РСкомСндуСтся ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ нСсколько тысяч ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ², хотя это ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ
 * РСкомСндуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ‰ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ всСх Π²Ρ‹Π±ΠΎΡ€ΠΎΠΊ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² x100 Ρ€Π°Π· большС Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° словаря
 */

// Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅
int err = ZstdEasy::train_zstd(path, dictionary_file, 1024 * 1024);
std::cout << "stop train " << err << std::endl;
  • ΠšΠΎΠΌΠΏΡ€Π΅ΡΡΠΈΡ ΠΈΠ»ΠΈ дСкомпрСссия Ρ„Π°ΠΉΠ»ΠΎΠ²
std::string file_name = "..//..//train//frxEURGBP//2015_12_14.hex"; // имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ ΡΠΆΠ°Ρ‚ΡŒ
std::string compress_file_name = "compress_2015_12_14.hex"; // имя сТатого Ρ„Π°ΠΉΠ»Π°
std::string dictionary_file = "quotes_ticks.zstd"; // имя Ρ„Π°ΠΉΠ»Π° словаря

// сТимаСм Ρ„Π°ΠΉΠ» file_name, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» compress_file_name
ZstdEasy::compress_file(file_name, compress_file_name, dictionary_file);

std::string decompress_file_name = "decompress_2015_12_14.hex"; // имя Ρ„Π°ΠΉΠ»Π° послС дСкомпрСсии

// дСкомпрСссия Ρ„Π°ΠΉΠ»Π° compress_file_name, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ„Π°ΠΉΠ» decompress_file_name
ZstdEasy::decompress_file(compress_file_name, decompress_file_name, dictionary_file);
  • Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись сТатых Ρ„Π°ΠΉΠ»ΠΎΠ²
std::vector<double> prices;
std::vector<unsigned long long> times;

// Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ prices ΠΈ times Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
//...

std::string dictionary_file = "quotes_ticks.zstd"; // имя Ρ„Π°ΠΉΠ»Π° словаря

// запишСм Π΄Π°Π½Π½Ρ‹Π΅ Π² сТатый Ρ„Π°ΠΉΠ»
ZstdEasy::write_binary_quotes_compressed_file("compress.zstd", dictionary_file, prices, times);
// ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌ сТатый Ρ„Π°ΠΉΠ»
ZstdEasy::read_binary_quotes_compress_file("compress.zstd", dictionary_file, prices, times);
std::cout << prices.back() << " " << times.back() << std::endl;

/* Π•Ρ‰Π΅ Π΅ΡΡ‚ΡŒ read_compressed_file ΠΈ write_compressed_file, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅
 */
  • Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС доступныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ

/** \brief Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всС доступынС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ
 * \param api Класс BinaryAPI
 * \param symbol Π²Π°Π»ΡŽΡ‚Π½Π°Ρ ΠΏΠ°Ρ€Π°
 * \param path дирСктория, ΠΊΡƒΠ΄Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅
 * \param dictionary_file Ρ„Π°ΠΉΠ» словаря для дСкомпрСсии
 * \param timestamp врСмСнная ΠΌΠ΅Ρ‚ΠΊΠ°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ начинаСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…
 * \param is_skip_day_off Ρ„Π»Π°Π³ пропуска Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π½Π΅ΠΉ, true Ссли Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅
 * \param type Ρ‚ΠΈΠΏ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, QUOTES_BARS - ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Π΅ Π±Π°Ρ€Ρ‹, QUOTES_TICKS - Ρ‚ΠΈΠΊΠΈ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ 1 сСкунда)
 * \param user_function - Ρ„ΡƒΠ½ΠΊΡ‚ΠΎΡ€ (ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ NULL, Ссли Π½Π΅ Π½ΡƒΠΆΠ΅Π½)
 */
int download_and_save_all_data_with_compression(
   BinaryAPI &api,
   std::string symbol,
   std::string path,
   std::string dictionary_file,
   unsigned long long timestamp,
   bool is_skip_day_off = true,
   int type = QUOTES_BARS,
   void (*user_function)(std::string,
	std::vector<double> &,
	std::vector<unsigned long long> &,
	unsigned long long) = NULL);
			

Π“ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ОБ Windows

Π’ Π°Ρ€Ρ…ΠΈΠ²Π΅ bin.7z содСрТится нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° binary_recorder.exe записываСт ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠ»Π°Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ сСкунды, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ историчСскиС Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΊΠΎΠ² ΠΈ ΠΌΠΈΠ½ΡƒΡ‚Π½Ρ‹Ρ… Π±Π°Ρ€ΠΎΠ² Π·Π° Ρ†Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ дСнь.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° binary_proposal_recorder.exe, которая записываСт ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠ»Π°Ρ‚ с Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… ΠΏΠ°Ρ€ (WLDAUD...WLDUSD, AUDCAD, AUDCHF, AUDJPY, AUDNZD, AUDUSD, EURAUD, EURCAD, EURCHF, EURGBP, EURJPY, EURNZD, EURUSD, GBPAUD, GBPCAD, GBPCHF, GBPJPY) ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΠΏΠ»Π°Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ для сдСлок PUT ΠΈ CALL с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ экспирации 3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹. Для расчСта ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ставка 10 USD. Π”Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» соотвСтствуСт ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π΄Π°Ρ‚Π΅ ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° формируСтся ΠΈΠ· Π΄Π°Ρ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±Ρ‹Π» записан (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ proposal_29_11_2018.hex). ВрСмя для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сэмпла ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² Π²ΠΈΠ΄Π΅ 8 Π±Π°ΠΉΡ‚ timestamp Π² ΠΊΠΎΠ½Ρ†Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ врСмя сСрвСра Binary (GMT). МаксимальноС число сэмплов Π² Ρ„Π°ΠΉΠ»Π΅ соотвСтствуСт количСству сСкунд ΠΎΠ΄Π½ΠΎΠ³ΠΎ дня.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° simply_upload_history.exe Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ историчСскиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΎΠΊ.

Настройки ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ хранятся Π² JSON Ρ„Π°ΠΉΠ»Π΅ settings.json. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ содСрТимого Ρ„Π°ΠΉΠ»Π°:

{
	"disk": "D", // диск, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°
	"path": "_repoz//binary_historical_data", // ΠΏΠ°ΠΏΠΊΠ° (Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ git), Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅
	"amount": 10.0, // ставка для расчСта ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚
	"duration": 3, // врСмя экспирации ΠΎΠΏΡ†ΠΈΠΎΠ½Π°
	"duration_uint": 2, // Π΅Π΄ΠΈΠ½ΠΈΡ†Π° измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (2 - ΠΌΠΈΠ½ΡƒΡ‚Ρ‹)
	"currency": "USD", // Π²Π°Π»ΡŽΡ‚Π° счСта 
	"folder": "proposal_data", // ΠΏΠ°ΠΏΠΊΠ°, Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΠΏΠ»Π°Ρ‚
	"git": 1 // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ git для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
}

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π°ΠΌ Π²Ρ‹ΠΏΠ»Π°Ρ‚ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ https://github.com/NewYaroslav/binary_historical_data.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° martingale_does_not_work.exe позволяСт ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠ°Π½ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ€Ρ‚ΠΈΠ½Π³Π΅ΠΉΠ» Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

martingale_does_not_work_2

Зависимости

binary-cpp-api зависит ΠΎΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ / ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹, ΠΊΠ°ΠΊ субмодули, Π² ΠΏΠ°ΠΏΠΊΡƒ lib.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ссылки

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ схСмы JSON ΠΌΠΎΠΆΠ½ΠΎ здСсь - https://github.com/binary-com/websockets/tree/gh-pages/config/v3

Π‘Π°ΠΉΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° - https://www.binary.com/