Files
exchange_go/services/binanceservice/models.go
2025-07-26 09:09:09 +08:00

243 lines
12 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package binanceservice
import (
"errors"
"time"
"github.com/shopspring/decimal"
)
// OrderPlacementService 币安现货下单
type OrderPlacementService struct {
ApiId int `json:"api_id"` //api_id
Symbol string `json:"symbol"` //交易对
Side string `json:"side"` //购买方向
Type string `json:"type"` //下单类型 MARKET=市价 LIMIT=限价 TAKE_PROFIT_LIMIT=限价止盈 STOP_LOSS_LIMIT=限价止损
TimeInForce string `json:"timeInForce"` // 订单有效期,默认为 GTC (Good Till Cancelled)
Price decimal.Decimal `json:"price"` //限价单价
Quantity decimal.Decimal `json:"quantity"` //下单数量
NewClientOrderId string `json:"newClientOrderId"` //系统生成的订单号
StopPrice decimal.Decimal `json:"stopprice"` //止盈止损时需要
Rate string `json:"rate"` //下单百分比
}
func (s *OrderPlacementService) CheckParams() error {
if s.ApiId == 0 || s.Symbol == "" || s.Type == "" || s.NewClientOrderId == "" || s.Side == "" || s.Quantity.LessThan(decimal.Zero) {
return errors.New("缺失下单必要参数")
}
if s.Type == "LIMIT" && s.Price.LessThanOrEqual(decimal.Zero) {
return errors.New("缺失限价单参数price")
}
if s.Type == "TAKE_PROFIT_LIMIT" || s.Type == "STOP_LOSS_LIMIT" {
if s.StopPrice.LessThanOrEqual(decimal.Zero) {
return errors.New("缺失止盈止损订单参数stopprice")
}
}
return nil
}
// CancelOpenOrdersReq 撤销单一交易对的所有挂单
type CancelOpenOrdersReq struct {
ApiId int `json:"api_id"` //api_id
Symbol string `json:"symbol"` //交易对
}
func (r *CancelOpenOrdersReq) CheckParams() error {
if r.Symbol == "" {
return errors.New("缺失下单必要参数")
}
return nil
}
// EntryPriceResult 计算均价结果
type EntryPriceResult struct {
TotalNum decimal.Decimal `json:"total_num"` //总数量
EntryPrice decimal.Decimal `json:"entry_price"` //均价
FirstPrice decimal.Decimal `json:"first_price"` //主单的下单价格
TotalMoney decimal.Decimal `json:"total_money"` //总金额U
FirstId int `json:"first_id"` //主单id
}
type FutOrderPlace struct {
ApiId int `json:"api_id"` //api用户id
Symbol string `json:"symbol"` //合约交易对
Side string `json:"side"` //购买方向
PositionSide string `json:"position_side"` //持仓方向
Quantity decimal.Decimal `json:"quantity"` //数量
Price decimal.Decimal `json:"price"` //限价单价
SideType string `json:"side_type"` //现价或者市价
OpenOrder int `json:"open_order"` //是否开启限价单止盈止损
Profit decimal.Decimal `json:"profit"` //止盈价格
StopPrice decimal.Decimal `json:"stopprice"` //止损价格
OrderType string `json:"order_type"` //订单类型市价或限价MARKET(市价单) TAKE_PROFIT_MARKET市价止盈 TAKE_PROFIT(限价止盈) STOP (限价止损) STOP_MARKET市价止损
NewClientOrderId string `json:"newClientOrderId"`
}
func (s FutOrderPlace) CheckParams() error {
if s.ApiId == 0 || s.Symbol == "" || s.OrderType == "" || s.NewClientOrderId == "" || s.Side == "" || s.Quantity.LessThan(decimal.Zero) {
return errors.New("缺失下单必要参数")
}
if s.OrderType == "LIMIT" && s.Price.LessThan(decimal.Zero) {
return errors.New("缺失限价单参数price")
}
if s.OrderType == "TAKE_PROFIT_MARKET" || s.OrderType == "STOP_MARKET" {
if s.StopPrice.LessThanOrEqual(decimal.Zero) || s.Profit.LessThanOrEqual(decimal.Zero) {
return errors.New("缺失止盈止损订单参数stopprice")
}
}
return nil
}
// PositionRisk 用户持仓风险
type PositionRisk struct {
Symbol string `json:"symbol"`
PositionSide string `json:"positionSide"`
PositionAmt string `json:"positionAmt"`
EntryPrice string `json:"entryPrice"`
BreakEvenPrice string `json:"breakEvenPrice"`
MarkPrice string `json:"markPrice"`
UnRealizedProfit string `json:"unRealizedProfit"`
LiquidationPrice string `json:"liquidationPrice"`
IsolatedMargin string `json:"isolatedMargin"`
Notional string `json:"notional"`
MarginAsset string `json:"marginAsset"`
IsolatedWallet string `json:"isolatedWallet"`
InitialMargin string `json:"initialMargin"`
MaintMargin string `json:"maintMargin"`
PositionInitialMargin string `json:"positionInitialMargin"`
OpenOrderInitialMargin string `json:"openOrderInitialMargin"`
Adl int `json:"adl"`
BidNotional string `json:"bidNotional"`
AskNotional string `json:"askNotional"`
UpdateTime int64 `json:"updateTime"`
}
type FutOrderResp struct {
ClientOrderId string `json:"clientOrderId"`
CumQty string `json:"cumQty"`
CumQuote string `json:"cumQuote"`
ExecutedQty string `json:"executedQty"`
OrderId int `json:"orderId"`
AvgPrice string `json:"avgPrice"`
OrigQty string `json:"origQty"`
Price string `json:"price"`
ReduceOnly bool `json:"reduceOnly"`
Side string `json:"side"`
PositionSide string `json:"positionSide"`
Status string `json:"status"`
StopPrice string `json:"stopPrice"`
ClosePosition bool `json:"closePosition"`
Symbol string `json:"symbol"`
TimeInForce string `json:"timeInForce"`
Type string `json:"type"`
OrigType string `json:"origType"`
ActivatePrice string `json:"activatePrice"`
PriceRate string `json:"priceRate"`
UpdateTime int64 `json:"updateTime"`
WorkingType string `json:"workingType"`
PriceProtect bool `json:"priceProtect"`
PriceMatch string `json:"priceMatch"`
SelfTradePreventionMode string `json:"selfTradePreventionMode"`
GoodTillDate int64 `json:"goodTillDate"`
}
type HoldeData struct {
Id int `json:"id"` //主单id
UpdateTime time.Time `json:"updateTime" comment:"最后更新时间"`
Type string `json:"type" comment:"1-现货 2-合约"`
Symbol string `json:"symbol"`
AveragePrice decimal.Decimal `json:"averagePrice" comment:"均价"`
Side string `json:"side" comment:"持仓方向"`
TotalQuantity decimal.Decimal `json:"totalQuantity" comment:"持仓数量"`
TotalBuyPrice decimal.Decimal `json:"totalBuyPrice" comment:"总购买金额"`
PositionIncrementCount int `json:"positionIncrementCount"` //加仓次数
HedgeCloseCount int `json:"hedgeCloseCount" comment:"对冲平仓数量"`
TriggerStatus int `json:"triggerStatus" comment:"触发状态 平仓之后重置 0-未触发 1-触发中 2-触发完成"`
PositionStatus int `json:"positionStatus" comment:"加仓状态 0-未开始 1-未完成 2-已完成 3-失败"`
}
// OpenOrders 挂单信息
type OpenOrders struct {
AvgPrice string `json:"avgPrice"` // 平均成交价
ClientOrderId string `json:"clientOrderId"` // 用户自定义的订单号
CumQuote string `json:"cumQuote"` // 成交金额
ExecutedQty string `json:"executedQty"` // 成交量
OrderId int `json:"orderId"` // 系统订单号
OrigQty string `json:"origQty"` // 原始委托数量
OrigType string `json:"origType"` // 触发前订单类型
Price string `json:"price"` // 委托价格
ReduceOnly bool `json:"reduceOnly"` // 是否仅减仓
Side string `json:"side"` // 买卖方向
PositionSide string `json:"positionSide"` // 持仓方向
Status string `json:"status"` // 订单状态
StopPrice string `json:"stopPrice"` // 触发价,对`TRAILING_STOP_MARKET`无效
ClosePosition bool `json:"closePosition"` // 是否条件全平仓
Symbol string `json:"symbol"` // 交易对
Time int64 `json:"time"` // 订单时间
TimeInForce string `json:"timeInForce"` // 有效方法
Type string `json:"type"` // 订单类型
ActivatePrice string `json:"activatePrice"` // 跟踪止损激活价格, 仅`TRAILING_STOP_MARKET` 订单返回此字段
PriceRate string `json:"priceRate"` // 跟踪止损回调比例, 仅`TRAILING_STOP_MARKET` 订单返回此字段
UpdateTime int64 `json:"updateTime"` // 更新时间
WorkingType string `json:"workingType"` // 条件价格触发类型
PriceProtect bool `json:"priceProtect"` // 是否开启条件单触发保护
PriceMatch string `json:"priceMatch"` //price match mode
SelfTradePreventionMode string `json:"selfTradePreventionMode"` //self trading preventation mode
GoodTillDate int `json:"goodTillDate"` //order pre-set auot cancel time for TIF GTD order
}
// 待触发加仓单
type AddPositionList struct {
Id int `json:"id"` //订单id
Pid int `json:"pid"` //父级id
MainId int `json:"mainId"` //主单Id
ApiId int `json:"apiId"` //触发账户id
Symbol string `json:"symbol"` //交易对
Price decimal.Decimal `json:"price"` //触发价
Side string `json:"side"` //买卖方向
SymbolType int `json:"type" comment:"交易对类别 1-现货 2-合约"`
OrderSn string `json:"prderSn"`
}
// SpotAccountInfo 现货账户信息
type SpotAccountInfo struct {
MakerCommission int `json:"makerCommission"`
TakerCommission int `json:"takerCommission"`
BuyerCommission int `json:"buyerCommission"`
SellerCommission int `json:"sellerCommission"`
CommissionRates struct {
Maker string `json:"maker"`
Taker string `json:"taker"`
Buyer string `json:"buyer"`
Seller string `json:"seller"`
} `json:"commissionRates"`
CanTrade bool `json:"canTrade"`
CanWithdraw bool `json:"canWithdraw"`
CanDeposit bool `json:"canDeposit"`
Brokered bool `json:"brokered"`
RequireSelfTradePrevention bool `json:"requireSelfTradePrevention"`
PreventSor bool `json:"preventSor"`
UpdateTime int `json:"updateTime"`
AccountType string `json:"accountType"`
Balances []struct {
Asset string `json:"asset"`
Free string `json:"free"`
Locked string `json:"locked"`
} `json:"balances"`
Permissions []string `json:"permissions"`
Uid int `json:"uid"`
}
type ReduceListItem struct {
Id int `json:"id"`
ApiId int `json:"apiId"`
MainId int `json:"mainId"`
Pid int `json:"pid"`
Symbol string `json:"symbol"`
Price decimal.Decimal `json:"price"`
Side string `json:"side"`
Num decimal.Decimal `json:"num"`
OrderSn string `json:"orderSn"`
}