@@ -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 */
0 commit comments