1
This commit is contained in:
@ -37,6 +37,8 @@ type LinePreOrder struct {
|
||||
Child []LinePreOrder `json:"child" gorm:"-"`
|
||||
ApiName string `json:"api_name" gorm:"->"`
|
||||
ChildNum int64 `json:"child_num" gorm:"->"`
|
||||
AddPositionStatus int `json:"add_position_status" gorm:"->"`
|
||||
ReduceStatus int `json:"reduce_status" gorm:"->"`
|
||||
// LinePreOrder 线上预埋单\
|
||||
models.ModelTime
|
||||
models.ControlBy
|
||||
|
||||
@ -1312,15 +1312,20 @@ func (e *LinePreOrder) SpotClosePosition(position *dto.ClosePosition, errs *[]er
|
||||
//查询已经开仓的现货交易对
|
||||
var spotList []models.LinePreOrder
|
||||
if position.Symbol == "" { //全平
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND status = 6 AND pid = 0 AND order_type = 0", position.ApiId).Find(&spotList)
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND symbol_type =1 AND status = 6 AND pid = 0 AND order_type = 0", position.ApiId).Find(&spotList)
|
||||
} else {
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND symbol = ? AND status = 6 AND pid = 0 AND order_type = 0", position.ApiId, position.Symbol).Find(&spotList)
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND symbol_type =1 AND symbol = ? AND status = 6 AND pid = 0 AND order_type = 0", position.ApiId, position.Symbol).Find(&spotList)
|
||||
}
|
||||
if len(spotList) <= 0 {
|
||||
*errs = append(*errs, errors.New(fmt.Sprintf("api_id:%d 没有可平仓的交易对", position.ApiId)))
|
||||
}
|
||||
api := binanceservice.SpotRestApi{}
|
||||
|
||||
if len(spotList) == 0 {
|
||||
*errs = append(*errs, errors.New("无仓可平"))
|
||||
return
|
||||
}
|
||||
|
||||
for _, list := range spotList {
|
||||
for _, balance := range balanceInfo.Balances {
|
||||
suffix := utility.ReplaceSuffix(list.Symbol, list.QuoteSymbol, "")
|
||||
@ -1406,9 +1411,9 @@ func (e *LinePreOrder) FutClosePosition(position *dto.ClosePosition, errs *[]err
|
||||
//查询已经开仓的合约交易对
|
||||
var futList []models.LinePreOrder
|
||||
if position.Symbol == "" {
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND status = 6 AND order_type =0 AND main_id = 0", position.ApiId).Find(&futList)
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND status = 6 AND symbol_type =2 AND order_type =0 AND main_id = 0", position.ApiId).Find(&futList)
|
||||
} else {
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND symbol = ? AND status = 6 AND order_type = 0 AND main_id = 0", position.ApiId, position.Symbol).Find(&futList)
|
||||
e.Orm.Model(&models.LinePreOrder{}).Where("api_id = ? AND symbol = ? AND symbol_type =2 AND status = 6 AND order_type = 0 AND main_id = 0", position.ApiId, position.Symbol).Find(&futList)
|
||||
}
|
||||
if len(futList) <= 0 {
|
||||
*errs = append(*errs, fmt.Errorf("api_id:%d 没有可平仓的交易对", position.ApiId))
|
||||
@ -1417,6 +1422,11 @@ func (e *LinePreOrder) FutClosePosition(position *dto.ClosePosition, errs *[]err
|
||||
|
||||
api := binanceservice.FutRestApi{}
|
||||
|
||||
if len(futList) == 0 {
|
||||
*errs = append(*errs, errors.New("无仓可平"))
|
||||
return
|
||||
}
|
||||
|
||||
for _, list := range futList {
|
||||
risks, err := api.GetPositionV3(&apiUserInfo, list.Symbol)
|
||||
if err != nil {
|
||||
|
||||
@ -276,6 +276,16 @@ func getFuturesPositionNum(apiUserInfo DbModels.LineApiUser, preOrder *DbModels.
|
||||
// 平仓单成交
|
||||
func handleClosePosition(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
removeFutLossAndAddPosition(preOrder)
|
||||
|
||||
futApi := FutRestApi{}
|
||||
apiUserInfo, _ := GetApiInfo(preOrder.ApiId)
|
||||
|
||||
if apiUserInfo.Id > 0 {
|
||||
if err := futApi.CancelAllFutOrder(apiUserInfo, preOrder.Symbol); err != nil {
|
||||
logger.Errorf("止盈单成功 取消其它订单失败 订单号:%s:", err)
|
||||
}
|
||||
}
|
||||
|
||||
ids := []int{preOrder.Pid, preOrder.MainId}
|
||||
//主单止盈成交
|
||||
if err := db.Model(&DbModels.LinePreOrder{}).Where("id IN ?", ids).Update("status", 9).Error; err != nil {
|
||||
@ -286,6 +296,20 @@ func handleClosePosition(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
// 止损单成交
|
||||
func handleStopLoss(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
removeFutLossAndAddPosition(preOrder)
|
||||
|
||||
spotApi := SpotRestApi{}
|
||||
apiUserInfo, _ := GetApiInfo(preOrder.ApiId)
|
||||
|
||||
if apiUserInfo.Id > 0 {
|
||||
req := CancelOpenOrdersReq{
|
||||
Symbol: preOrder.Symbol,
|
||||
ApiId: preOrder.ApiId,
|
||||
}
|
||||
if err := spotApi.CancelOpenOrders(db, req); err != nil {
|
||||
logger.Errorf("止盈单成功 取消其它订单失败 订单号:%s:", err)
|
||||
}
|
||||
}
|
||||
|
||||
ids := []int{preOrder.Pid, preOrder.MainId}
|
||||
//主单止损成交
|
||||
if err := db.Model(&DbModels.LinePreOrder{}).Where("id IN ?", ids).Update("status", 9).Error; err != nil {
|
||||
@ -297,6 +321,15 @@ func handleStopLoss(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
func handleTakeProfit(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
removeFutLossAndAddPosition(preOrder)
|
||||
|
||||
futApi := FutRestApi{}
|
||||
apiUserInfo, _ := GetApiInfo(preOrder.ApiId)
|
||||
|
||||
if apiUserInfo.Id > 0 {
|
||||
if err := futApi.CancelAllFutOrder(apiUserInfo, preOrder.Symbol); err != nil {
|
||||
logger.Errorf("止盈单成功 取消其它订单失败 订单号:%s:", err)
|
||||
}
|
||||
}
|
||||
|
||||
ids := []int{preOrder.Pid, preOrder.MainId}
|
||||
//主单止盈成交
|
||||
if err := db.Model(&DbModels.LinePreOrder{}).Where("id IN ? AND order_type=0", ids).Update("status", 9).Error; err != nil {
|
||||
|
||||
@ -136,6 +136,19 @@ func handleOrderByType(db *gorm.DB, preOrder *DbModels.LinePreOrder, orderStatus
|
||||
if err := db.Model(&DbModels.LinePreOrder{}).Where("main_id =? AND status =0", preOrder.MainId).Update("status", 4).Error; err != nil {
|
||||
logger.Errorf("主单止损回调 订单号:%s 修改主单状态失败:%v", preOrder.OrderSn, err)
|
||||
}
|
||||
|
||||
spotApi := SpotRestApi{}
|
||||
apiUserInfo, _ := GetApiInfo(preOrder.ApiId)
|
||||
|
||||
if apiUserInfo.Id > 0 {
|
||||
req := CancelOpenOrdersReq{
|
||||
Symbol: preOrder.Symbol,
|
||||
ApiId: preOrder.ApiId,
|
||||
}
|
||||
if err := spotApi.CancelOpenOrders(db, req); err != nil {
|
||||
logger.Errorf("止盈单成功 取消其它订单失败 订单号:%s:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -361,16 +374,41 @@ func handleMainOrderClosePosition(db *gorm.DB, preOrder *DbModels.LinePreOrder)
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
removeSpotLossAndAddPosition(preOrder)
|
||||
|
||||
spotApi := SpotRestApi{}
|
||||
apiUserInfo, _ := GetApiInfo(preOrder.ApiId)
|
||||
|
||||
if apiUserInfo.Id > 0 {
|
||||
req := CancelOpenOrdersReq{
|
||||
Symbol: preOrder.Symbol,
|
||||
ApiId: preOrder.ApiId,
|
||||
}
|
||||
if err := spotApi.CancelOpenOrders(db, req); err != nil {
|
||||
logger.Errorf("止盈单成功 取消其它订单失败 订单号:%s:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 止盈成交
|
||||
func handleSpotTakeProfitFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
removeSpotLossAndAddPosition(preOrder)
|
||||
|
||||
spotApi := SpotRestApi{}
|
||||
apiUserInfo, _ := GetApiInfo(preOrder.ApiId)
|
||||
|
||||
if apiUserInfo.Id > 0 {
|
||||
req := CancelOpenOrdersReq{
|
||||
Symbol: preOrder.Symbol,
|
||||
ApiId: preOrder.ApiId,
|
||||
}
|
||||
if err := spotApi.CancelOpenOrders(db, req); err != nil {
|
||||
logger.Errorf("止盈单成功 取消其它订单失败 订单号:%s:", err)
|
||||
}
|
||||
}
|
||||
|
||||
db.Transaction(func(tx *gorm.DB) error {
|
||||
ids := []int{preOrder.Pid, preOrder.MainId}
|
||||
if err := db.Model(&DbModels.LinePreOrder{}).Where("id IN ? AND status =6 AND order_type=0", ids).Update("status", 9).Error; err != nil {
|
||||
|
||||
Reference in New Issue
Block a user