1、合仓

This commit is contained in:
2025-02-28 18:27:52 +08:00
parent 611d1df89c
commit a1a390aa9c
11 changed files with 578 additions and 197 deletions

View File

@ -9,7 +9,9 @@ import (
"go-admin/common/global"
"go-admin/common/helper"
"go-admin/models"
"go-admin/models/positiondto"
"go-admin/pkg/utility"
"go-admin/services/positionservice"
"strings"
"time"
@ -410,3 +412,64 @@ func cancelSymbolTakeAndStop(db *gorm.DB, mainId int, symbolType int) error {
return nil
}
// 保存仓位信息
func savePosition(db *gorm.DB, preOrder *DbModels.LinePreOrder) positiondto.PositionDto {
positionManage := positionservice.BinancePositionManagement{}
positionManage.Orm = db
positionReq := positiondto.PositionAddReq{
ApiId: preOrder.ApiId,
SymbolType: preOrder.SymbolType,
Symbol: preOrder.Symbol,
Price: utility.StrToDecimal(preOrder.Price),
Side: preOrder.Site,
Quantity: utility.StrToDecimal(preOrder.Num),
}
switch {
case preOrder.OrderType == 0 && preOrder.Site == "BUY",
preOrder.OrderType != 0 && preOrder.Site == "SELL":
positionReq.PositionSide = "LONG"
case preOrder.OrderType == 0 && preOrder.Site == "SELL",
preOrder.OrderType != 0 && preOrder.Site == "BUY":
positionReq.PositionSide = "SHORT"
}
//减仓单 数量为负
if preOrder.OrderType == 4 {
positionReq.Quantity = positionReq.Quantity.Mul(decimal.NewFromInt(-1))
}
positionData, err := positionManage.SavePosition(&positionReq, global.EXCHANGE_BINANCE)
if err != nil {
logger.Error("保存持仓信息失败, 主单号:%s, 错误信息:%v", preOrder.OrderSn, err)
}
return positionData
}
// 获取已开仓的主单id
func getOpenPositionMainOrderId(db *gorm.DB, newId, apiId, symbolType int, exchangeType, symbol, side string) ([]DbModels.LinePreOrder, error) {
mainOrders := make([]DbModels.LinePreOrder, 0)
if err := db.Model(&DbModels.LinePreOrder{}).
Where("api_id =? AND status>4 AND status<7 AND symbol=? AND symbol_type =? AND side= ? AND exchange_type=? AND id!=?",
apiId, symbol, symbolType, side, exchangeType, newId).
Select("id", "order_sn").Find(&mainOrders).Error; err != nil {
return nil, err
}
return mainOrders, nil
}
// 获取需要取消的订单号
func getOpenOrderSns(db *gorm.DB, mainIds []int) ([]string, error) {
result := []string{}
//委托中的订单
if err := db.Model(&DbModels.LinePreOrder{}).Where("main_id IN ? AND status=5", mainIds).Select("order_sn").Find(&result).Error; err != nil {
return nil, err
}
return result, nil
}