diff --git a/README.md b/README.md index b4587603..bc94c5bb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,6 @@ +# Small Breaking Changes Introduced In v5.32.x For OKEX/OKX Users +* We've renamed OKEX to OKX everywhere in our code. When specifying the exchange, please use "okx" instead of the old "okex". When providing credentials via environment variables, please use OKX_API_KEY, OKX_API_SECRET, and OKX_API_PASSPHRASE, instead of the old OKEX_API_KEY, OKEX_API_SECRET, and OKEX_API_PASSPHRASE. When defining macros, please use CCAPI_ENABLE_EXCHANGE_OKX instead of the old CCAPI_ENABLE_EXCHANGE_OKEX. Thank you. + **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)* @@ -55,8 +58,8 @@ * Code closely follows Bloomberg's API: https://www.bloomberg.com/professional/support/api-library/. * It is ultra fast thanks to very careful optimizations: move semantics, regex optimization, locality of reference, lock contention minimization, etc. * Supported exchanges: - * Market data: coinbase, gemini, kraken, kraken-futures, bitstamp, bitfinex, bitmex, binance-us, binance, binance-usds-futures, binance-coin-futures, huobi, huobi-usdt-swap, huobi-coin-swap, okex, erisx, kucoin, kucoin-futures, ftx, ftx-us, deribit, gateio, gateio-perpetual-futures, cryptocom, ascendex. - * Execution Management: coinbase, gemini, kraken, kraken-futures, bitstamp, bitfinex, bitmex, binance-us, binance, binance-usds-futures, binance-coin-futures, huobi, huobi-usdt-swap, huobi-coin-swap, okex, erisx, kucoin, ftx, ftx-us, deribit, gateio, gateio-perpetual-futures, cryptocom, ascendex. + * Market data: coinbase, gemini, kraken, kraken-futures, bitstamp, bitfinex, bitmex, binance-us, binance, binance-usds-futures, binance-coin-futures, huobi, huobi-usdt-swap, huobi-coin-swap, okx, erisx, kucoin, kucoin-futures, ftx, ftx-us, deribit, gateio, gateio-perpetual-futures, cryptocom, ascendex. + * Execution Management: coinbase, gemini, kraken, kraken-futures, bitstamp, bitfinex, bitmex, binance-us, binance, binance-usds-futures, binance-coin-futures, huobi, huobi-usdt-swap, huobi-coin-swap, okx, erisx, kucoin, ftx, ftx-us, deribit, gateio, gateio-perpetual-futures, cryptocom, ascendex. * FIX: coinbase, gemini, ftx, ftx-us. * A spot market making application is provided as an end-to-end solution for liquidity providers. * A single order execution application is provided as an end-to-end solution for executing large orders. @@ -86,7 +89,7 @@ * Link libraries: * OpenSSL: libssl. * OpenSSL: libcrypto. - * If you need market data for huobi/huobi-usdt-swap/huobi-coin-swap/okex or execution management for huobi-usdt-swap/huobi-coin-swap, also link ZLIB. + * If you need market data for huobi/huobi-usdt-swap/huobi-coin-swap or execution management for huobi-usdt-swap/huobi-coin-swap, also link ZLIB. * On Windows, also link ws2_32. * Compiler flags: * `-pthread` for GCC and MinGW. @@ -105,7 +108,7 @@ * Require Python 3, SWIG, and CMake. * SWIG: On macOS, `brew install SWIG`. On Linux, `sudo apt-get install -y swig`. On Windows, http://www.swig.org/Doc4.0/Windows.html#Windows. * CMake: https://cmake.org/download/. -* Copy file [`binding/user_specified_cmake_include.cmake.example`](binding/user_specified_cmake_include.cmake.example) to any location and rename to `user_specified_cmake_include.cmake`. Take note of its full path ``. Uncomment the lines corresponding to the desired service enablement compile definitions such as `CCAPI_ENABLE_SERVICE_MARKET_DATA`, `CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT`, `CCAPI_ENABLE_SERVICE_FIX`, etc. and exchange enablement macros such as `CCAPI_ENABLE_EXCHANGE_COINBASE`, etc. If you need market data for huobi/huobi-usdt-swap/huobi-coin-swap/okex or execution management for huobi-usdt-swap/huobi-coin-swap, also uncomment the lines corresponding to finding and linking ZLIB. +* Copy file [`binding/user_specified_cmake_include.cmake.example`](binding/user_specified_cmake_include.cmake.example) to any location and rename to `user_specified_cmake_include.cmake`. Take note of its full path ``. Uncomment the lines corresponding to the desired service enablement compile definitions such as `CCAPI_ENABLE_SERVICE_MARKET_DATA`, `CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT`, `CCAPI_ENABLE_SERVICE_FIX`, etc. and exchange enablement macros such as `CCAPI_ENABLE_EXCHANGE_COINBASE`, etc. If you need market data for huobi/huobi-usdt-swap/huobi-coin-swap or execution management for huobi-usdt-swap/huobi-coin-swap, also uncomment the lines corresponding to finding and linking ZLIB. * Run the following commands. ``` mkdir binding/build @@ -701,10 +704,10 @@ request.appendParam({ #### Send request by Websocket API ``` -Subscription subscription("okex", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); +Subscription subscription("okx", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); session.subscribe(subscription); ... -Request request(Request::Operation::CREATE_ORDER, "okex", "BTC-USDT", "same correlation id for subscription and request"); +Request request(Request::Operation::CREATE_ORDER, "okx", "BTC-USDT", "same correlation id for subscription and request"); request.appendParam({ {"SIDE", "BUY"}, {"LIMIT_PRICE", "20000"}, @@ -923,7 +926,7 @@ session.serviceByServiceNameExchangeMap[CCAPI_EXECUTION_MANAGEMENT][CCAPI_EXCHAN * The code uses a simplified version of Avellaneda & Stoikov’s inventory strategy: https://www.math.nyu.edu/~avellane/HighFrequencyTrading.pdf. See the [parameter configuration file `app/src/spot_market_making/config.env.example`](app/src/spot_market_making/config.env.example) for more details. And read more at https://medium.com/open-crypto-market-data-initiative/simplified-avellaneda-stoikov-market-making-608b9d437403. * Require CMake. * CMake: https://cmake.org/download/. -* Copy file [`app/user_specified_cmake_include.cmake.example`](app/user_specified_cmake_include.cmake.example) to any location and rename to `user_specified_cmake_include.cmake`. Take note of its full path ``. Uncomment the lines corresponding to the desired exchange enablement macros such as `CCAPI_ENABLE_EXCHANGE_COINBASE`, etc. If you need okex, also uncomment the lines corresponding to finding and linking ZLIB. +* Copy file [`app/user_specified_cmake_include.cmake.example`](app/user_specified_cmake_include.cmake.example) to any location and rename to `user_specified_cmake_include.cmake`. Take note of its full path ``. Uncomment the lines corresponding to the desired exchange enablement macros such as `CCAPI_ENABLE_EXCHANGE_COINBASE`, etc. * Run the following commands. ``` mkdir app/build @@ -941,7 +944,7 @@ cmake --build . --target spot_market_making * The supported strategies are listed in [`app/src/single_order_execution/config.env.example`](app/src/single_order_execution/config.env.example). * Require CMake. * CMake: https://cmake.org/download/. -* Copy file [`app/user_specified_cmake_include.cmake.example`](app/user_specified_cmake_include.cmake.example) to any location and rename to `user_specified_cmake_include.cmake`. Take note of its full path ``. Uncomment the lines corresponding to the desired exchange enablement macros such as `CCAPI_ENABLE_EXCHANGE_COINBASE`, etc. If you need okex, also uncomment the lines corresponding to finding and linking ZLIB. +* Copy file [`app/user_specified_cmake_include.cmake.example`](app/user_specified_cmake_include.cmake.example) to any location and rename to `user_specified_cmake_include.cmake`. Take note of its full path ``. Uncomment the lines corresponding to the desired exchange enablement macros such as `CCAPI_ENABLE_EXCHANGE_COINBASE`, etc. * Run the following commands. ``` mkdir app/build diff --git a/app/credential.env.example b/app/credential.env.example index a7521952..037276d9 100644 --- a/app/credential.env.example +++ b/app/credential.env.example @@ -17,10 +17,10 @@ BINANCE_API_SECRET='' BINANCE_US_API_KEY='' BINANCE_US_API_SECRET='' -OKEX_API_KEY='' -OKEX_API_SECRET='' -OKEX_API_PASSPHRASE='' -OKEX_API_X_SIMULATED_TRADING='0' +OKX_API_KEY='' +OKX_API_SECRET='' +OKX_API_PASSPHRASE='' +OKX_API_X_SIMULATED_TRADING='0' KUCOIN_API_KEY='' KUCOIN_API_SECRET='' diff --git a/app/src/spot_market_making/main.cpp b/app/src/spot_market_making/main.cpp index 238becad..4f2948d6 100644 --- a/app/src/spot_market_making/main.cpp +++ b/app/src/spot_market_making/main.cpp @@ -210,16 +210,16 @@ int main(int argc, char** argv) { {exchangeUpper + "_API_SECRET", UtilSystem::getEnvAsString(exchangeUpper + "_API_SECRET")}, }; } - std::set useCancelOrderToCancelOpenOrdersExchangeSet{"gemini", "kraken", "bitfinex", "okex"}; + std::set useCancelOrderToCancelOpenOrdersExchangeSet{"gemini", "kraken", "bitfinex", "okx"}; if (useCancelOrderToCancelOpenOrdersExchangeSet.find(eventHandler.exchange) != useCancelOrderToCancelOpenOrdersExchangeSet.end()) { eventHandler.useCancelOrderToCancelOpenOrders = true; } - std::set useWebsocketToExecuteOrderExchangeSet{"bitfinex", "okex"}; + std::set useWebsocketToExecuteOrderExchangeSet{"bitfinex", "okx"}; if (useWebsocketToExecuteOrderExchangeSet.find(eventHandler.exchange) != useWebsocketToExecuteOrderExchangeSet.end()) { eventHandler.useWebsocketToExecuteOrder = true; } Request request(Request::Operation::GET_INSTRUMENT, eventHandler.exchange, eventHandler.instrumentRest, "GET_INSTRUMENT"); - if (exchange == "okex") { + if (exchange == "okx") { request.appendParam({ {"instType", "SPOT"}, }); diff --git a/app/user_specified_cmake_include.cmake.example b/app/user_specified_cmake_include.cmake.example index c7ccab04..a2c2eb20 100644 --- a/app/user_specified_cmake_include.cmake.example +++ b/app/user_specified_cmake_include.cmake.example @@ -18,7 +18,7 @@ endif() # add_compile_definitions(CCAPI_ENABLE_EXCHANGE_BINANCE_US) # add_compile_definitions(CCAPI_ENABLE_EXCHANGE_BINANCE) # -# add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKEX) +# add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKX) # # add_compile_definitions(CCAPI_ENABLE_EXCHANGE_KUCOIN) # diff --git a/binding/swig_interface.i b/binding/swig_interface.i index f05461a0..6b5057b9 100644 --- a/binding/swig_interface.i +++ b/binding/swig_interface.i @@ -35,6 +35,7 @@ } } %template(map_string_string) std::map; +%template(map_int_string) std::map; %template(pair_int_string) std::pair; %template(pair_long_long_long_long) std::pair; %template(vector_pair_int_string) std::vector >; diff --git a/binding/user_specified_cmake_include.cmake.example b/binding/user_specified_cmake_include.cmake.example index 44a2bf14..20b45650 100644 --- a/binding/user_specified_cmake_include.cmake.example +++ b/binding/user_specified_cmake_include.cmake.example @@ -29,7 +29,7 @@ include_guard(DIRECTORY) # add_compile_definitions(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) # add_compile_definitions(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP) # -# add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKEX) +# add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKX) # # add_compile_definitions(CCAPI_ENABLE_EXCHANGE_ERISX) # diff --git a/example/src/execution_management_advanced_subscription/CMakeLists.txt b/example/src/execution_management_advanced_subscription/CMakeLists.txt index 04de5379..22fa70ee 100644 --- a/example/src/execution_management_advanced_subscription/CMakeLists.txt +++ b/example/src/execution_management_advanced_subscription/CMakeLists.txt @@ -1,5 +1,5 @@ set(NAME execution_management_advanced_subscription) project(${NAME}) add_compile_definitions(CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT) -add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKEX) +add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKX) add_executable(${NAME} main.cpp) diff --git a/example/src/execution_management_advanced_subscription/main.cpp b/example/src/execution_management_advanced_subscription/main.cpp index ab9a8bc7..344b9bba 100644 --- a/example/src/execution_management_advanced_subscription/main.cpp +++ b/example/src/execution_management_advanced_subscription/main.cpp @@ -8,7 +8,7 @@ class MyEventHandler : public EventHandler { std::cout << "Received an event of type SUBSCRIPTION_STATUS:\n" + event.toStringPretty(2, 2) << std::endl; auto message = event.getMessageList().at(0); if (message.getType() == Message::Type::SUBSCRIPTION_STARTED) { - Request request(Request::Operation::CREATE_ORDER, "okex", "BTC-USDT", "same correlation id for subscription and request"); + Request request(Request::Operation::CREATE_ORDER, "okx", "BTC-USDT", "same correlation id for subscription and request"); request.appendParam({ {"SIDE", "BUY"}, {"LIMIT_PRICE", "20000"}, @@ -33,23 +33,23 @@ using ::ccapi::SessionOptions; using ::ccapi::Subscription; using ::ccapi::UtilSystem; int main(int argc, char** argv) { - if (UtilSystem::getEnvAsString("OKEX_API_KEY").empty()) { - std::cerr << "Please set environment variable OKEX_API_KEY" << std::endl; + if (UtilSystem::getEnvAsString("OKX_API_KEY").empty()) { + std::cerr << "Please set environment variable OKX_API_KEY" << std::endl; return EXIT_FAILURE; } - if (UtilSystem::getEnvAsString("OKEX_API_SECRET").empty()) { - std::cerr << "Please set environment variable OKEX_API_SECRET" << std::endl; + if (UtilSystem::getEnvAsString("OKX_API_SECRET").empty()) { + std::cerr << "Please set environment variable OKX_API_SECRET" << std::endl; return EXIT_FAILURE; } - if (UtilSystem::getEnvAsString("OKEX_API_PASSPHRASE").empty()) { - std::cerr << "Please set environment variable OKEX_API_PASSPHRASE" << std::endl; + if (UtilSystem::getEnvAsString("OKX_API_PASSPHRASE").empty()) { + std::cerr << "Please set environment variable OKX_API_PASSPHRASE" << std::endl; return EXIT_FAILURE; } SessionOptions sessionOptions; SessionConfigs sessionConfigs; MyEventHandler eventHandler; Session session(sessionOptions, sessionConfigs, &eventHandler); - Subscription subscription("okex", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); + Subscription subscription("okx", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); session.subscribe(subscription); std::this_thread::sleep_for(std::chrono::seconds(10)); session.stop(); diff --git a/include/ccapi_cpp/ccapi_macro.h b/include/ccapi_cpp/ccapi_macro.h index 76a5f850..93bd345c 100644 --- a/include/ccapi_cpp/ccapi_macro.h +++ b/include/ccapi_cpp/ccapi_macro.h @@ -87,8 +87,8 @@ #ifndef CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP #define CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP "huobi-coin-swap" #endif -#ifndef CCAPI_EXCHANGE_NAME_OKEX -#define CCAPI_EXCHANGE_NAME_OKEX "okex" +#ifndef CCAPI_EXCHANGE_NAME_OKX +#define CCAPI_EXCHANGE_NAME_OKX "okx" #endif #ifndef CCAPI_EXCHANGE_NAME_ERISX #define CCAPI_EXCHANGE_NAME_ERISX "erisx" @@ -242,11 +242,12 @@ #define CCAPI_WEBSOCKET_HUOBI_CHANNEL_MARKET_BBO_REGEX "market\\.(.+)\\.bbo" #define CCAPI_WEBSOCKET_HUOBI_CHANNEL_MARKET_DEPTH "market.$symbol.depth.step0" #define CCAPI_WEBSOCKET_HUOBI_CHANNEL_MARKET_DEPTH_REGEX "market\\.(.+)\\.depth\\.step0" -#define CCAPI_WEBSOCKET_OKEX_CHANNEL_TRADE "trades" -#define CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH50_L2_TBT "books50-l2-tbt" -#define CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400_L2_TBT "books-l2-tbt" -#define CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH5 "books5" -#define CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400 "books" +#define CCAPI_WEBSOCKET_OKX_CHANNEL_TRADE "trades" +#define CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH50_L2_TBT "books50-l2-tbt" +#define CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400_L2_TBT "books-l2-tbt" +#define CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH5 "books5" +#define CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400 "books" +#define CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH1_L2_TBT "bbo-tbt" #define CCAPI_WEBSOCKET_ERISX_CHANNEL_MARKET_DATA_SUBSCRIBE "MarketDataSubscribe" #define CCAPI_WEBSOCKET_ERISX_CHANNEL_TOP_OF_BOOK_MARKET_DATA_SUBSCRIBE "TopOfBookMarketDataSubscribe" #define CCAPI_WEBSOCKET_KUCOIN_CHANNEL_MARKET_MATCH "/market/match" @@ -594,8 +595,8 @@ #ifndef CCAPI_HUOBI_COIN_SWAP_GET_RECENT_TRADES_PATH #define CCAPI_HUOBI_COIN_SWAP_GET_RECENT_TRADES_PATH "/swap-ex/market/history/trade" #endif -#ifndef CCAPI_OKEX_URL_REST_BASE -#define CCAPI_OKEX_URL_REST_BASE "https://www.okex.com" +#ifndef CCAPI_OKX_URL_REST_BASE +#define CCAPI_OKX_URL_REST_BASE "https://www.okx.com" #endif #ifndef CCAPI_ERISX_URL_REST_BASE #define CCAPI_ERISX_URL_REST_BASE "https://trade-api.erisx.com" @@ -699,14 +700,14 @@ #ifndef CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC #define CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC "matchOrders" #endif -#ifndef CCAPI_OKEX_URL_WS_BASE -#define CCAPI_OKEX_URL_WS_BASE "wss://ws.okex.com:8443" +#ifndef CCAPI_OKX_URL_WS_BASE +#define CCAPI_OKX_URL_WS_BASE "wss://ws.okx.com:8443" #endif -#ifndef CCAPI_OKEX_PUBLIC_WS_PATH -#define CCAPI_OKEX_PUBLIC_WS_PATH "/ws/v5/public" +#ifndef CCAPI_OKX_PUBLIC_WS_PATH +#define CCAPI_OKX_PUBLIC_WS_PATH "/ws/v5/public" #endif -#ifndef CCAPI_OKEX_PRIVATE_WS_PATH -#define CCAPI_OKEX_PRIVATE_WS_PATH "/ws/v5/private" +#ifndef CCAPI_OKX_PRIVATE_WS_PATH +#define CCAPI_OKX_PRIVATE_WS_PATH "/ws/v5/private" #endif #ifndef CCAPI_ERISX_URL_WS_BASE #define CCAPI_ERISX_URL_WS_BASE "wss://publicmd-api.erisx.com" @@ -858,17 +859,17 @@ #ifndef CCAPI_HUOBI_COIN_SWAP_API_SECRET #define CCAPI_HUOBI_COIN_SWAP_API_SECRET "HUOBI_COIN_SWAP_API_SECRET" #endif -#ifndef CCAPI_OKEX_API_KEY -#define CCAPI_OKEX_API_KEY "OKEX_API_KEY" +#ifndef CCAPI_OKX_API_KEY +#define CCAPI_OKX_API_KEY "OKX_API_KEY" #endif -#ifndef CCAPI_OKEX_API_SECRET -#define CCAPI_OKEX_API_SECRET "OKEX_API_SECRET" +#ifndef CCAPI_OKX_API_SECRET +#define CCAPI_OKX_API_SECRET "OKX_API_SECRET" #endif -#ifndef CCAPI_OKEX_API_PASSPHRASE -#define CCAPI_OKEX_API_PASSPHRASE "OKEX_API_PASSPHRASE" +#ifndef CCAPI_OKX_API_PASSPHRASE +#define CCAPI_OKX_API_PASSPHRASE "OKX_API_PASSPHRASE" #endif -#ifndef CCAPI_OKEX_API_X_SIMULATED_TRADING -#define CCAPI_OKEX_API_X_SIMULATED_TRADING "OKEX_API_X_SIMULATED_TRADING" +#ifndef CCAPI_OKX_API_X_SIMULATED_TRADING +#define CCAPI_OKX_API_X_SIMULATED_TRADING "OKX_API_X_SIMULATED_TRADING" #endif #ifndef CCAPI_ERISX_API_KEY #define CCAPI_ERISX_API_KEY "ERISX_API_KEY" @@ -998,4 +999,8 @@ #ifndef CCAPI_FIX_PROTOCOL_VERSION_DERIBIT #define CCAPI_FIX_PROTOCOL_VERSION_DERIBIT "FIX.4.4" #endif + +#ifndef CCAPI_OKX_API_BROKER_CODE +#define CCAPI_OKX_API_BROKER_CODE "9cbc6a17a1fcBCDE" +#endif #endif // INCLUDE_CCAPI_CPP_CCAPI_MACRO_H_ diff --git a/include/ccapi_cpp/ccapi_session.h b/include/ccapi_cpp/ccapi_session.h index e4bbad76..89d31545 100644 --- a/include/ccapi_cpp/ccapi_session.h +++ b/include/ccapi_cpp/ccapi_session.h @@ -46,8 +46,8 @@ #ifdef CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP #include "ccapi_cpp/service/ccapi_market_data_service_huobi_coin_swap.h" #endif -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX -#include "ccapi_cpp/service/ccapi_market_data_service_okex.h" +#ifdef CCAPI_ENABLE_EXCHANGE_OKX +#include "ccapi_cpp/service/ccapi_market_data_service_okx.h" #endif #ifdef CCAPI_ENABLE_EXCHANGE_ERISX #include "ccapi_cpp/service/ccapi_market_data_service_erisx.h" @@ -129,8 +129,8 @@ #ifdef CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP #include "ccapi_cpp/service/ccapi_execution_management_service_huobi_coin_swap.h" #endif -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX -#include "ccapi_cpp/service/ccapi_execution_management_service_okex.h" +#ifdef CCAPI_ENABLE_EXCHANGE_OKX +#include "ccapi_cpp/service/ccapi_execution_management_service_okx.h" #endif #ifdef CCAPI_ENABLE_EXCHANGE_ERISX #include "ccapi_cpp/service/ccapi_execution_management_service_erisx.h" @@ -310,9 +310,9 @@ class Session { this->serviceByServiceNameExchangeMap[CCAPI_MARKET_DATA][CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP] = std::make_shared(this->internalEventHandler, sessionOptions, sessionConfigs, this->serviceContextPtr); #endif -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX - this->serviceByServiceNameExchangeMap[CCAPI_MARKET_DATA][CCAPI_EXCHANGE_NAME_OKEX] = - std::make_shared(this->internalEventHandler, sessionOptions, sessionConfigs, this->serviceContextPtr); +#ifdef CCAPI_ENABLE_EXCHANGE_OKX + this->serviceByServiceNameExchangeMap[CCAPI_MARKET_DATA][CCAPI_EXCHANGE_NAME_OKX] = + std::make_shared(this->internalEventHandler, sessionOptions, sessionConfigs, this->serviceContextPtr); #endif #ifdef CCAPI_ENABLE_EXCHANGE_ERISX this->serviceByServiceNameExchangeMap[CCAPI_MARKET_DATA][CCAPI_EXCHANGE_NAME_ERISX] = @@ -417,9 +417,9 @@ class Session { this->serviceByServiceNameExchangeMap[CCAPI_EXECUTION_MANAGEMENT][CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP] = std::make_shared(this->internalEventHandler, sessionOptions, sessionConfigs, this->serviceContextPtr); #endif -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX - this->serviceByServiceNameExchangeMap[CCAPI_EXECUTION_MANAGEMENT][CCAPI_EXCHANGE_NAME_OKEX] = - std::make_shared(this->internalEventHandler, sessionOptions, sessionConfigs, this->serviceContextPtr); +#ifdef CCAPI_ENABLE_EXCHANGE_OKX + this->serviceByServiceNameExchangeMap[CCAPI_EXECUTION_MANAGEMENT][CCAPI_EXCHANGE_NAME_OKX] = + std::make_shared(this->internalEventHandler, sessionOptions, sessionConfigs, this->serviceContextPtr); #endif #ifdef CCAPI_ENABLE_EXCHANGE_ERISX this->serviceByServiceNameExchangeMap[CCAPI_EXECUTION_MANAGEMENT][CCAPI_EXCHANGE_NAME_ERISX] = diff --git a/include/ccapi_cpp/ccapi_session_configs.h b/include/ccapi_cpp/ccapi_session_configs.h index 97f116e8..0ddfc44d 100644 --- a/include/ccapi_cpp/ccapi_session_configs.h +++ b/include/ccapi_cpp/ccapi_session_configs.h @@ -91,9 +91,9 @@ class SessionConfigs CCAPI_FINAL { {CCAPI_TRADE, CCAPI_WEBSOCKET_HUOBI_CHANNEL_TRADE_DETAIL}, {CCAPI_MARKET_DEPTH, CCAPI_WEBSOCKET_HUOBI_CHANNEL_MARKET_DEPTH}, }; - std::map fieldWebsocketChannelMapOkex = { - {CCAPI_TRADE, CCAPI_WEBSOCKET_OKEX_CHANNEL_TRADE}, - {CCAPI_MARKET_DEPTH, CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400}, + std::map fieldWebsocketChannelMapOkx = { + {CCAPI_TRADE, CCAPI_WEBSOCKET_OKX_CHANNEL_TRADE}, + {CCAPI_MARKET_DEPTH, CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400}, }; std::map fieldWebsocketChannelMapErisx = { {CCAPI_TRADE, CCAPI_WEBSOCKET_ERISX_CHANNEL_MARKET_DATA_SUBSCRIBE}, @@ -181,8 +181,8 @@ class SessionConfigs CCAPI_FINAL { for (auto const& fieldWebsocketChannel : fieldWebsocketChannelMapHuobiCoinSwap) { this->exchangeFieldMap[CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP].push_back(fieldWebsocketChannel.first); } - for (auto const& fieldWebsocketChannel : fieldWebsocketChannelMapOkex) { - this->exchangeFieldMap[CCAPI_EXCHANGE_NAME_OKEX].push_back(fieldWebsocketChannel.first); + for (auto const& fieldWebsocketChannel : fieldWebsocketChannelMapOkx) { + this->exchangeFieldMap[CCAPI_EXCHANGE_NAME_OKX].push_back(fieldWebsocketChannel.first); } for (auto const& fieldWebsocketChannel : fieldWebsocketChannelMapErisx) { this->exchangeFieldMap[CCAPI_EXCHANGE_NAME_ERISX].push_back(fieldWebsocketChannel.first); @@ -236,7 +236,7 @@ class SessionConfigs CCAPI_FINAL { {CCAPI_EXCHANGE_NAME_HUOBI, fieldWebsocketChannelMapHuobi}, {CCAPI_EXCHANGE_NAME_HUOBI_USDT_SWAP, fieldWebsocketChannelMapHuobiUsdtSwap}, {CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP, fieldWebsocketChannelMapHuobiCoinSwap}, - {CCAPI_EXCHANGE_NAME_OKEX, fieldWebsocketChannelMapOkex}, + {CCAPI_EXCHANGE_NAME_OKX, fieldWebsocketChannelMapOkx}, {CCAPI_EXCHANGE_NAME_ERISX, fieldWebsocketChannelMapErisx}, {CCAPI_EXCHANGE_NAME_KUCOIN, fieldWebsocketChannelMapKucoin}, {CCAPI_EXCHANGE_NAME_KUCOIN_FUTURES, fieldWebsocketChannelMapKucoinFutures}, @@ -265,7 +265,7 @@ class SessionConfigs CCAPI_FINAL { {CCAPI_EXCHANGE_NAME_HUOBI, CCAPI_HUOBI_URL_WS_BASE}, {CCAPI_EXCHANGE_NAME_HUOBI_USDT_SWAP, CCAPI_HUOBI_USDT_SWAP_URL_WS_BASE}, {CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP, CCAPI_HUOBI_COIN_SWAP_URL_WS_BASE}, - {CCAPI_EXCHANGE_NAME_OKEX, CCAPI_OKEX_URL_WS_BASE}, + {CCAPI_EXCHANGE_NAME_OKX, CCAPI_OKX_URL_WS_BASE}, {CCAPI_EXCHANGE_NAME_ERISX, CCAPI_ERISX_URL_WS_BASE}, // Kucoin has dynamic websocket url. Here it is only a placeholder for subscription grouping purposes. {CCAPI_EXCHANGE_NAME_KUCOIN, "CCAPI_EXCHANGE_NAME_KUCOIN_URL_WEBSOCKET_BASE"}, @@ -299,7 +299,7 @@ class SessionConfigs CCAPI_FINAL { {CCAPI_EXCHANGE_NAME_HUOBI, CCAPI_HUOBI_URL_REST_BASE}, {CCAPI_EXCHANGE_NAME_HUOBI_USDT_SWAP, CCAPI_HUOBI_USDT_SWAP_URL_REST_BASE}, {CCAPI_EXCHANGE_NAME_HUOBI_COIN_SWAP, CCAPI_HUOBI_COIN_SWAP_URL_REST_BASE}, - {CCAPI_EXCHANGE_NAME_OKEX, CCAPI_OKEX_URL_REST_BASE}, + {CCAPI_EXCHANGE_NAME_OKX, CCAPI_OKX_URL_REST_BASE}, {CCAPI_EXCHANGE_NAME_ERISX, CCAPI_ERISX_URL_REST_BASE}, {CCAPI_EXCHANGE_NAME_KUCOIN, CCAPI_KUCOIN_URL_REST_BASE}, {CCAPI_EXCHANGE_NAME_KUCOIN_FUTURES, CCAPI_KUCOIN_FUTURES_URL_REST_BASE}, diff --git a/include/ccapi_cpp/service/ccapi_execution_management_service_gateio_base.h b/include/ccapi_cpp/service/ccapi_execution_management_service_gateio_base.h index 4a96acc6..fd9d4fa0 100644 --- a/include/ccapi_cpp/service/ccapi_execution_management_service_gateio_base.h +++ b/include/ccapi_cpp/service/ccapi_execution_management_service_gateio_base.h @@ -14,6 +14,12 @@ class ExecutionManagementServiceGateioBase : public ExecutionManagementService { protected: #endif + void pingOnApplicationLevel(wspp::connection_hdl hdl, ErrorCode& ec) override { + auto now = UtilTime::now(); + this->send(hdl, + "{\"time\":" + std::to_string(UtilTime::getUnixTimestamp(now)) + ",\"channel\":\"" + (this->isDerivatives ? "futures" : "spot") + ".ping\"}", + wspp::frame::opcode::text, ec); + } void signReqeustForRestGenericPrivateRequest(http::request& req, const Request& request, std::string& methodString, std::string& headerString, std::string& path, std::string& queryString, std::string& body, const TimePoint& now, const std::map& credential) override { @@ -257,6 +263,8 @@ class ExecutionManagementServiceGateioBase : public ExecutionManagementService { Element element; element.insert(CCAPI_EM_ASSET, x["currency"].GetString()); element.insert(CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x["available"].GetString()); + float total = std::stof(x["locked"].GetString()) + std::stof(x["available"].GetString()); + element.insert(CCAPI_EM_QUANTITY_TOTAL, std::to_string(total)); elementList.emplace_back(std::move(element)); } } break; diff --git a/include/ccapi_cpp/service/ccapi_execution_management_service_okex.h b/include/ccapi_cpp/service/ccapi_execution_management_service_okx.h similarity index 96% rename from include/ccapi_cpp/service/ccapi_execution_management_service_okex.h rename to include/ccapi_cpp/service/ccapi_execution_management_service_okx.h index 115ea564..51ad4416 100644 --- a/include/ccapi_cpp/service/ccapi_execution_management_service_okex.h +++ b/include/ccapi_cpp/service/ccapi_execution_management_service_okx.h @@ -1,16 +1,16 @@ -#ifndef INCLUDE_CCAPI_CPP_SERVICE_CCAPI_EXECUTION_MANAGEMENT_SERVICE_OKEX_H_ -#define INCLUDE_CCAPI_CPP_SERVICE_CCAPI_EXECUTION_MANAGEMENT_SERVICE_OKEX_H_ +#ifndef INCLUDE_CCAPI_CPP_SERVICE_CCAPI_EXECUTION_MANAGEMENT_SERVICE_OKX_H_ +#define INCLUDE_CCAPI_CPP_SERVICE_CCAPI_EXECUTION_MANAGEMENT_SERVICE_OKX_H_ #ifdef CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX +#ifdef CCAPI_ENABLE_EXCHANGE_OKX #include "ccapi_cpp/service/ccapi_execution_management_service.h" namespace ccapi { -class ExecutionManagementServiceOkex : public ExecutionManagementService { +class ExecutionManagementServiceOkx : public ExecutionManagementService { public: - ExecutionManagementServiceOkex(std::function*)> eventHandler, SessionOptions sessionOptions, SessionConfigs sessionConfigs, - ServiceContextPtr serviceContextPtr) + ExecutionManagementServiceOkx(std::function*)> eventHandler, SessionOptions sessionOptions, SessionConfigs sessionConfigs, + ServiceContextPtr serviceContextPtr) : ExecutionManagementService(eventHandler, sessionOptions, sessionConfigs, serviceContextPtr) { - this->exchangeName = CCAPI_EXCHANGE_NAME_OKEX; - this->baseUrl = sessionConfigs.getUrlWebsocketBase().at(this->exchangeName) + CCAPI_OKEX_PRIVATE_WS_PATH; + this->exchangeName = CCAPI_EXCHANGE_NAME_OKX; + this->baseUrl = sessionConfigs.getUrlWebsocketBase().at(this->exchangeName) + CCAPI_OKX_PRIVATE_WS_PATH; this->baseUrlRest = sessionConfigs.getUrlRestBase().at(this->exchangeName); this->setHostRestFromUrlRest(this->baseUrlRest); try { @@ -18,10 +18,10 @@ class ExecutionManagementServiceOkex : public ExecutionManagementService { } catch (const std::exception& e) { CCAPI_LOGGER_FATAL(std::string("e.what() = ") + e.what()); } - this->apiKeyName = CCAPI_OKEX_API_KEY; - this->apiSecretName = CCAPI_OKEX_API_SECRET; - this->apiPassphraseName = CCAPI_OKEX_API_PASSPHRASE; - this->apiXSimulatedTradingName = CCAPI_OKEX_API_X_SIMULATED_TRADING; + this->apiKeyName = CCAPI_OKX_API_KEY; + this->apiSecretName = CCAPI_OKX_API_SECRET; + this->apiPassphraseName = CCAPI_OKX_API_PASSPHRASE; + this->apiXSimulatedTradingName = CCAPI_OKX_API_X_SIMULATED_TRADING; this->setupCredential({this->apiKeyName, this->apiSecretName, this->apiPassphraseName, this->apiXSimulatedTradingName}); this->createOrderTarget = "/api/v5/trade/order"; this->cancelOrderTarget = "/api/v5/trade/cancel-order"; @@ -30,7 +30,7 @@ class ExecutionManagementServiceOkex : public ExecutionManagementService { this->getAccountBalancesTarget = "/api/v5/account/balance"; this->getAccountPositionsTarget = "/api/v5/account/positions"; } - virtual ~ExecutionManagementServiceOkex() {} + virtual ~ExecutionManagementServiceOkx() {} #ifndef CCAPI_EXPOSE_INTERNAL private: @@ -83,6 +83,9 @@ class ExecutionManagementServiceOkex : public ExecutionManagementService { } rjValue.AddMember(rj::Value(key.c_str(), allocator).Move(), rj::Value(value.c_str(), allocator).Move(), allocator); } + if (param.find("tag") == param.end()) { + rjValue.AddMember("tag", CCAPI_OKX_API_BROKER_CODE, allocator); + } } void appendParam(std::string& queryString, const std::map& param, const std::map standardizationMap = {}) { @@ -508,4 +511,4 @@ class ExecutionManagementServiceOkex : public ExecutionManagementService { } /* namespace ccapi */ #endif #endif -#endif // INCLUDE_CCAPI_CPP_SERVICE_CCAPI_EXECUTION_MANAGEMENT_SERVICE_OKEX_H_ +#endif // INCLUDE_CCAPI_CPP_SERVICE_CCAPI_EXECUTION_MANAGEMENT_SERVICE_OKX_H_ diff --git a/include/ccapi_cpp/service/ccapi_market_data_service_okex.h b/include/ccapi_cpp/service/ccapi_market_data_service_okx.h similarity index 89% rename from include/ccapi_cpp/service/ccapi_market_data_service_okex.h rename to include/ccapi_cpp/service/ccapi_market_data_service_okx.h index 91e15675..c7f86a80 100644 --- a/include/ccapi_cpp/service/ccapi_market_data_service_okex.h +++ b/include/ccapi_cpp/service/ccapi_market_data_service_okx.h @@ -1,21 +1,21 @@ -#ifndef INCLUDE_CCAPI_CPP_SERVICE_CCAPI_MARKET_DATA_SERVICE_OKEX_H_ -#define INCLUDE_CCAPI_CPP_SERVICE_CCAPI_MARKET_DATA_SERVICE_OKEX_H_ +#ifndef INCLUDE_CCAPI_CPP_SERVICE_CCAPI_MARKET_DATA_SERVICE_OKX_H_ +#define INCLUDE_CCAPI_CPP_SERVICE_CCAPI_MARKET_DATA_SERVICE_OKX_H_ #ifdef CCAPI_ENABLE_SERVICE_MARKET_DATA -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX +#ifdef CCAPI_ENABLE_EXCHANGE_OKX #include "ccapi_cpp/service/ccapi_market_data_service.h" namespace ccapi { -class MarketDataServiceOkex : public MarketDataService { +class MarketDataServiceOkx : public MarketDataService { public: - MarketDataServiceOkex(std::function*)> eventHandler, SessionOptions sessionOptions, SessionConfigs sessionConfigs, - std::shared_ptr serviceContextPtr) + MarketDataServiceOkx(std::function*)> eventHandler, SessionOptions sessionOptions, SessionConfigs sessionConfigs, + std::shared_ptr serviceContextPtr) : MarketDataService(eventHandler, sessionOptions, sessionConfigs, serviceContextPtr) { - this->exchangeName = CCAPI_EXCHANGE_NAME_OKEX; - this->baseUrl = sessionConfigs.getUrlWebsocketBase().at(this->exchangeName) + CCAPI_OKEX_PUBLIC_WS_PATH; - this->needDecompressWebsocketMessage = true; - ErrorCode ec = this->inflater.init(false); - if (ec) { - CCAPI_LOGGER_FATAL(ec.message()); - } + this->exchangeName = CCAPI_EXCHANGE_NAME_OKX; + this->baseUrl = sessionConfigs.getUrlWebsocketBase().at(this->exchangeName) + CCAPI_OKX_PUBLIC_WS_PATH; + // this->needDecompressWebsocketMessage = true; + // ErrorCode ec = this->inflater.init(false); + // if (ec) { + // CCAPI_LOGGER_FATAL(ec.message()); + // } this->baseUrlRest = sessionConfigs.getUrlRestBase().at(this->exchangeName); this->setHostRestFromUrlRest(this->baseUrlRest); try { @@ -27,7 +27,7 @@ class MarketDataServiceOkex : public MarketDataService { this->getInstrumentTarget = "/api/v5/public/instruments"; this->getInstrumentsTarget = "/api/v5/public/instruments"; } - virtual ~MarketDataServiceOkex() {} + virtual ~MarketDataServiceOkx() {} #ifndef CCAPI_EXPOSE_INTERNAL private: @@ -39,16 +39,18 @@ class MarketDataServiceOkex : public MarketDataService { auto conflateIntervalMilliSeconds = std::stoi(optionMap.at(CCAPI_CONFLATE_INTERVAL_MILLISECONDS)); if (field == CCAPI_MARKET_DEPTH) { if (conflateIntervalMilliSeconds < 100) { - if (marketDepthRequested <= 50) { - channelId = CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH50_L2_TBT; + if (marketDepthRequested == 1) { + channelId = CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH1_L2_TBT; + } else if (marketDepthRequested <= 50) { + channelId = CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH50_L2_TBT; } else { - channelId = CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400_L2_TBT; + channelId = CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400_L2_TBT; } } else { if (marketDepthRequested <= 5) { - channelId = CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH5; + channelId = CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH5; } else { - channelId = CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400; + channelId = CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400; } } } @@ -65,7 +67,7 @@ class MarketDataServiceOkex : public MarketDataService { auto channelId = subscriptionListByChannelIdSymbolId.first; for (const auto& subscriptionListBySymbolId : subscriptionListByChannelIdSymbolId.second) { std::string symbolId = subscriptionListBySymbolId.first; - if (channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH5) { + if (channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH1_L2_TBT || channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH5) { this->l2UpdateIsReplaceByConnectionIdChannelIdSymbolIdMap[wsConnection.id][channelId][symbolId] = true; } std::string exchangeSubscriptionId = UtilString::split(channelId, "?").at(0) + ":" + symbolId; @@ -160,9 +162,12 @@ class MarketDataServiceOkex : public MarketDataService { event.setMessageList(messageList); } } else { - if (channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH5 || channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400 || - channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH50_L2_TBT || channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH400_L2_TBT) { - std::string action = channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH5 ? "" : document["action"].GetString(); + if (channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH1_L2_TBT || channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH5 || + channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400 || channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH50_L2_TBT || + channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH400_L2_TBT) { + std::string action = channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH1_L2_TBT || channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH5 + ? "" + : document["action"].GetString(); for (const auto& datum : document["data"].GetArray()) { if (this->sessionOptions.enableCheckOrderBookChecksum) { auto it = datum.FindMember("checksum"); @@ -175,7 +180,7 @@ class MarketDataServiceOkex : public MarketDataService { marketDataMessage.tp = TimePoint(std::chrono::milliseconds(std::stoll(datum["ts"].GetString()))); marketDataMessage.exchangeSubscriptionId = exchangeSubscriptionId; marketDataMessage.type = MarketDataMessage::Type::MARKET_DATA_EVENTS_MARKET_DEPTH; - if (channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_PUBLIC_DEPTH5) { + if (channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH1_L2_TBT || channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_PUBLIC_DEPTH5) { if (this->processedInitialSnapshotByConnectionIdChannelIdSymbolIdMap[wsConnection.id][channelId][symbolId]) { marketDataMessage.recapType = MarketDataMessage::RecapType::NONE; } else { @@ -198,7 +203,7 @@ class MarketDataServiceOkex : public MarketDataService { } marketDataMessageList.emplace_back(std::move(marketDataMessage)); } - } else if (channelId == CCAPI_WEBSOCKET_OKEX_CHANNEL_TRADE) { + } else if (channelId == CCAPI_WEBSOCKET_OKX_CHANNEL_TRADE) { for (const auto& datum : document["data"].GetArray()) { MarketDataMessage marketDataMessage; marketDataMessage.type = MarketDataMessage::Type::MARKET_DATA_EVENTS_TRADE; @@ -330,4 +335,4 @@ class MarketDataServiceOkex : public MarketDataService { } /* namespace ccapi */ #endif #endif -#endif // INCLUDE_CCAPI_CPP_SERVICE_CCAPI_MARKET_DATA_SERVICE_OKEX_H_ +#endif // INCLUDE_CCAPI_CPP_SERVICE_CCAPI_MARKET_DATA_SERVICE_OKX_H_ diff --git a/include/ccapi_cpp/service/ccapi_service.h b/include/ccapi_cpp/service/ccapi_service.h index e53ccae1..362b7b3b 100644 --- a/include/ccapi_cpp/service/ccapi_service.h +++ b/include/ccapi_cpp/service/ccapi_service.h @@ -33,8 +33,8 @@ #include "websocketpp/common/connection_hdl.hpp" #include "websocketpp/config/asio_client.hpp" // clang-format on -#if defined(CCAPI_ENABLE_SERVICE_MARKET_DATA) && (defined(CCAPI_ENABLE_EXCHANGE_HUOBI) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || \ - defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_OKEX)) || \ +#if defined(CCAPI_ENABLE_SERVICE_MARKET_DATA) && \ + (defined(CCAPI_ENABLE_EXCHANGE_HUOBI) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP)) || \ defined(CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT) && (defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP)) #include #include @@ -964,8 +964,8 @@ class Service : public std::enable_shared_from_this { this->onError(Event::Type::SUBSCRIPTION_STATUS, Message::Type::GENERIC_ERROR, e); } } else if (opcode == websocketpp::frame::opcode::binary) { -#if defined(CCAPI_ENABLE_SERVICE_MARKET_DATA) && (defined(CCAPI_ENABLE_EXCHANGE_HUOBI) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || \ - defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_OKEX)) || \ +#if defined(CCAPI_ENABLE_SERVICE_MARKET_DATA) && \ + (defined(CCAPI_ENABLE_EXCHANGE_HUOBI) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP)) || \ defined(CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT) && (defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP)) if (this->needDecompressWebsocketMessage) { std::string decompressed; @@ -1132,8 +1132,8 @@ class Service : public std::enable_shared_from_this { // std::regex convertNumberToStringInJsonRegex{"(\\[|,|\":)\\s?(-?\\d+\\.?\\d*)"}; // std::string convertNumberToStringInJsonRewrite{"$1\"$2\""}; bool needDecompressWebsocketMessage{}; -#if defined(CCAPI_ENABLE_SERVICE_MARKET_DATA) && (defined(CCAPI_ENABLE_EXCHANGE_HUOBI) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || \ - defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_OKEX)) || \ +#if defined(CCAPI_ENABLE_SERVICE_MARKET_DATA) && \ + (defined(CCAPI_ENABLE_EXCHANGE_HUOBI) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP)) || \ defined(CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT) && (defined(CCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP) || defined(CCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP)) struct monostate {}; websocketpp::extensions_workaround::permessage_deflate::enabled inflater; diff --git a/test/test_build/CMakeLists.txt b/test/test_build/CMakeLists.txt index ceb223f5..0c21213c 100644 --- a/test/test_build/CMakeLists.txt +++ b/test/test_build/CMakeLists.txt @@ -1,8 +1,8 @@ set(NAME build_test) project(${NAME}) set(SERVICE_LIST "MARKET_DATA" "EXECUTION_MANAGEMENT" "FIX") -set(MARKET_DATA_EXCHANGE_LIST "COINBASE" "GEMINI" "KRAKEN" "KRAKEN_FUTURES" "BITSTAMP" "BITFINEX" "BITMEX" "BINANCE_US" "BINANCE" "BINANCE_USDS_FUTURES" "BINANCE_COIN_FUTURES" "HUOBI" "HUOBI_USDT_SWAP" "HUOBI_COIN_SWAP" "OKEX" "ERISX" "KUCOIN" "KUCOIN_FUTURES" "FTX" "FTX_US" "DERIBIT" "GATEIO" "GATEIO_PERPETUAL_FUTURES" "CRYPTOCOM" "ASCENDEX") -set(EXECUTION_MANAGEMENT_EXCHANGE_LIST "COINBASE" "GEMINI" "KRAKEN" "KRAKEN_FUTURES" "BITSTAMP" "BITFINEX" "BITMEX" "BINANCE_US" "BINANCE" "BINANCE_USDS_FUTURES" "BINANCE_COIN_FUTURES" "HUOBI" "HUOBI_USDT_SWAP" "HUOBI_COIN_SWAP" "OKEX" "ERISX" "KUCOIN" "FTX" "FTX_US" "DERIBIT" "GATEIO" "GATEIO_PERPETUAL_FUTURES" "CRYPTOCOM" "ASCENDEX") +set(MARKET_DATA_EXCHANGE_LIST "COINBASE" "GEMINI" "KRAKEN" "KRAKEN_FUTURES" "BITSTAMP" "BITFINEX" "BITMEX" "BINANCE_US" "BINANCE" "BINANCE_USDS_FUTURES" "BINANCE_COIN_FUTURES" "HUOBI" "HUOBI_USDT_SWAP" "HUOBI_COIN_SWAP" "OKX" "ERISX" "KUCOIN" "KUCOIN_FUTURES" "FTX" "FTX_US" "DERIBIT" "GATEIO" "GATEIO_PERPETUAL_FUTURES" "CRYPTOCOM" "ASCENDEX") +set(EXECUTION_MANAGEMENT_EXCHANGE_LIST "COINBASE" "GEMINI" "KRAKEN" "KRAKEN_FUTURES" "BITSTAMP" "BITFINEX" "BITMEX" "BINANCE_US" "BINANCE" "BINANCE_USDS_FUTURES" "BINANCE_COIN_FUTURES" "HUOBI" "HUOBI_USDT_SWAP" "HUOBI_COIN_SWAP" "OKX" "ERISX" "KUCOIN" "FTX" "FTX_US" "DERIBIT" "GATEIO" "GATEIO_PERPETUAL_FUTURES" "CRYPTOCOM" "ASCENDEX") set(FIX_EXCHANGE_LIST "COINBASE" "GEMINI" "FTX" "FTX_US") set(HFFIX_INCLUDE_DIR ${CCAPI_PROJECT_DIR}/dependency/hffix/include) foreach(SERVICE IN LISTS SERVICE_LIST) @@ -23,7 +23,7 @@ foreach(SERVICE IN LISTS SERVICE_LIST) message(STATUS "need hffix") target_include_directories("${CCAPI_CPP_TARGET_NAME}" PRIVATE ${HFFIX_INCLUDE_DIR}) endif() - if("${EXCHANGE}" MATCHES "^HUOBI" OR "${EXCHANGE}" MATCHES "^OKEX") + if("${EXCHANGE}" MATCHES "^HUOBI" OR "${EXCHANGE}" MATCHES "^OKX") message(STATUS "need zlib") find_package(ZLIB REQUIRED) target_link_libraries("${CCAPI_CPP_TARGET_NAME}" PRIVATE ZLIB::ZLIB) diff --git a/test/test_unit/CMakeLists.txt b/test/test_unit/CMakeLists.txt index 84d9347c..49b54cb5 100644 --- a/test/test_unit/CMakeLists.txt +++ b/test/test_unit/CMakeLists.txt @@ -54,5 +54,5 @@ add_subdirectory(src/execution_management/huobi_coin_swap) add_subdirectory(src/execution_management/kucoin) add_subdirectory(src/execution_management/kraken) add_subdirectory(src/execution_management/kraken_futures) -add_subdirectory(src/execution_management/okex) +add_subdirectory(src/execution_management/okx) add_subdirectory(src/app) diff --git a/test/test_unit/src/execution_management/okex/CMakeLists.txt b/test/test_unit/src/execution_management/okx/CMakeLists.txt similarity index 65% rename from test/test_unit/src/execution_management/okex/CMakeLists.txt rename to test/test_unit/src/execution_management/okx/CMakeLists.txt index 91266cd8..d59c0f94 100644 --- a/test/test_unit/src/execution_management/okex/CMakeLists.txt +++ b/test/test_unit/src/execution_management/okx/CMakeLists.txt @@ -1,6 +1,6 @@ -set(NAME execution_management_okex) +set(NAME execution_management_okx) project(${NAME}) add_compile_definitions(CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT) -add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKEX) +add_compile_definitions(CCAPI_ENABLE_EXCHANGE_OKX) add_executable(${NAME} ${SOURCE_LOGGER} test.cpp) gtest_discover_tests(${NAME}) diff --git a/test/test_unit/src/execution_management/okex/test.cpp b/test/test_unit/src/execution_management/okx/test.cpp similarity index 81% rename from test/test_unit/src/execution_management/okex/test.cpp rename to test/test_unit/src/execution_management/okx/test.cpp index 9526bc59..7d90a94d 100644 --- a/test/test_unit/src/execution_management/okex/test.cpp +++ b/test/test_unit/src/execution_management/okx/test.cpp @@ -1,27 +1,27 @@ #ifdef CCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT -#ifdef CCAPI_ENABLE_EXCHANGE_OKEX +#ifdef CCAPI_ENABLE_EXCHANGE_OKX // clang-format off #include "gtest/gtest.h" #include "ccapi_cpp/ccapi_test_execution_management_helper.h" -#include "ccapi_cpp/service/ccapi_execution_management_service_okex.h" +#include "ccapi_cpp/service/ccapi_execution_management_service_okx.h" // clang-format on namespace ccapi { -class ExecutionManagementServiceOkexTest : public ::testing::Test { +class ExecutionManagementServiceOkxTest : public ::testing::Test { public: typedef Service::ServiceContextPtr ServiceContextPtr; void SetUp() override { - this->service = std::make_shared([](Event&, Queue*) {}, SessionOptions(), SessionConfigs(), - wspp::lib::make_shared()); + this->service = std::make_shared([](Event&, Queue*) {}, SessionOptions(), SessionConfigs(), + wspp::lib::make_shared()); this->credential = { - {CCAPI_OKEX_API_KEY, "a53c4a1d047bddd07e6d4b5783ae18b0"}, - {CCAPI_OKEX_API_SECRET, "+xT7GWTDRHi09EZEhkOC8S7ktzngKtoT1ZoZ6QclGURlq3ePfUd7kLQzK4+P54685NEqYDaIerYj9cuYFILOhQ=="}, - {CCAPI_OKEX_API_PASSPHRASE, "0x1a5y8koaa9"}, + {CCAPI_OKX_API_KEY, "a53c4a1d047bddd07e6d4b5783ae18b0"}, + {CCAPI_OKX_API_SECRET, "+xT7GWTDRHi09EZEhkOC8S7ktzngKtoT1ZoZ6QclGURlq3ePfUd7kLQzK4+P54685NEqYDaIerYj9cuYFILOhQ=="}, + {CCAPI_OKX_API_PASSPHRASE, "0x1a5y8koaa9"}, }; this->timestamp = 1499827319; this->now = UtilTime::makeTimePointFromMilliseconds(this->timestamp * 1000LL); this->timestampStr = "2017-07-12T02:41:59.000Z"; } - std::shared_ptr service{nullptr}; + std::shared_ptr service{nullptr}; std::map credential; long long timestamp{}; TimePoint now{}; @@ -44,7 +44,7 @@ void verifySignature(const http::request& req, const std::str EXPECT_EQ(UtilAlgorithm::base64Encode(Hmac::hmac(Hmac::ShaVersion::SHA256, apiSecret, preSignedText)), signature); } -TEST_F(ExecutionManagementServiceOkexTest, signRequest) { +TEST_F(ExecutionManagementServiceOkxTest, signRequest) { http::request req; req.set("OK-ACCESS-TIMESTAMP", "2021-04-01T18:23:16.027Z"); req.method(http::verb::post); @@ -54,8 +54,8 @@ TEST_F(ExecutionManagementServiceOkexTest, signRequest) { EXPECT_EQ(req.base().at("OK-ACCESS-SIGN").to_string(), "vnOpLd3yPc2Ojwm8w0TafZqnujwm3qfjyIpNrmhUrsk="); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestCreateOrder) { - Request request(Request::Operation::CREATE_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestCreateOrder) { + Request request(Request::Operation::CREATE_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::map param{ {CCAPI_EM_ORDER_SIDE, CCAPI_EM_ORDER_SIDE_BUY}, {CCAPI_EM_ORDER_QUANTITY, "2"}, @@ -65,7 +65,7 @@ TEST_F(ExecutionManagementServiceOkexTest, convertRequestCreateOrder) { request.appendParam(param); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::post); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); EXPECT_EQ(req.target(), "/api/v5/trade/order"); rj::Document document; document.Parse(req.body().c_str()); @@ -75,11 +75,11 @@ TEST_F(ExecutionManagementServiceOkexTest, convertRequestCreateOrder) { EXPECT_EQ(std::string(document["px"].GetString()), "2.15"); EXPECT_EQ(std::string(document["ordType"].GetString()), "limit"); EXPECT_EQ(std::string(document["tdMode"].GetString()), "cash"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestCreateOrder) { - Request request(Request::Operation::CREATE_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestCreateOrder) { + Request request(Request::Operation::CREATE_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::string textMessage = R"( { @@ -107,42 +107,42 @@ TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestCreate EXPECT_EQ(element.getValue(CCAPI_EM_ORDER_ID), "12345689"); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestCancelOrderByOrderId) { - Request request(Request::Operation::CANCEL_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestCancelOrderByOrderId) { + Request request(Request::Operation::CANCEL_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::map param{ {CCAPI_EM_ORDER_ID, "2510789768709120"}, }; request.appendParam(param); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::post); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); EXPECT_EQ(req.target(), "/api/v5/trade/cancel-order"); rj::Document document; document.Parse(req.body().c_str()); EXPECT_EQ(std::string(document["instId"].GetString()), "BTC-USDT"); EXPECT_EQ(std::string(document["ordId"].GetString()), "2510789768709120"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestCancelOrderByClientOrderId) { - Request request(Request::Operation::CANCEL_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestCancelOrderByClientOrderId) { + Request request(Request::Operation::CANCEL_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::map param{ {CCAPI_EM_CLIENT_ORDER_ID, "oktswap6"}, }; request.appendParam(param); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::post); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); EXPECT_EQ(req.target(), "/api/v5/trade/cancel-order"); rj::Document document; document.Parse(req.body().c_str()); EXPECT_EQ(std::string(document["instId"].GetString()), "BTC-USDT"); EXPECT_EQ(std::string(document["clOrdId"].GetString()), "oktswap6"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestCancelOrder) { - Request request(Request::Operation::CANCEL_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestCancelOrder) { + Request request(Request::Operation::CANCEL_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::string textMessage = R"( { @@ -165,42 +165,42 @@ TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestCancel EXPECT_EQ(message.getType(), Message::Type::CANCEL_ORDER); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestGetOrderByOrderId) { - Request request(Request::Operation::GET_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestGetOrderByOrderId) { + Request request(Request::Operation::GET_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::map param{ {CCAPI_EM_ORDER_ID, "2510789768709120"}, }; request.appendParam(param); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::get); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); auto splitted = UtilString::split(req.target().to_string(), "?"); EXPECT_EQ(splitted.at(0), "/api/v5/trade/order"); auto paramMap = Url::convertQueryStringToMap(splitted.at(1)); EXPECT_EQ(paramMap.at("ordId"), "2510789768709120"); EXPECT_EQ(paramMap.at("instId"), "BTC-USDT"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestGetOrderByClientOrderId) { - Request request(Request::Operation::GET_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestGetOrderByClientOrderId) { + Request request(Request::Operation::GET_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::map param{ {CCAPI_EM_CLIENT_ORDER_ID, "b1"}, }; request.appendParam(param); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::get); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); auto splitted = UtilString::split(req.target().to_string(), "?"); EXPECT_EQ(splitted.at(0), "/api/v5/trade/order"); auto paramMap = Url::convertQueryStringToMap(splitted.at(1)); EXPECT_EQ(paramMap.at("clOrdId"), "b1"); EXPECT_EQ(paramMap.at("instId"), "BTC-USDT"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetOrder) { - Request request(Request::Operation::GET_ORDER, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestGetOrder) { + Request request(Request::Operation::GET_ORDER, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); std::string textMessage = R"( { @@ -260,31 +260,31 @@ TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetOrd EXPECT_EQ(element.getValue(CCAPI_EM_ORDER_STATUS), "live"); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestGetOpenOrdersOneInstrument) { - Request request(Request::Operation::GET_OPEN_ORDERS, CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestGetOpenOrdersOneInstrument) { + Request request(Request::Operation::GET_OPEN_ORDERS, CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", "foo", this->credential); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::get); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); auto splitted = UtilString::split(req.target().to_string(), "?"); EXPECT_EQ(splitted.at(0), "/api/v5/trade/orders-pending"); auto paramMap = Url::convertQueryStringToMap(splitted.at(1)); EXPECT_EQ(paramMap.at("instId"), "BTC-USDT"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestGetOpenOrdersAllInstruments) { - Request request(Request::Operation::GET_OPEN_ORDERS, CCAPI_EXCHANGE_NAME_OKEX, "", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestGetOpenOrdersAllInstruments) { + Request request(Request::Operation::GET_OPEN_ORDERS, CCAPI_EXCHANGE_NAME_OKX, "", "foo", this->credential); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::get); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); auto splitted = UtilString::split(req.target().to_string(), "?"); EXPECT_EQ(splitted.at(0), "/api/v5/trade/orders-pending"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -void verifyconvertTextMessageToMessageRestGetOpenOrders(const ExecutionManagementServiceOkexTest* fixture, bool isOneInstrument) { +void verifyconvertTextMessageToMessageRestGetOpenOrders(const ExecutionManagementServiceOkxTest* fixture, bool isOneInstrument) { std::string symbol = isOneInstrument ? "BTC-USDT" : ""; - Request request(Request::Operation::GET_OPEN_ORDERS, CCAPI_EXCHANGE_NAME_OKEX, symbol, "", fixture->credential); + Request request(Request::Operation::GET_OPEN_ORDERS, CCAPI_EXCHANGE_NAME_OKX, symbol, "", fixture->credential); std::string textMessage = R"( { @@ -347,25 +347,25 @@ void verifyconvertTextMessageToMessageRestGetOpenOrders(const ExecutionManagemen } } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetOpenOrdersOneInstrument) { +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestGetOpenOrdersOneInstrument) { verifyconvertTextMessageToMessageRestGetOpenOrders(this, true); } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetOpenOrdersAllInstruments) { +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestGetOpenOrdersAllInstruments) { verifyconvertTextMessageToMessageRestGetOpenOrders(this, false); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestGetAccountBalances) { - Request request(Request::Operation::GET_ACCOUNT_BALANCES, CCAPI_EXCHANGE_NAME_OKEX, "", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestGetAccountBalances) { + Request request(Request::Operation::GET_ACCOUNT_BALANCES, CCAPI_EXCHANGE_NAME_OKX, "", "foo", this->credential); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::get); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); EXPECT_EQ(req.target().to_string(), "/api/v5/account/balance"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetAccountBalances) { - Request request(Request::Operation::GET_ACCOUNT_BALANCES, CCAPI_EXCHANGE_NAME_OKEX, "", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestGetAccountBalances) { + Request request(Request::Operation::GET_ACCOUNT_BALANCES, CCAPI_EXCHANGE_NAME_OKX, "", "foo", this->credential); std::string textMessage = R"( { @@ -446,17 +446,17 @@ TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetAcc EXPECT_EQ(element.getValue(CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING), "9930359.9998"); } -TEST_F(ExecutionManagementServiceOkexTest, convertRequestGetAccountPositions) { - Request request(Request::Operation::GET_ACCOUNT_POSITIONS, CCAPI_EXCHANGE_NAME_OKEX, "", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertRequestGetAccountPositions) { + Request request(Request::Operation::GET_ACCOUNT_POSITIONS, CCAPI_EXCHANGE_NAME_OKX, "", "foo", this->credential); auto req = this->service->convertRequest(request, this->now); EXPECT_EQ(req.method(), http::verb::get); - verifyApiKeyEtc(req, this->credential.at(CCAPI_OKEX_API_KEY), this->credential.at(CCAPI_OKEX_API_PASSPHRASE), this->timestampStr); + verifyApiKeyEtc(req, this->credential.at(CCAPI_OKX_API_KEY), this->credential.at(CCAPI_OKX_API_PASSPHRASE), this->timestampStr); EXPECT_EQ(req.target().to_string(), "/api/v5/account/positions"); - verifySignature(req, this->credential.at(CCAPI_OKEX_API_SECRET)); + verifySignature(req, this->credential.at(CCAPI_OKX_API_SECRET)); } -TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetAccountPositions) { - Request request(Request::Operation::GET_ACCOUNT_POSITIONS, CCAPI_EXCHANGE_NAME_OKEX, "", "foo", this->credential); +TEST_F(ExecutionManagementServiceOkxTest, convertTextMessageToMessageRestGetAccountPositions) { + Request request(Request::Operation::GET_ACCOUNT_POSITIONS, CCAPI_EXCHANGE_NAME_OKX, "", "foo", this->credential); std::string textMessage = R"( { @@ -520,8 +520,8 @@ TEST_F(ExecutionManagementServiceOkexTest, convertTextMessageToMessageRestGetAcc EXPECT_EQ(element.getValue(CCAPI_EM_POSITION_LEVERAGE), "10"); } -TEST_F(ExecutionManagementServiceOkexTest, createEventFilled) { - Subscription subscription(CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", CCAPI_EM_PRIVATE_TRADE); +TEST_F(ExecutionManagementServiceOkxTest, createEventFilled) { + Subscription subscription(CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", CCAPI_EM_PRIVATE_TRADE); std::string textMessage = R"( { "arg": { @@ -597,8 +597,8 @@ TEST_F(ExecutionManagementServiceOkexTest, createEventFilled) { EXPECT_EQ(element.getValue(CCAPI_EM_ORDER_FEE_ASSET), "USDT"); } -TEST_F(ExecutionManagementServiceOkexTest, createEventLive) { - Subscription subscription(CCAPI_EXCHANGE_NAME_OKEX, "BTC-USDT", CCAPI_EM_ORDER_UPDATE); +TEST_F(ExecutionManagementServiceOkxTest, createEventLive) { + Subscription subscription(CCAPI_EXCHANGE_NAME_OKX, "BTC-USDT", CCAPI_EM_ORDER_UPDATE); std::string textMessage = R"( { "arg": { @@ -672,8 +672,8 @@ TEST_F(ExecutionManagementServiceOkexTest, createEventLive) { EXPECT_EQ(element.getValue(CCAPI_EM_ORDER_INSTRUMENT), "BTC-USDT"); } -TEST_F(ExecutionManagementServiceOkexTest, createEventWebsocketTradePlaceOrder) { - Subscription subscription("okex", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); +TEST_F(ExecutionManagementServiceOkxTest, createEventWebsocketTradePlaceOrder) { + Subscription subscription("okx", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); std::string textMessage = R"( { "id": "1512", @@ -704,8 +704,8 @@ TEST_F(ExecutionManagementServiceOkexTest, createEventWebsocketTradePlaceOrder) EXPECT_EQ(element.getValue(CCAPI_EM_ORDER_ID), "12345689"); } -TEST_F(ExecutionManagementServiceOkexTest, createEventWebsocketTradeCancelOrder) { - Subscription subscription("okex", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); +TEST_F(ExecutionManagementServiceOkxTest, createEventWebsocketTradeCancelOrder) { + Subscription subscription("okx", "BTC-USDT", "ORDER_UPDATE", "", "same correlation id for subscription and request"); std::string textMessage = R"( { "code": "0",