mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-14 02:53:50 +00:00
binance: add futures exchange queries
This commit is contained in:
parent
6071c07073
commit
0f0539fe70
|
@ -169,6 +169,22 @@ func (e *Exchange) QueryTickers(ctx context.Context, symbol ...string) (map[stri
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Exchange) QueryMarkets(ctx context.Context) (types.MarketMap, error) {
|
func (e *Exchange) QueryMarkets(ctx context.Context) (types.MarketMap, error) {
|
||||||
|
|
||||||
|
if e.IsFutures {
|
||||||
|
exchangeInfo, err := e.futuresClient.NewExchangeInfoService().Do(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
markets := types.MarketMap{}
|
||||||
|
for _, symbol := range exchangeInfo.Symbols {
|
||||||
|
log.Info(symbol)
|
||||||
|
markets[symbol.Symbol] = toGlobalFuturesMarket(symbol)
|
||||||
|
}
|
||||||
|
|
||||||
|
return markets, nil
|
||||||
|
}
|
||||||
|
|
||||||
exchangeInfo, err := e.Client.NewExchangeInfoService().Do(ctx)
|
exchangeInfo, err := e.Client.NewExchangeInfoService().Do(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -416,7 +432,7 @@ func (e *Exchange) PlatformFeeCurrency() string {
|
||||||
return BNB
|
return BNB
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Exchange) QueryAccount(ctx context.Context) (*types.Account, error) {
|
func (e *Exchange) QuerySpotAccount(ctx context.Context) (*types.Account, error) {
|
||||||
account, err := e.Client.NewGetAccountService().Do(ctx)
|
account, err := e.Client.NewGetAccountService().Do(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -431,15 +447,61 @@ func (e *Exchange) QueryAccount(ctx context.Context) (*types.Account, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// binance use 15 -> 0.15%, so we convert it to 0.0015
|
|
||||||
a := &types.Account{
|
a := &types.Account{
|
||||||
|
AccountType: types.AccountTypeSpot, // TODO: types.AccountTypeMargin
|
||||||
MakerCommission: fixedpoint.NewFromFloat(float64(account.MakerCommission) * 0.0001),
|
MakerCommission: fixedpoint.NewFromFloat(float64(account.MakerCommission) * 0.0001),
|
||||||
TakerCommission: fixedpoint.NewFromFloat(float64(account.TakerCommission) * 0.0001),
|
TakerCommission: fixedpoint.NewFromFloat(float64(account.TakerCommission) * 0.0001),
|
||||||
|
CanDeposit: account.CanDeposit, // if can transfer in asset
|
||||||
|
CanTrade: account.CanTrade, // if can trade
|
||||||
|
CanWithdraw: account.CanWithdraw, // if can transfer out asset
|
||||||
}
|
}
|
||||||
a.UpdateBalances(balances)
|
a.UpdateBalances(balances)
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Exchange) QueryFuturesAccount(ctx context.Context) (*types.Account, error) {
|
||||||
|
account, err := e.futuresClient.NewGetAccountService().Do(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
accountBalances, err := e.futuresClient.NewGetBalanceService().Do(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var balances = map[string]types.Balance{}
|
||||||
|
for _, b := range accountBalances {
|
||||||
|
balances[b.Asset] = types.Balance{
|
||||||
|
Currency: b.Asset,
|
||||||
|
Available: fixedpoint.Must(fixedpoint.NewFromString(b.AvailableBalance)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
a := &types.Account{
|
||||||
|
AccountType: types.AccountTypeFutures,
|
||||||
|
FuturesInfo: toGlobalFuturesAccountInfo(account), // In binance GO api, Account define account info which mantain []*AccountAsset and []*AccountPosition.
|
||||||
|
CanDeposit: account.CanDeposit, // if can transfer in asset
|
||||||
|
CanTrade: account.CanTrade, // if can trade
|
||||||
|
CanWithdraw: account.CanWithdraw, // if can transfer out asset
|
||||||
|
}
|
||||||
|
a.UpdateBalances(balances)
|
||||||
|
return a, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Exchange) QueryAccount(ctx context.Context) (*types.Account, error) {
|
||||||
|
futuresAccount, err := e.QueryFuturesAccount(ctx)
|
||||||
|
if !(err != nil) {
|
||||||
|
return futuresAccount, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
account, err := e.QuerySpotAccount(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return account, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (e *Exchange) QueryOpenOrders(ctx context.Context, symbol string) (orders []types.Order, err error) {
|
func (e *Exchange) QueryOpenOrders(ctx context.Context, symbol string) (orders []types.Order, err error) {
|
||||||
if e.IsMargin {
|
if e.IsMargin {
|
||||||
req := e.Client.NewListMarginOpenOrdersService().Symbol(symbol)
|
req := e.Client.NewListMarginOpenOrdersService().Symbol(symbol)
|
||||||
|
@ -1207,6 +1269,18 @@ func (e *Exchange) QueryFundingRateHistory(ctx context.Context, symbol string) (
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Exchange) QueryPositionRisk(ctx context.Context, symbol string) (*types.PositionRisk, error) {
|
||||||
|
futuresClient := binance.NewFuturesClient(e.key, e.secret)
|
||||||
|
|
||||||
|
// when symbol is set, only one position risk will be returned.
|
||||||
|
risks, err := futuresClient.NewGetPositionRiskService().Symbol(symbol).Do(ctx)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return convertPositionRisk(risks[0])
|
||||||
|
}
|
||||||
|
|
||||||
func getLaunchDate() (time.Time, error) {
|
func getLaunchDate() (time.Time, error) {
|
||||||
// binance launch date 12:00 July 14th, 2017
|
// binance launch date 12:00 July 14th, 2017
|
||||||
loc, err := time.LoadLocation("Asia/Shanghai")
|
loc, err := time.LoadLocation("Asia/Shanghai")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user