Skip to content

Commit 6cd3f8a

Browse files
committed
Add portfolio margin borrow
1 parent 192efd3 commit 6cd3f8a

8 files changed

Lines changed: 126 additions & 2 deletions

File tree

cmd/portfolio.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func init() {
1919
portfolioCmd.AddCommand(portfolio.InitBalancesCmds()...)
2020
portfolioCmd.AddCommand(portfolio.InitBnbTransferCmds()...)
2121
portfolioCmd.AddCommand(portfolio.InitMarginCmds()...)
22+
portfolioCmd.AddCommand(portfolio.InitRepayFuturesNegativeBalanceCmds()...)
2223
portfolioCmd.AddCommand(portfolio.InitUMCmds()...)
2324

2425
RootCmd.AddCommand(portfolioCmd)

cmd/portfolio/margin.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ var (
1313
)
1414

1515
func InitMarginCmds() []*cobra.Command {
16+
marginCmd.AddCommand(margin.InitBorrowCmds()...)
1617
marginCmd.AddCommand(margin.InitInterestHistoryCmds()...)
1718
marginCmd.AddCommand(margin.InitLoanCmds()...)
1819
marginCmd.AddCommand(margin.InitOrderCmds()...)

cmd/portfolio/margin/borrow.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package margin
2+
3+
import (
4+
"fmt"
5+
"log"
6+
7+
"github.com/UnipayFI/binance-cli/config"
8+
"github.com/UnipayFI/binance-cli/exchange/portfolio/margin"
9+
"github.com/UnipayFI/binance-cli/printer"
10+
"github.com/spf13/cobra"
11+
)
12+
13+
var (
14+
borrowCmd = &cobra.Command{
15+
Use: "borrow",
16+
Short: "Borrow",
17+
Long: `Query margin max borrow and max withdraw.`,
18+
}
19+
20+
marginMaxBorrowCmd = &cobra.Command{
21+
Use: "max-borrow",
22+
Short: "Query margin max borrow",
23+
Long: `Query margin max borrow.
24+
25+
Docs Link: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Margin-Max-Borrow`,
26+
Run: marginMaxBorrow,
27+
}
28+
29+
marginMaxWithdrawCmd = &cobra.Command{
30+
Use: "max-withdraw",
31+
Short: "Query Margin Max Withdraw",
32+
Long: `Query Margin Max Withdraw.
33+
34+
Docs Link: https://developers.binance.com/docs/derivatives/portfolio-margin/account/Query-Margin-Max-Withdraw`,
35+
Run: marginMaxWithdraw,
36+
}
37+
)
38+
39+
func InitBorrowCmds() []*cobra.Command {
40+
marginMaxBorrowCmd.Flags().StringP("asset", "a", "", "asset")
41+
marginMaxBorrowCmd.MarkFlagRequired("asset")
42+
marginMaxWithdrawCmd.Flags().StringP("asset", "a", "", "asset")
43+
marginMaxWithdrawCmd.MarkFlagRequired("asset")
44+
borrowCmd.AddCommand(marginMaxBorrowCmd, marginMaxWithdrawCmd)
45+
return []*cobra.Command{borrowCmd}
46+
}
47+
48+
func marginMaxBorrow(cmd *cobra.Command, _ []string) {
49+
asset, _ := cmd.Flags().GetString("asset")
50+
client := margin.NewClient(config.Config.APIKey, config.Config.APISecret)
51+
borrow, err := client.MarginMaxBorrow(asset)
52+
if err != nil {
53+
log.Fatal(err)
54+
}
55+
printer.PrintTable(borrow)
56+
}
57+
58+
func marginMaxWithdraw(cmd *cobra.Command, _ []string) {
59+
asset, _ := cmd.Flags().GetString("asset")
60+
client := margin.NewClient(config.Config.APIKey, config.Config.APISecret)
61+
withdraw, err := client.MarginMaxWithdraw(asset)
62+
if err != nil {
63+
log.Fatal(err)
64+
}
65+
fmt.Printf("margin max withdraw: %s %s\n", withdraw, asset)
66+
}

docs/portfolio_margin.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Portfolio Margin Module
22

33
## Quick Navigation
4+
- [Borrow](#borrow)
5+
- [Query margin max borrow](#borrow--query-margin-max-borrow)
6+
- [Query Margin Max Withdraw](#borrow--query-margin-max-withdraw)
47
- [Interest](#interest---get-margin-borrowloan-interest-history)
58
- [Loan](#loan)
69
- [Loan exec](#loan---loan-exec)
@@ -16,6 +19,23 @@
1619
- [Query All Margin Account Orders](#order---query-all-margin-account-orders)
1720
- [Query Current Margin Open Order](#order---query-current-margin-open-order)
1821

22+
23+
## Borrow - Query margin max borrow
24+
Exec: `./binance-cli portfolio margin borrow max-borrow --asset=USDT`
25+
```shell
26+
┌───────────────┬──────────────┐
27+
│ AMOUNT │ BORROW LIMIT │
28+
├───────────────┼──────────────┤
29+
│ 7682.76407737 │ 400000.0 │
30+
└───────────────┴──────────────┘
31+
```
32+
33+
## Borrow - Query Margin Max Withdraw
34+
Exec: `./binance-cli portfolio margin borrow max-withdraw --asset=USDT`
35+
```shell
36+
margin max withdraw: 755.00477851 USDT
37+
```
38+
1939
## Interest - Get Margin Borrow/Loan Interest History
2040
Exec: `./binance-cli portfolio margin interest-history`
2141
```shell
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package margin
2+
3+
import (
4+
"context"
5+
6+
"github.com/adshao/go-binance/v2/portfolio"
7+
)
8+
9+
func (c *Client) MarginMaxBorrow(asset string) (*MaxBorrow, error) {
10+
borrow, err := portfolio.NewClient(c.ApiKey, c.ApiSecret).NewGetMarginMaxBorrowService().Asset(asset).Do(context.Background())
11+
if err != nil {
12+
return nil, err
13+
}
14+
return &MaxBorrow{
15+
Amount: borrow.Amount,
16+
BorrowLimit: borrow.BorrowLimit,
17+
}, nil
18+
}
19+
20+
func (c *Client) MarginMaxWithdraw(asset string) (string, error) {
21+
withdraw, err := portfolio.NewClient(c.ApiKey, c.ApiSecret).NewGetMarginMaxWithdrawService().Asset(asset).Do(context.Background())
22+
if err != nil {
23+
return "", err
24+
}
25+
return withdraw.Amount, nil
26+
}

exchange/portfolio/margin/model.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,13 @@ func (i *MarginInterestHistoryList) Row() [][]any {
8585
}
8686
return rows
8787
}
88+
89+
type MaxBorrow portfolio.MaxBorrow
90+
91+
func (m *MaxBorrow) Header() []string {
92+
return []string{"Amount", "Borrow Limit"}
93+
}
94+
95+
func (m *MaxBorrow) Row() [][]any {
96+
return [][]any{{m.Amount, m.BorrowLimit}}
97+
}

exchange/spot/dividend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,5 @@ func (c *Client) GetDividendHistory(asset string, startTime int64, endTime int64
2424
if err != nil {
2525
return nil, err
2626
}
27-
return DividendList(*dividends.Rows), nil
27+
return DividendList(dividends.Rows), nil
2828
}

exchange/spot/model.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func (o *OrderList) Row() [][]any {
6464
return rows
6565
}
6666

67-
type DividendList []binance.DividendResponse
67+
type DividendList []*binance.DividendResponse
6868

6969
func (d *DividendList) Header() []string {
7070
return []string{"ID", "Asset", "Amount", "Dividend Time", "Info", "Transaction ID"}

0 commit comments

Comments
 (0)