commit
73195383fa
|
@ -0,0 +1,271 @@
|
||||||
|
package bybit_connector
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"github.com/wuhewuhe/bybit.go.api/handlers"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AccountClient struct {
|
||||||
|
c *Client
|
||||||
|
params map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetTransactionLog(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
if err = handlers.ValidateParams(s.params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/transaction-log",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
r.setParams(s.params)
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetFeeRates(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
if err = handlers.ValidateParams(s.params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/fee-rate",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
r.setParams(s.params)
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetAccountWallet(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
if err = handlers.ValidateParams(s.params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/wallet-balance",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
r.setParams(s.params)
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetBorrowHistory(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
if err = handlers.ValidateParams(s.params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/borrow-history",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
r.setParams(s.params)
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetCoinGreeks(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
if err = handlers.ValidateParams(s.params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/asset/coin-greeks",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
r.setParams(s.params)
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetCollateralInfo(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
if err = handlers.ValidateParams(s.params); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/collateral-info",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
r.setParams(s.params)
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetAccountInfo(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/upgrade-to-uta",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) GetMMPState(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodGet,
|
||||||
|
endpoint: "/v5/account/mmp-state",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) UpgradeToUTA(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodPost,
|
||||||
|
endpoint: "/v5/account/upgrade-to-uta",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) SetCollateralCoin(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodPost,
|
||||||
|
endpoint: "/v5/account/set-collateral-switch",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) SetMarginMode(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodPost,
|
||||||
|
endpoint: "/v5/account/set-margin-mode",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) SetMarketMakerProtection(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodPost,
|
||||||
|
endpoint: "/v5/account/mmp-modify",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *AccountClient) ResetMarketMakerProtection(ctx context.Context, opts ...RequestOption) (res *ServerResponse, err error) {
|
||||||
|
r := &request{
|
||||||
|
method: http.MethodPost,
|
||||||
|
endpoint: "/v5/account/mmp-reset",
|
||||||
|
secType: secTypeSigned,
|
||||||
|
}
|
||||||
|
data, err := s.c.callAPI(ctx, r, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = new(ServerResponse)
|
||||||
|
err = json.Unmarshal(data, res)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
|
@ -255,3 +255,16 @@ func (c *Client) NewPreUpgradeService(params map[string]interface{}) *PreUpgrade
|
||||||
params: params,
|
params: params,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) NewAccountService(params map[string]interface{}) *AccountClient {
|
||||||
|
return &AccountClient{
|
||||||
|
c: c,
|
||||||
|
params: params,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) NewAccountServiceNoParams() *AccountClient {
|
||||||
|
return &AccountClient{
|
||||||
|
c: c,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,11 +12,11 @@ func main() {
|
||||||
|
|
||||||
func PlaceTrade() {
|
func PlaceTrade() {
|
||||||
client := bybit.NewBybitHttpClient("8wYkmpLsMg10eNQyPm", "Ouxc34myDnXvei54XsBZgoQzfGxO4bkr2Zsj", bybit.WithBaseURL(bybit.TESTNET))
|
client := bybit.NewBybitHttpClient("8wYkmpLsMg10eNQyPm", "Ouxc34myDnXvei54XsBZgoQzfGxO4bkr2Zsj", bybit.WithBaseURL(bybit.TESTNET))
|
||||||
params := map[string]interface{}{"category": "linear", "settleCoin": "USDT", "limit": 10}
|
params := map[string]interface{}{"accountType": "UNIFIED", "category": "linear"}
|
||||||
orderResult, err := client.NewPositionService(params).GetPositionList(context.Background())
|
accountResult, err := client.NewAccountService(params).GetTransactionLog(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println(bybit.PrettyPrint(orderResult))
|
fmt.Println(bybit.PrettyPrint(accountResult))
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,3 +26,146 @@ type TransactionLogEntry struct {
|
||||||
OrderID string `json:"orderId"`
|
OrderID string `json:"orderId"`
|
||||||
OrderLinkId string `json:"orderLinkId"`
|
OrderLinkId string `json:"orderLinkId"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UpgradeUtaInfo struct {
|
||||||
|
UnifiedUpdateStatus string `json:"unifiedUpdateStatus"`
|
||||||
|
UnifiedUpdateMsg *UnifiedUpdateMsg `json:"unifiedUpdateMsg,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UnifiedUpdateMsg struct {
|
||||||
|
Msg []string `json:"msg"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type WalletBalanceInfo struct {
|
||||||
|
List []AccountInfo `json:"list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type WalletAccountInfo struct {
|
||||||
|
AccountType string `json:"accountType"`
|
||||||
|
AccountLTV string `json:"accountLTV"`
|
||||||
|
AccountIMRate string `json:"accountIMRate"`
|
||||||
|
AccountMMRate string `json:"accountMMRate"`
|
||||||
|
TotalEquity string `json:"totalEquity"`
|
||||||
|
TotalWalletBalance string `json:"totalWalletBalance"`
|
||||||
|
TotalMarginBalance string `json:"totalMarginBalance"`
|
||||||
|
TotalAvailableBalance string `json:"totalAvailableBalance"`
|
||||||
|
TotalPerpUPL string `json:"totalPerpUPL"`
|
||||||
|
TotalInitialMargin string `json:"totalInitialMargin"`
|
||||||
|
TotalMaintenanceMargin string `json:"totalMaintenanceMargin"`
|
||||||
|
Coins []CoinInfo `json:"coin"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CoinInfo struct {
|
||||||
|
Coin string `json:"coin"`
|
||||||
|
Equity string `json:"equity"`
|
||||||
|
UsdValue string `json:"usdValue"`
|
||||||
|
WalletBalance string `json:"walletBalance"`
|
||||||
|
Free string `json:"free"`
|
||||||
|
Locked string `json:"locked"`
|
||||||
|
BorrowAmount string `json:"borrowAmount"`
|
||||||
|
AvailableToBorrow string `json:"availableToBorrow"`
|
||||||
|
AvailableToWithdraw string `json:"availableToWithdraw"`
|
||||||
|
AccruedInterest string `json:"accruedInterest"`
|
||||||
|
TotalOrderIM string `json:"totalOrderIM"`
|
||||||
|
TotalPositionIM string `json:"totalPositionIM"`
|
||||||
|
TotalPositionMM string `json:"totalPositionMM"`
|
||||||
|
UnrealisedPnl string `json:"unrealisedPnl"`
|
||||||
|
CumRealisedPnl string `json:"cumRealisedPnl"`
|
||||||
|
Bonus string `json:"bonus"`
|
||||||
|
CollateralSwitch bool `json:"collateralSwitch"`
|
||||||
|
MarginCollateral bool `json:"marginCollateral"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CoinGreeks struct {
|
||||||
|
CoinGreeks []CoinGreekInfo `json:"coin"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CoinGreekInfo struct {
|
||||||
|
BaseCoin string `json:"baseCoin"`
|
||||||
|
TotalDelta string `json:"totalDelta"`
|
||||||
|
TotalGamma string `json:"totalGamma"`
|
||||||
|
TotalVega string `json:"totalVega"`
|
||||||
|
TotalTheta string `json:"totalTheta"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CollateralInfo struct {
|
||||||
|
List []CollateralItem `json:"list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CollateralItem struct {
|
||||||
|
Currency string `json:"currency"`
|
||||||
|
HourlyBorrowRate string `json:"hourlyBorrowRate"`
|
||||||
|
MaxBorrowingAmount string `json:"maxBorrowingAmount"`
|
||||||
|
FreeBorrowingLimit string `json:"freeBorrowingLimit"`
|
||||||
|
FreeBorrowAmount string `json:"freeBorrowAmount"`
|
||||||
|
BorrowAmount string `json:"borrowAmount"`
|
||||||
|
AvailableToBorrow string `json:"availableToBorrow"`
|
||||||
|
Borrowable bool `json:"borrowable"`
|
||||||
|
BorrowUsageRate string `json:"borrowUsageRate"`
|
||||||
|
MarginCollateral bool `json:"marginCollateral"`
|
||||||
|
CollateralSwitch bool `json:"collateralSwitch"`
|
||||||
|
CollateralRatio string `json:"collateralRatio"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BorrowHistory struct {
|
||||||
|
List []BorrowHistoryItem `json:"list"`
|
||||||
|
NextPageCursor string `json:"nextPageCursor"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BorrowHistoryItem struct {
|
||||||
|
Currency string `json:"currency"`
|
||||||
|
CreatedTime int64 `json:"createdTime"` // Using int64 for milliseconds timestamp
|
||||||
|
BorrowCost string `json:"borrowCost"`
|
||||||
|
HourlyBorrowRate string `json:"hourlyBorrowRate"`
|
||||||
|
InterestBearingBorrowSize string `json:"InterestBearingBorrowSize"`
|
||||||
|
CostExemption string `json:"costExemption"`
|
||||||
|
BorrowAmount string `json:"borrowAmount"`
|
||||||
|
UnrealisedLoss string `json:"unrealisedLoss"`
|
||||||
|
FreeBorrowedAmount string `json:"freeBorrowedAmount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type FeeRatesInfo struct {
|
||||||
|
Category string `json:"category"`
|
||||||
|
List []FeeRateItem `json:"list"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type FeeRateItem struct {
|
||||||
|
Symbol string `json:"symbol"`
|
||||||
|
BaseCoin string `json:"baseCoin"`
|
||||||
|
TakerFeeRate string `json:"takerFeeRate"`
|
||||||
|
MakerFeeRate string `json:"makerFeeRate"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AccountInfo struct {
|
||||||
|
UnifiedMarginStatus int `json:"unifiedMarginStatus"`
|
||||||
|
MarginMode string `json:"marginMode"`
|
||||||
|
DcpStatus string `json:"dcpStatus"`
|
||||||
|
TimeWindow int `json:"timeWindow"`
|
||||||
|
SmpGroup int `json:"smpGroup"`
|
||||||
|
IsMasterTrader bool `json:"isMasterTrader"`
|
||||||
|
UpdatedTime string `json:"updatedTime"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MMPStateInfo struct {
|
||||||
|
Result []MMPStateItem `json:"result"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MMPStateItem struct {
|
||||||
|
BaseCoin string `json:"baseCoin"`
|
||||||
|
MmpEnabled bool `json:"mmpEnabled"`
|
||||||
|
Window string `json:"window"`
|
||||||
|
FrozenPeriod string `json:"frozenPeriod"`
|
||||||
|
QtyLimit string `json:"qtyLimit"`
|
||||||
|
DeltaLimit string `json:"deltaLimit"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MarginMode struct {
|
||||||
|
Reasons []ReasonItem `json:"reasons"`
|
||||||
|
MmpFrozenUntil string `json:"mmpFrozenUntil"`
|
||||||
|
MmpFrozen bool `json:"mmpFrozen"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReasonItem struct {
|
||||||
|
ReasonCode string `json:"reasonCode"`
|
||||||
|
ReasonMsg string `json:"reasonMsg"`
|
||||||
|
}
|
||||||
|
|
|
@ -237,7 +237,7 @@ func (s *PositionClient) GetExecutionList(ctx context.Context, opts ...RequestOp
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
r := &request{
|
r := &request{
|
||||||
method: http.MethodPost,
|
method: http.MethodGet,
|
||||||
endpoint: "/v5/execution/list",
|
endpoint: "/v5/execution/list",
|
||||||
secType: secTypeSigned,
|
secType: secTypeSigned,
|
||||||
}
|
}
|
||||||
|
@ -259,7 +259,7 @@ func (s *PositionClient) GetClosePnl(ctx context.Context, opts ...RequestOption)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
r := &request{
|
r := &request{
|
||||||
method: http.MethodPost,
|
method: http.MethodGet,
|
||||||
endpoint: "/v5/position/closed-pnl",
|
endpoint: "/v5/position/closed-pnl",
|
||||||
secType: secTypeSigned,
|
secType: secTypeSigned,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue