171 lines
5.9 KiB
Go
171 lines
5.9 KiB
Go
|
|
package interfaces
|
||
|
|
|
||
|
|
import (
|
||
|
|
"go-admin/models"
|
||
|
|
|
||
|
|
"github.com/shopspring/decimal"
|
||
|
|
)
|
||
|
|
|
||
|
|
// ExchangeInterface 交易所通用接口抽象层
|
||
|
|
type ExchangeInterface interface {
|
||
|
|
// 基础信息接口
|
||
|
|
GetExchangeName() string
|
||
|
|
GetExchangeInfo() (ExchangeInfoResponse, error)
|
||
|
|
|
||
|
|
// 现货市场接口
|
||
|
|
SpotInterface
|
||
|
|
|
||
|
|
// 合约接口(如果支持)
|
||
|
|
FuturesInterface
|
||
|
|
|
||
|
|
// WebSocket接口
|
||
|
|
WebSocketInterface
|
||
|
|
}
|
||
|
|
|
||
|
|
// SpotInterface 现货交易接口
|
||
|
|
type SpotInterface interface {
|
||
|
|
// 市场数据
|
||
|
|
GetSpotTicker24h(symbol string) (models.Ticker24, error)
|
||
|
|
GetSpotTickers() ([]models.TradeSet, error)
|
||
|
|
// 订单管理
|
||
|
|
PlaceSpotOrder(params SpotOrderParams) (SpotOrderResponse, error)
|
||
|
|
CancelSpotOrder(symbol, orderID string) error
|
||
|
|
GetSpotOrder(symbol, orderID string) (SpotOrderResponse, error)
|
||
|
|
GetSpotOrders(symbol string) ([]SpotOrderResponse, error)
|
||
|
|
}
|
||
|
|
|
||
|
|
// FuturesInterface 合约交易接口
|
||
|
|
type FuturesInterface interface {
|
||
|
|
// 市场数据
|
||
|
|
GetFuturesTicker24h(symbol string) (models.Ticker24, error)
|
||
|
|
GetFuturesTickers() ([]models.TradeSet, error)
|
||
|
|
// 订单管理
|
||
|
|
PlaceFuturesOrder(params FuturesOrderParams) (FuturesOrderResponse, error)
|
||
|
|
CancelFuturesOrder(symbol, orderID string) error
|
||
|
|
GetFuturesOrder(symbol, orderID string) (FuturesOrderResponse, error)
|
||
|
|
}
|
||
|
|
|
||
|
|
// WebSocketInterface WebSocket接口
|
||
|
|
type WebSocketInterface interface {
|
||
|
|
SubscribeSpotTicker(symbols []string, callback func(models.Ticker24, string, string)) error
|
||
|
|
SubscribeFuturesTicker(symbols []string, callback func(models.Ticker24, string, string)) error
|
||
|
|
SubscribeSpotDepth(symbols []string, callback func(models.DepthBin, string, string)) error
|
||
|
|
SubscribeSpotTrades(symbols []string, callback func(models.NewDealPush, string, string)) error
|
||
|
|
SubscribeKline(symbols []string, interval string, callback func(models.Kline, int, string, string)) error
|
||
|
|
|
||
|
|
Close() error
|
||
|
|
}
|
||
|
|
|
||
|
|
// 通用数据结构定义
|
||
|
|
type ExchangeInfoResponse struct {
|
||
|
|
Symbols []SymbolInfo `json:"symbols"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type SymbolInfo struct {
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
BaseAsset string `json:"baseAsset"`
|
||
|
|
QuoteAsset string `json:"quoteAsset"`
|
||
|
|
Status string `json:"status"`
|
||
|
|
MinQty string `json:"minQty"`
|
||
|
|
MaxQty string `json:"maxQty"`
|
||
|
|
StepSize string `json:"stepSize"`
|
||
|
|
MinPrice string `json:"minPrice"`
|
||
|
|
MaxPrice string `json:"maxPrice"`
|
||
|
|
TickSize string `json:"tickSize"`
|
||
|
|
MinNotional string `json:"minNotional"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// 现货订单参数
|
||
|
|
type SpotOrderParams struct {
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
Side string `json:"side"` // BUY/SELL
|
||
|
|
Type string `json:"type"` // MARKET/LIMIT
|
||
|
|
Quantity decimal.Decimal `json:"quantity"`
|
||
|
|
Price decimal.Decimal `json:"price,omitempty"`
|
||
|
|
TimeInForce string `json:"timeInForce,omitempty"` // GTC/IOC/FOK
|
||
|
|
NewClientOrderId string `json:"newClientOrderId,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// 合约订单参数
|
||
|
|
type FuturesOrderParams struct {
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
Side string `json:"side"` // BUY/SELL
|
||
|
|
Type string `json:"type"` // MARKET/LIMIT
|
||
|
|
Quantity decimal.Decimal `json:"quantity"`
|
||
|
|
Price decimal.Decimal `json:"price,omitempty"`
|
||
|
|
TimeInForce string `json:"timeInForce,omitempty"`
|
||
|
|
PositionSide string `json:"positionSide,omitempty"` // LONG/SHORT/BOTH
|
||
|
|
NewClientOrderId string `json:"newClientOrderId,omitempty"`
|
||
|
|
}
|
||
|
|
|
||
|
|
// 响应数据结构
|
||
|
|
type SpotAccountResponse struct {
|
||
|
|
Balances []SpotBalanceResponse `json:"balances"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type SpotBalanceResponse struct {
|
||
|
|
Asset string `json:"asset"`
|
||
|
|
Free string `json:"free"`
|
||
|
|
Locked string `json:"locked"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type SpotOrderResponse struct {
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
OrderId int64 `json:"orderId"`
|
||
|
|
ClientOrderId string `json:"clientOrderId"`
|
||
|
|
Price string `json:"price"`
|
||
|
|
OrigQty string `json:"origQty"`
|
||
|
|
ExecutedQty string `json:"executedQty"`
|
||
|
|
Status string `json:"status"`
|
||
|
|
TimeInForce string `json:"timeInForce"`
|
||
|
|
Type string `json:"type"`
|
||
|
|
Side string `json:"side"`
|
||
|
|
Time int64 `json:"time"`
|
||
|
|
UpdateTime int64 `json:"updateTime"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type FuturesAccountResponse struct {
|
||
|
|
TotalWalletBalance string `json:"totalWalletBalance"`
|
||
|
|
Assets []FuturesBalanceResponse `json:"assets"`
|
||
|
|
Positions []FuturesPositionResponse `json:"positions"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type FuturesBalanceResponse struct {
|
||
|
|
Asset string `json:"asset"`
|
||
|
|
WalletBalance string `json:"walletBalance"`
|
||
|
|
UnrealizedProfit string `json:"unrealizedProfit"`
|
||
|
|
MarginBalance string `json:"marginBalance"`
|
||
|
|
MaintMargin string `json:"maintMargin"`
|
||
|
|
InitialMargin string `json:"initialMargin"`
|
||
|
|
PositionInitialMargin string `json:"positionInitialMargin"`
|
||
|
|
OpenOrderInitialMargin string `json:"openOrderInitialMargin"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type FuturesPositionResponse struct {
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
PositionAmt string `json:"positionAmt"`
|
||
|
|
EntryPrice string `json:"entryPrice"`
|
||
|
|
MarkPrice string `json:"markPrice"`
|
||
|
|
UnrealizedProfit string `json:"unrealizedProfit"`
|
||
|
|
LiquidationPrice string `json:"liquidationPrice"`
|
||
|
|
Leverage string `json:"leverage"`
|
||
|
|
PositionSide string `json:"positionSide"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type FuturesOrderResponse struct {
|
||
|
|
Symbol string `json:"symbol"`
|
||
|
|
OrderId int64 `json:"orderId"`
|
||
|
|
ClientOrderId string `json:"clientOrderId"`
|
||
|
|
Price string `json:"price"`
|
||
|
|
OrigQty string `json:"origQty"`
|
||
|
|
ExecutedQty string `json:"executedQty"`
|
||
|
|
Status string `json:"status"`
|
||
|
|
TimeInForce string `json:"timeInForce"`
|
||
|
|
Type string `json:"type"`
|
||
|
|
Side string `json:"side"`
|
||
|
|
PositionSide string `json:"positionSide"`
|
||
|
|
ReduceOnly bool `json:"reduceOnly"`
|
||
|
|
Time int64 `json:"time"`
|
||
|
|
UpdateTime int64 `json:"updateTime"`
|
||
|
|
}
|