Skip to content

Commit b85da3e

Browse files
Merge pull request #551 from fedeitc/huobi-swap-one-topic
Huobi swap one topic
2 parents f3dfb32 + 75360bd commit b85da3e

6 files changed

Lines changed: 18 additions & 38 deletions

include/ccapi_cpp/ccapi_macro.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1160,10 +1160,6 @@
11601160
#define CCAPI_HUOBI_USDT_SWAP_SUBSCRIBE_ORDER_DATA_TOPIC "orders_cross"
11611161
#endif
11621162

1163-
#ifndef CCAPI_HUOBI_USDT_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC
1164-
#define CCAPI_HUOBI_USDT_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC "matchOrders_cross"
1165-
#endif
1166-
11671163
#ifndef CCAPI_HUOBI_COIN_SWAP_URL_WS_BASE
11681164
#define CCAPI_HUOBI_COIN_SWAP_URL_WS_BASE "wss://api.hbdm.com"
11691165
#endif
@@ -1172,10 +1168,6 @@
11721168
#define CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_ORDER_DATA_TOPIC "orders"
11731169
#endif
11741170

1175-
#ifndef CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC
1176-
#define CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC "matchOrders"
1177-
#endif
1178-
11791171
#ifndef CCAPI_OKX_URL_WS_BASE
11801172
#define CCAPI_OKX_URL_WS_BASE "wss://ws.okx.com:8443"
11811173
#endif

include/ccapi_cpp/ccapi_util_private.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ class UtilString {
281281
}
282282

