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"`
 | |
| }
 |