@@ -374,56 +374,73 @@ class ExecutionManagementServiceBinanceBase : public ExecutionManagementService
374374 const auto & marginType = request.getMarginType ();
375375 if (this ->isDerivatives ) {
376376 for (const auto & x : document[" assets" ].GetArray ()) {
377- Element element;
378- element.insert (CCAPI_EM_ASSET, x[" asset" ].GetString ());
379- element.insert (CCAPI_EM_QUANTITY_TOTAL, x[" walletBalance" ].GetString ());
380- element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x[" availableBalance" ].GetString ());
381- if (this ->isDerivatives ) {
382- element.insert (CCAPI_LAST_UPDATED_TIME_SECONDS, UtilTime::convertMillisecondsStrToSecondsStr (x[" updateTime" ].GetString ()));
377+ const auto & quantityTotalDecimal = Decimal (x[" walletBalance" ].GetString ());
378+ if (quantityTotalDecimal != Decimal::zero) {
379+ Element element;
380+ element.insert (CCAPI_EM_ASSET, x[" asset" ].GetString ());
381+ element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (quantityTotalDecimal));
382+ element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x[" availableBalance" ].GetString ());
383+ if (this ->isDerivatives ) {
384+ element.insert (CCAPI_LAST_UPDATED_TIME_SECONDS, UtilTime::convertMillisecondsStrToSecondsStr (x[" updateTime" ].GetString ()));
385+ }
386+ elementList.emplace_back (std::move (element));
383387 }
384- elementList.emplace_back (std::move (element));
385388 }
386389 } else {
387390 if (marginType == CCAPI_EM_MARGIN_TYPE_CROSS_MARGIN) {
388391 for (const auto & x : document[" userAssets" ].GetArray ()) {
389- Element element;
390- element.insert (CCAPI_EM_ASSET, x[" asset" ].GetString ());
391- element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (Decimal (x[" free" ].GetString ()) + (Decimal (x[" locked" ].GetString ()))));
392- element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x[" free" ].GetString ());
393- element.insert (CCAPI_EM_QUANTITY_LIABILITY, ConvertDecimalToString (Decimal (x[" borrowed" ].GetString ()) + (Decimal (x[" interest" ].GetString ()))));
394- elementList.emplace_back (std::move (element));
392+ const auto & quantityTotalDecimal = Decimal (x[" free" ].GetString ()) + Decimal (x[" locked" ].GetString ());
393+ if (quantityTotalDecimal != Decimal::zero) {
394+ Element element;
395+ element.insert (CCAPI_EM_ASSET, x[" asset" ].GetString ());
396+ element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (quantityTotalDecimal));
397+ element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x[" free" ].GetString ());
398+ element.insert (CCAPI_EM_QUANTITY_LIABILITY, ConvertDecimalToString (Decimal (x[" borrowed" ].GetString ()) + (Decimal (x[" interest" ].GetString ()))));
399+ elementList.emplace_back (std::move (element));
400+ }
395401 }
396402 } else if (marginType == CCAPI_EM_MARGIN_TYPE_ISOLATED_MARGIN) {
397403 for (const auto & x : document[" assets" ].GetArray ()) {
398404 std::string symbol = x[" symbol" ].GetString ();
399405 {
400406 const auto & y = x[" baseAsset" ];
401- Element element;
402- element.insert (CCAPI_EM_INSTRUMENT, symbol);
403- element.insert (CCAPI_EM_ASSET, y[" asset" ].GetString ());
404- element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (Decimal (y[" free" ].GetString ()) + (Decimal (y[" locked" ].GetString ()))));
405- element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, y[" free" ].GetString ());
406- element.insert (CCAPI_EM_QUANTITY_LIABILITY, ConvertDecimalToString (Decimal (y[" borrowed" ].GetString ()) + (Decimal (y[" interest" ].GetString ()))));
407- elementList.emplace_back (std::move (element));
407+ const auto & quantityTotalDecimal = Decimal (y[" free" ].GetString ()) + Decimal (y[" locked" ].GetString ());
408+ if (quantityTotalDecimal != Decimal::zero) {
409+ Element element;
410+ element.insert (CCAPI_EM_INSTRUMENT, symbol);
411+ element.insert (CCAPI_EM_ASSET, y[" asset" ].GetString ());
412+ element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (quantityTotalDecimal));
413+ element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, y[" free" ].GetString ());
414+ element.insert (CCAPI_EM_QUANTITY_LIABILITY,
415+ ConvertDecimalToString (Decimal (y[" borrowed" ].GetString ()) + (Decimal (y[" interest" ].GetString ()))));
416+ elementList.emplace_back (std::move (element));
417+ }
408418 }
409419 {
410420 const auto & y = x[" quoteAsset" ];
411- Element element;
412- element.insert (CCAPI_EM_INSTRUMENT, symbol);
413- element.insert (CCAPI_EM_ASSET, y[" asset" ].GetString ());
414- element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (Decimal (y[" free" ].GetString ()) + (Decimal (y[" locked" ].GetString ()))));
415- element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, y[" free" ].GetString ());
416- element.insert (CCAPI_EM_QUANTITY_LIABILITY, ConvertDecimalToString (Decimal (y[" borrowed" ].GetString ()) + (Decimal (y[" interest" ].GetString ()))));
417- elementList.emplace_back (std::move (element));
421+ const auto & quantityTotalDecimal = Decimal (y[" free" ].GetString ()) + Decimal (y[" locked" ].GetString ());
422+ if (quantityTotalDecimal != Decimal::zero) {
423+ Element element;
424+ element.insert (CCAPI_EM_INSTRUMENT, symbol);
425+ element.insert (CCAPI_EM_ASSET, y[" asset" ].GetString ());
426+ element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (quantityTotalDecimal));
427+ element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, y[" free" ].GetString ());
428+ element.insert (CCAPI_EM_QUANTITY_LIABILITY,
429+ ConvertDecimalToString (Decimal (y[" borrowed" ].GetString ()) + (Decimal (y[" interest" ].GetString ()))));
430+ elementList.emplace_back (std::move (element));
431+ }
418432 }
419433 }
420434 } else {
421435 for (const auto & x : document[" balances" ].GetArray ()) {
422- Element element;
423- element.insert (CCAPI_EM_ASSET, x[" asset" ].GetString ());
424- element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (Decimal (x[" free" ].GetString ()) + (Decimal (x[" locked" ].GetString ()))));
425- element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x[" free" ].GetString ());
426- elementList.emplace_back (std::move (element));
436+ const auto & quantityTotalDecimal = Decimal (x[" free" ].GetString ()) + Decimal (x[" locked" ].GetString ());
437+ if (quantityTotalDecimal != Decimal::zero) {
438+ Element element;
439+ element.insert (CCAPI_EM_ASSET, x[" asset" ].GetString ());
440+ element.insert (CCAPI_EM_QUANTITY_TOTAL, ConvertDecimalToString (quantityTotalDecimal));
441+ element.insert (CCAPI_EM_QUANTITY_AVAILABLE_FOR_TRADING, x[" free" ].GetString ());
442+ elementList.emplace_back (std::move (element));
443+ }
427444 }
428445 }
429446 }
0 commit comments