283283
static std::string normalizeDecimalString(const std::string& original) {
284-
if (original.find('.') != std::string::npos) {
284+
if (original.find('.') != std::string::npos && original.find_first_of("Ee") == std::string::npos) {
285285
std::string str(original);
286286
rtrimInPlace(str, "0");
287287
rtrimInPlace(str, ".");
@@ -303,7 +303,7 @@ class UtilString {
303303
static std::string_view normalizeDecimalStringView(std::string_view input) {
304304
// Quick check for dot
305305
size_t dotPos = input.find('.');
306-
if (dotPos == std::string_view::npos) return input;
306+
if (dotPos == std::string_view::npos || input.find_first_of("Ee") != std::string::npos) return input;
307307

308308
size_t end = input.size();
309309

include/ccapi_cpp/service/ccapi_execution_management_service_huobi_coin_swap.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class ExecutionManagementServiceHuobiCoinSwap : public ExecutionManagementServic
2727
this->getAccountPositionsTarget = CCAPI_HUOBI_COIN_SWAP_GET_ACCOUNT_POSITIONS_PATH;
2828
this->authenticationPath = "/swap-api/v1/swap_order";
2929
this->orderDataTopic = CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_ORDER_DATA_TOPIC;
30-
this->matchOrderDataTopic = CCAPI_HUOBI_COIN_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC;
3130
}
3231

3332
virtual ~ExecutionManagementServiceHuobiCoinSwap() {}

include/ccapi_cpp/service/ccapi_execution_management_service_huobi_derivatives_base.h

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ class ExecutionManagementServiceHuobiDerivativesBase : public ExecutionManagemen
6262
if (param.find("offset") == param.end()) {
6363
document.AddMember("offset", rj::Value("open").Move(), allocator);
6464
}
65-
if (param.find("lever_rate") == param.end()) {
65+
if (param.find("lever_rate") == param.end() && param.find(CCAPI_EM_ORDER_LEVERAGE) == param.end()) {
6666
document.AddMember("lever_rate", rj::Value("1").Move(), allocator);
6767
}
6868
if (param.find("order_price_type") == param.end()) {
@@ -269,17 +269,13 @@ class ExecutionManagementServiceHuobiDerivativesBase : public ExecutionManagemen
269269
std::string errCode = document["err-code"].GetString();
270270
if (errCode == "0") {
271271
for (const auto& instrument : instrumentSet) {
272-
for (const auto& field : fieldSet) {
272+
if (fieldSet.find(CCAPI_EM_ORDER_UPDATE) != fieldSet.end() || fieldSet.find(CCAPI_EM_PRIVATE_TRADE) != fieldSet.end()) {
273273
rj::Document document;
274274
document.SetObject();
275275
auto& allocator = document.GetAllocator();
276276
document.AddMember("op", rj::Value("sub").Move(), allocator);
277277
std::string topic;
278-
if (field == CCAPI_EM_ORDER_UPDATE) {
279-
topic = this->orderDataTopic + "." + instrument;
280-
} else if (field == CCAPI_EM_PRIVATE_TRADE) {
281-
topic = this->matchOrderDataTopic + "." + instrument;
282-
}
278+
topic = this->orderDataTopic + "." + instrument;
283279
document.AddMember("topic", rj::Value(topic.c_str(), allocator).Move(), allocator);
284280
rj::StringBuffer stringBufferSubscribe;
285281
rj::Writer<rj::StringBuffer> writerSubscribe(stringBufferSubscribe);
@@ -334,14 +330,13 @@ class ExecutionManagementServiceHuobiDerivativesBase : public ExecutionManagemen
334330
message.setTimeReceived(timeReceived);
335331
message.setCorrelationIdList({subscription.getCorrelationId()});
336332
std::string topic = document["topic"].GetString();
337-
if (topic.rfind(this->orderDataTopic + ".", 0) == 0 && fieldSet.find(CCAPI_EM_ORDER_UPDATE) != fieldSet.end()) {
333+
if (fieldSet.find(CCAPI_EM_ORDER_UPDATE) != fieldSet.end()) {
338334
std::string instrument = document["contract_code"].GetString();
339335
if (instrumentSet.empty() || instrumentSet.find(instrument) != instrumentSet.end()) {
340336
message.setTime(UtilTime::makeTimePointFromMilliseconds(std::stoll(document["ts"].GetString())));
341337
message.setType(Message::Type::EXECUTION_MANAGEMENT_EVENTS_ORDER_UPDATE);
342338
const std::map<std::string_view, std::pair<std::string_view, JsonDataType>>& extractionFieldNameMap = {
343339
{CCAPI_EM_ORDER_ID, std::make_pair("order_id", JsonDataType::STRING)},
344-
{CCAPI_EM_CLIENT_ORDER_ID, std::make_pair("client_order_id", JsonDataType::STRING)},
345340
{CCAPI_EM_ORDER_SIDE, std::make_pair("direction", JsonDataType::STRING)},
346341
{CCAPI_EM_ORDER_LIMIT_PRICE, std::make_pair("price", JsonDataType::STRING)},
347342
{CCAPI_EM_ORDER_QUANTITY, std::make_pair("volume", JsonDataType::STRING)},
@@ -351,35 +346,25 @@ class ExecutionManagementServiceHuobiDerivativesBase : public ExecutionManagemen
351346
};
352347
Element info;
353348
this->extractOrderInfo(info, document, extractionFieldNameMap);
354-
{
355-
auto it1 = document.FindMember("trade_volume");
356-
auto it2 = document.FindMember("trade_avg_price");
357-
if (it1 != document.MemberEnd() && it2 != document.MemberEnd()) {
358-
info.insert(
359-
CCAPI_EM_ORDER_CUMULATIVE_FILLED_QUOTE_QUANTITY,
360-
ConvertDecimalToString(Decimal(UtilString::printDoubleScientific(std::stod(it1->value.GetString()) * std::stod(it2->value.GetString())))));
361-
}
362-
}
363-
for (const auto& x : document["trade"].GetArray()) {
364-
info.insert(CCAPI_TRADE_ID, std::string(x["trade_id"].GetString()));
365-
info.insert(CCAPI_EM_ORDER_LAST_EXECUTED_PRICE, x["trade_price"].GetString());
366-
info.insert(CCAPI_EM_ORDER_LAST_EXECUTED_SIZE, x["trade_volume"].GetString());
367-
info.insert(CCAPI_IS_MAKER, std::string_view(x["role"].GetString()) == "maker" ? "1" : "0");
349+
auto it = document.FindMember("client_order_id");
350+
if (it != document.MemberEnd() && it->value.IsString()) {
351+
info.insert(CCAPI_EM_CLIENT_ORDER_ID, it->value.GetString());
368352
}
369353
std::vector<Element> elementList;
370354
elementList.emplace_back(std::move(info));
371355
message.setElementList(elementList);
372356
messageList.emplace_back(std::move(message));
373357
}
374-
} else if (topic.rfind(this->matchOrderDataTopic + ".", 0) == 0 && fieldSet.find(CCAPI_EM_PRIVATE_TRADE) != fieldSet.end()) {
358+
}
359+
if (fieldSet.find(CCAPI_EM_PRIVATE_TRADE) != fieldSet.end()) {
375360
std::string instrument = document["contract_code"].GetString();
376361
if (instrumentSet.empty() || instrumentSet.find(instrument) != instrumentSet.end()) {
377362
std::string orderSide = std::string_view(document["direction"].GetString()) == "buy" ? CCAPI_EM_ORDER_SIDE_BUY : CCAPI_EM_ORDER_SIDE_SELL;
378363
std::string positionSide = document["offset"].GetString();
379364
std::string orderId = document["order_id"].GetString();
380365
std::string clientOrderId;
381366
auto it = document.FindMember("client_order_id");
382-
if (!it->value.IsNull()) {
367+
if (it != document.MemberEnd() && it->value.IsString()) {
383368
clientOrderId = it->value.GetString();
384369
}
385370
for (const auto& x : document["trade"].GetArray()) {
@@ -431,7 +416,6 @@ class ExecutionManagementServiceHuobiDerivativesBase : public ExecutionManagemen
431416

432417
std::string authenticationPath;
433418
std::string orderDataTopic;
434-
std::string matchOrderDataTopic;
435419
};
436420

437421
} /* namespace ccapi */

include/ccapi_cpp/service/ccapi_execution_management_service_huobi_usdt_swap.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ class ExecutionManagementServiceHuobiUsdtSwap : public ExecutionManagementServic
2727
this->getAccountPositionsTarget = CCAPI_HUOBI_USDT_SWAP_GET_ACCOUNT_POSITIONS_PATH;
2828
this->authenticationPath = "/linear-swap-notification";
2929
this->orderDataTopic = CCAPI_HUOBI_USDT_SWAP_SUBSCRIBE_ORDER_DATA_TOPIC;
30-
this->matchOrderDataTopic = CCAPI_HUOBI_USDT_SWAP_SUBSCRIBE_MATCH_ORDER_DATA_TOPIC;
3130
}
3231

3332
virtual ~ExecutionManagementServiceHuobiUsdtSwap() {}

test/test_unit/src/common/util/ccapi_util_test.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,12 @@ TEST(UtilStringTest, normalizeDecimalString_5) {
129129
EXPECT_EQ(UtilString::normalizeDecimalString(original.c_str()), "1.1");
130130
}
131131

132+
TEST(UtilStringTest, normalizeDecimalString_6) {
133+
std::string original("1.1e10");
134+
EXPECT_EQ(UtilString::normalizeDecimalString(original), "1.1e10");
135+
EXPECT_EQ(UtilString::normalizeDecimalStringView(original), "1.1e10");
136+
}
137+
132138
TEST(UtilStringTest, toUpper) {
133139
std::string original("ab");
134140
EXPECT_EQ(UtilString::toUpper(original), "AB");

0 commit comments

Comments
 (0)