1、合仓
This commit is contained in:
@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user