1
This commit is contained in:
@ -37,7 +37,7 @@ func ChangeFutureOrder(mapData map[string]interface{}) {
|
||||
return
|
||||
}
|
||||
|
||||
if originOrderSn != "" {
|
||||
if originOrderSn != nil && originOrderSn != "" {
|
||||
orderSn = originOrderSn
|
||||
}
|
||||
|
||||
@ -375,6 +375,17 @@ func handleFutMainOrderFilled(db *gorm.DB, preOrder *models.LinePreOrder) {
|
||||
return
|
||||
}
|
||||
|
||||
if tradeSet.Coin == "" {
|
||||
logger.Errorf("获取交易对配置失败, 回调订单号:%s", preOrder.OrderSn)
|
||||
return
|
||||
}
|
||||
|
||||
//预生成加仓单
|
||||
shouldReturn := createFutPreAddPosition(preOrder, db, tradeSet)
|
||||
if shouldReturn {
|
||||
return
|
||||
}
|
||||
|
||||
if err := db.Model(&DbModels.LinePreOrder{}).
|
||||
Where("pid = ? AND order_type > 0 AND status = '0' ", preOrder.Id).
|
||||
Find(&orders).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
@ -413,6 +424,65 @@ func handleFutMainOrderFilled(db *gorm.DB, preOrder *models.LinePreOrder) {
|
||||
}
|
||||
}
|
||||
|
||||
// 生成加仓单
|
||||
func createFutPreAddPosition(preOrder *DbModels.LinePreOrder, db *gorm.DB, tradeSet models2.TradeSet) bool {
|
||||
//主单类型
|
||||
if preOrder.OrderCategory == 1 {
|
||||
orderExts, err := GetOrderExts(db, preOrder.Id)
|
||||
|
||||
if err != nil {
|
||||
logger.Errorf("预生成加仓单失败, 回调订单号:%s 获取主单拓展配置失败:%v", preOrder.OrderSn, err)
|
||||
return true
|
||||
}
|
||||
|
||||
price := utility.StrToDecimal(preOrder.Price)
|
||||
for _, v := range orderExts {
|
||||
if v.OrderId == 0 {
|
||||
var data DbModels.LinePreOrder
|
||||
|
||||
copier.Copy(&data, &v)
|
||||
|
||||
data.Id = 0
|
||||
data.Pid = preOrder.Id
|
||||
data.OrderSn = utility.Int64ToString(snowflakehelper.GetOrderId())
|
||||
data.MainId = preOrder.Id
|
||||
data.CreatedAt = time.Now()
|
||||
data.MainOrderType = v.AddPositionOrderType
|
||||
data.Status = 0
|
||||
data.OrderCategory = 3
|
||||
var percentage decimal.Decimal
|
||||
|
||||
if data.Site == "BUY" {
|
||||
percentage = decimal.NewFromInt(1).Add(v.AddPositionPriceRatio.Div(decimal.NewFromInt(100)))
|
||||
} else {
|
||||
percentage = decimal.NewFromInt(1).Sub(v.AddPositionPriceRatio.Div(decimal.NewFromInt(100)))
|
||||
}
|
||||
data.Price = price.Mul(percentage).Truncate(int32(tradeSet.PriceDigit)).String()
|
||||
|
||||
err := db.Transaction(func(tx *gorm.DB) error {
|
||||
if err2 := tx.Create(&data).Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
|
||||
v.OrderId = data.Id
|
||||
if err2 := tx.Model(&v).Update("order_id", data.Id).Error; err2 != nil {
|
||||
return err2
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
logger.Errorf("预生成加仓单失败, 回调订单号:%s 预生成加仓单失败:%v", preOrder.OrderSn, err)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
// 构建合约止盈、减仓单
|
||||
func makeFuturesTakeAndReduce(preOrder *DbModels.LinePreOrder, db *gorm.DB, tradeSet models2.TradeSet, orders []DbModels.LinePreOrder) ([]DbModels.LinePreOrder, error) {
|
||||
ext := models.LinePreOrderExt{}
|
||||
@ -475,6 +545,12 @@ func makeFuturesTakeAndReduce(preOrder *DbModels.LinePreOrder, db *gorm.DB, trad
|
||||
stopOrder.Rate = ext.ReducePriceRatio.String()
|
||||
stopOrder.Num = num.String()
|
||||
|
||||
if ext.ReduceNumRatio.Cmp(decimal.Zero) > 0 {
|
||||
stopOrder.Num = num.Mul(ext.ReduceNumRatio.Div(decimal.NewFromInt(100))).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
} else {
|
||||
stopOrder.Num = num.String()
|
||||
}
|
||||
|
||||
orders = append(orders, stopOrder)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user