1bug修复
This commit is contained in:
@ -295,7 +295,7 @@ func (req LineAddPreOrderReq) Valid() error {
|
||||
return errors.New("主单减仓数量百分比不能为空")
|
||||
}
|
||||
|
||||
if req.ReducePriceRatio.IsZero() || req.ReducePriceRatio.Cmp(decimal.NewFromInt(100)) >= 0 {
|
||||
if req.PricePattern != "mixture" && (req.ReducePriceRatio.IsZero() || req.ReducePriceRatio.Cmp(decimal.NewFromInt(100)) >= 0) {
|
||||
return errors.New("主单减仓价格百分比错误")
|
||||
}
|
||||
|
||||
@ -447,7 +447,7 @@ func (req LineBatchAddPreOrderReq) CheckParams() error {
|
||||
return errors.New("主单减仓数量百分比不能为空")
|
||||
}
|
||||
|
||||
if req.ReducePriceRatio.Cmp(decimal.Zero) <= 0 || req.ReducePriceRatio.Cmp(decimal.NewFromInt(100)) >= 0 {
|
||||
if req.PricePattern != "mixture" && (req.ReducePriceRatio.Cmp(decimal.Zero) <= 0 || req.ReducePriceRatio.Cmp(decimal.NewFromInt(100)) >= 0) {
|
||||
return errors.New("主单减仓价格百分比错误")
|
||||
}
|
||||
|
||||
|
||||
@ -592,6 +592,7 @@ func (e *LinePreOrder) AddPreOrder(req *dto.LineAddPreOrderReq, apiUserIds []int
|
||||
|
||||
preOrderStatus := models.LinePreOrderStatus{}
|
||||
preOrderStatus.OrderSn = AddOrder.OrderSn
|
||||
mainPrice := utility.StringToDecimal(AddOrder.Price)
|
||||
|
||||
//订单配置信息
|
||||
preOrderExts := make([]models.LinePreOrderExt, 0)
|
||||
@ -606,6 +607,12 @@ func (e *LinePreOrder) AddPreOrder(req *dto.LineAddPreOrderReq, apiUserIds []int
|
||||
TpTpPriceRatio: req.ProfitTpTpPriceRatio,
|
||||
TpSlPriceRatio: req.ProfitTpSlPriceRatio,
|
||||
}
|
||||
|
||||
if req.PricePattern == "mixture" {
|
||||
defultExt.TakeProfitRatio = mainPrice.Div(utility.StrToDecimal(req.Profit)).Sub(decimal.NewFromInt(1)).Abs().Mul(decimal.NewFromInt(100)).Truncate(2)
|
||||
defultExt.StopLossRatio = mainPrice.Div(req.StopLoss).Sub(decimal.NewFromInt(1)).Abs().Mul(decimal.NewFromInt(100)).Truncate(2)
|
||||
}
|
||||
|
||||
//减仓单
|
||||
defultExt2 := models.LinePreOrderExt{
|
||||
AddType: 2,
|
||||
@ -617,17 +624,12 @@ func (e *LinePreOrder) AddPreOrder(req *dto.LineAddPreOrderReq, apiUserIds []int
|
||||
TakeProfitNumRatio: decimal.NewFromInt(100), //减仓止盈默认100%
|
||||
StopLossRatio: req.ReduceStopLossRatio,
|
||||
}
|
||||
mainPrice := utility.StringToDecimal(AddOrder.Price)
|
||||
mainAmount := utility.SafeDiv(buyPrice, mainPrice)
|
||||
defultExt.TotalAfter = utility.StrToDecimal(AddOrder.Num).Truncate(int32(tradeSet.AmountDigit))
|
||||
defultExt2.TotalBefore = defultExt.TotalAfter
|
||||
|
||||
default2NumPercent := utility.SafeDiv(decimal.NewFromInt(100).Sub(req.ReduceNumRatio), decimal.NewFromInt(100))
|
||||
defultExt2.TotalAfter = mainAmount.Mul(default2NumPercent).Truncate(int32(tradeSet.AmountDigit))
|
||||
defultExt2.ReTakeRatio = utility.SafeDiv(req.ReducePriceRatio, default2NumPercent).Truncate(2)
|
||||
|
||||
preOrderExts = append(preOrderExts, defultExt)
|
||||
preOrderExts = append(preOrderExts, defultExt2)
|
||||
|
||||
calculateResp := dto.CalculateBreakEvenRatioResp{}
|
||||
mainParam := dto.CalculateBreakEevenRatioReq{
|
||||
@ -643,15 +645,22 @@ func (e *LinePreOrder) AddPreOrder(req *dto.LineAddPreOrderReq, apiUserIds []int
|
||||
AddPositionVal: req.ReduceNumRatio,
|
||||
}
|
||||
|
||||
if req.PricePattern == "mixture" {
|
||||
mainParam.LossEndPercent = mainPrice.Div(req.ReducePriceRatio).Sub(decimal.NewFromInt(1)).Abs().Mul(decimal.NewFromInt(100)).Truncate(2)
|
||||
defultExt2.PriceRatio = mainParam.LossEndPercent
|
||||
}
|
||||
|
||||
//计算减仓后
|
||||
mainParam.LossEndPercent = req.ReducePriceRatio
|
||||
defultExt2.ReTakeRatio = utility.SafeDiv(mainParam.LossEndPercent, default2NumPercent).Truncate(2)
|
||||
mainParam.RemainingQuantity = mainAmount
|
||||
e.CalculateBreakEvenRatio(&mainParam, &calculateResp, tradeSet)
|
||||
mainParam.RemainingQuantity = calculateResp.RemainingQuantity //mainAmount.Mul(decimal.NewFromInt(100).Sub(req.ReduceNumRatio).Div(decimal.NewFromInt(100))).Truncate(int32(tradeSet.AmountDigit))
|
||||
mainParam.TotalLossAmountU = calculateResp.TotalLossAmountU //buyPrice.Mul(req.ReducePriceRatio.Div(decimal.NewFromInt(100)).Truncate(4)).Truncate(int32(tradeSet.PriceDigit))
|
||||
req.ReduceReTakeProfitRatio = calculateResp.Ratio
|
||||
mainParam.LossBeginPercent = req.ReducePriceRatio
|
||||
mainParam.LossBeginPercent = mainParam.LossEndPercent
|
||||
// defultExt.ReTakeRatio = calculateResp.Ratio
|
||||
preOrderExts = append(preOrderExts, defultExt)
|
||||
preOrderExts = append(preOrderExts, defultExt2)
|
||||
|
||||
for index, addPosition := range req.Ext {
|
||||
ext := models.LinePreOrderExt{
|
||||
@ -1069,6 +1078,8 @@ func makeFuturesTakeAndReduce(preOrder *models.LinePreOrder, ext models.LinePreO
|
||||
mainId = preOrder.MainId
|
||||
}
|
||||
|
||||
fmt.Println("take", ext.TakeProfitRatio.String())
|
||||
fmt.Println("boo", ext.TakeProfitRatio.Cmp(decimal.Zero))
|
||||
if ext.TakeProfitRatio.Cmp(decimal.Zero) > 0 {
|
||||
// 止盈单
|
||||
profitOrder := models.LinePreOrder{}
|
||||
@ -2237,15 +2248,18 @@ func (e *LinePreOrder) GenerateOrder(req *dto.LineAddPreOrderReq) error {
|
||||
AddPositionVal: req.ReduceNumRatio,
|
||||
}
|
||||
|
||||
if req.PricePattern == "mixture" {
|
||||
mainParam.LossEndPercent = price.Div(req.ReducePriceRatio).Sub(decimal.NewFromInt(1)).Abs().Mul(decimal.NewFromInt(100)).Truncate(2)
|
||||
}
|
||||
|
||||
//计算减仓后
|
||||
mainParam.LossEndPercent = req.ReducePriceRatio
|
||||
mainParam.RemainingQuantity = mainAmount
|
||||
mainParam.AddType = 2
|
||||
e.CalculateBreakEvenRatio(&mainParam, &calculateResp, tradeSet)
|
||||
mainParam.RemainingQuantity = calculateResp.RemainingQuantity
|
||||
mainParam.TotalLossAmountU = calculateResp.TotalLossAmountU
|
||||
req.ReduceReTakeProfitRatio = calculateResp.Ratio
|
||||
lossBeginPercent = req.ReducePriceRatio
|
||||
lossBeginPercent = mainParam.LossEndPercent
|
||||
|
||||
//顺序排序
|
||||
sort.Slice(req.Ext, func(i, j int) bool {
|
||||
|
||||
Reference in New Issue
Block a user