Files
exchange_go/services/binanceservice/models.go

244 lines
12 KiB
Go
Raw Normal View History

2025-02-06 11:14:33 +08:00
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 {
2025-07-26 09:09:09 +08:00
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市价止损
2025-02-06 11:14:33 +08:00
NewClientOrderId string `json:"newClientOrderId"`
2025-08-01 10:30:43 +08:00
ClosePosition bool `json:"closePosition"` //是否平仓
2025-02-06 11:14:33 +08:00
}
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 {
2025-02-11 14:49:16 +08:00
Id int `json:"id"` //订单id
2025-02-10 18:21:44 +08:00
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-合约"`
2025-02-11 14:49:16 +08:00
OrderSn string `json:"prderSn"`
2025-02-06 11:14:33 +08:00
}
// 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"`
}
2025-02-11 14:49:16 +08:00
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"`
}