qbtrade/pkg/exchange/bybit/bybitapi/get_wallet_balances_request.go
2024-06-27 22:42:38 +08:00

93 lines
4.2 KiB
Go

package bybitapi
import (
"github.com/c9s/requestgen"
"git.qtrade.icu/lychiyu/qbtrade/pkg/fixedpoint"
)
//go:generate -command GetRequest requestgen -method GET -responseType .APIResponse -responseDataField Result
//go:generate -command PostRequest requestgen -method POST -responseType .APIResponse -responseDataField Result
type WalletBalancesResponse struct {
List []WalletBalances `json:"list"`
}
type WalletBalances struct {
AccountType AccountType `json:"accountType"`
AccountIMRate fixedpoint.Value `json:"accountIMRate"`
AccountMMRate fixedpoint.Value `json:"accountMMRate"`
TotalEquity fixedpoint.Value `json:"totalEquity"`
TotalWalletBalance fixedpoint.Value `json:"totalWalletBalance"`
TotalMarginBalance fixedpoint.Value `json:"totalMarginBalance"`
TotalAvailableBalance fixedpoint.Value `json:"totalAvailableBalance"`
TotalPerpUPL fixedpoint.Value `json:"totalPerpUPL"`
TotalInitialMargin fixedpoint.Value `json:"totalInitialMargin"`
TotalMaintenanceMargin fixedpoint.Value `json:"totalMaintenanceMargin"`
// Account LTV: account total borrowed size / (account total equity + account total borrowed size).
// In non-unified mode & unified (inverse) & unified (isolated_margin), the field will be returned as an empty string.
AccountLTV fixedpoint.Value `json:"accountLTV"`
Coins []struct {
Coin string `json:"coin"`
// Equity of current coin
Equity fixedpoint.Value `json:"equity"`
// UsdValue of current coin. If this coin cannot be collateral, then it is 0
UsdValue fixedpoint.Value `json:"usdValue"`
// WalletBalance of current coin
WalletBalance fixedpoint.Value `json:"walletBalance"`
// Free available balance for Spot wallet. This is a unique field for Normal SPOT
Free fixedpoint.Value
// Locked balance for Spot wallet. This is a unique field for Normal SPOT
Locked fixedpoint.Value
// Available amount to withdraw of current coin
AvailableToWithdraw fixedpoint.Value `json:"availableToWithdraw"`
// Available amount to borrow of current coin
AvailableToBorrow fixedpoint.Value `json:"availableToBorrow"`
// Borrow amount of current coin
BorrowAmount fixedpoint.Value `json:"borrowAmount"`
// Accrued interest
AccruedInterest fixedpoint.Value `json:"accruedInterest"`
// Pre-occupied margin for order. For portfolio margin mode, it returns ""
TotalOrderIM fixedpoint.Value `json:"totalOrderIM"`
// Sum of initial margin of all positions + Pre-occupied liquidation fee. For portfolio margin mode, it returns ""
TotalPositionIM fixedpoint.Value `json:"totalPositionIM"`
// Sum of maintenance margin for all positions. For portfolio margin mode, it returns ""
TotalPositionMM fixedpoint.Value `json:"totalPositionMM"`
// Unrealised P&L
UnrealisedPnl fixedpoint.Value `json:"unrealisedPnl"`
// Cumulative Realised P&L
CumRealisedPnl fixedpoint.Value `json:"cumRealisedPnl"`
// Bonus. This is a unique field for UNIFIED account
Bonus fixedpoint.Value `json:"bonus"`
// Whether it can be used as a margin collateral currency (platform)
// - When marginCollateral=false, then collateralSwitch is meaningless
// - This is a unique field for UNIFIED account
CollateralSwitch bool `json:"collateralSwitch"`
// Whether the collateral is turned on by user (user)
// - When marginCollateral=true, then collateralSwitch is meaningful
// - This is a unique field for UNIFIED account
MarginCollateral bool `json:"marginCollateral"`
} `json:"coin"`
}
//go:generate GetRequest -url "/v5/account/wallet-balance" -type GetWalletBalancesRequest -responseDataType .WalletBalancesResponse
type GetWalletBalancesRequest struct {
client requestgen.AuthenticatedAPIClient
// Account type
// - Unified account: UNIFIED (trade spot/linear/options), CONTRACT(trade inverse)
// - Normal account: CONTRACT, SPOT
accountType AccountType `param:"accountType,query" validValues:"SPOT"`
// Coin name
// - If not passed, it returns non-zero asset info
// - You can pass multiple coins to query, separated by comma. USDT,USDC
coin *string `param:"coin,query"`
}
func (c *RestClient) NewGetWalletBalancesRequest() *GetWalletBalancesRequest {
return &GetWalletBalancesRequest{
client: c,
accountType: AccountTypeSpot,
}
}