1\交易对返回价格
This commit is contained in:
@ -10,7 +10,6 @@ import (
|
||||
"go-admin/common/global"
|
||||
"go-admin/common/helper"
|
||||
"go-admin/models"
|
||||
"go-admin/pkg/utility"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@ -233,7 +232,7 @@ func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRes
|
||||
}
|
||||
|
||||
price := reduceOrder.Price.Mul(decimal.NewFromInt(1).Sub(setting.ReducePremium.Div(decimal.NewFromInt(100)))).Truncate(int32(tradeSet.PriceDigit))
|
||||
num := utility.StrToDecimal(takeOrder.Num).Truncate(int32(tradeSet.AmountDigit))
|
||||
num := reduceOrder.Num.Truncate(int32(tradeSet.AmountDigit))
|
||||
var positionSide string
|
||||
|
||||
if reduceOrder.Side == "BUY" {
|
||||
@ -338,7 +337,7 @@ func FutAddPositionTrigger(db *gorm.DB, v *AddPositionList, item string, futApi
|
||||
return
|
||||
}
|
||||
|
||||
price := v.Price
|
||||
price := v.Price.Truncate(int32(tradeSet.PriceDigit))
|
||||
num, _ := decimal.NewFromString(preOrder.Num)
|
||||
|
||||
if setting.AddPositionPremium.Cmp(decimal.Zero) > 0 {
|
||||
@ -351,7 +350,7 @@ func FutAddPositionTrigger(db *gorm.DB, v *AddPositionList, item string, futApi
|
||||
Side: v.Side,
|
||||
OrderType: "LIMIT",
|
||||
Price: price,
|
||||
Quantity: num,
|
||||
Quantity: num.Truncate(int32(tradeSet.AmountDigit)),
|
||||
NewClientOrderId: v.OrderSn,
|
||||
}
|
||||
preOrderVal, _ := sonic.MarshalString(&v)
|
||||
|
||||
@ -196,7 +196,7 @@ func handleReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
takeProfitOrder.Rate = ext.ReduceTakeProfitRatio.String()
|
||||
//止盈需要累加之前的亏损
|
||||
if totalLossAmountU.Cmp(decimal.Zero) > 0 {
|
||||
percent := totalLossAmountU.Div(totalNum).Div(price).Sub(decimal.NewFromInt(1)).Abs()
|
||||
percent := totalLossAmountU.Div(totalNum).Div(price).Abs()
|
||||
takeProfitOrder.Rate = percent.Mul(decimal.NewFromInt(100)).Add(ext.ReduceTakeProfitRatio).Truncate(2).String()
|
||||
}
|
||||
|
||||
@ -241,7 +241,7 @@ func handleReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
//加仓待触发
|
||||
addPositionOrder := DbModels.LinePreOrder{}
|
||||
|
||||
if err := db.Model(&addPositionOrder).Where("main_id =? AND order_category=3 AND status=0", preOrder.MainId).First(addPositionOrder).Error; err != nil {
|
||||
if err := db.Model(&addPositionOrder).Where("main_id =? AND order_category=3 AND status=0", preOrder.MainId).First(&addPositionOrder).Error; err != nil {
|
||||
logger.Errorf("handleMainReduceFilled 获取加仓单失败,订单号:%s err:%v", preOrder.OrderSn, err)
|
||||
return
|
||||
}
|
||||
@ -301,7 +301,8 @@ func getFuturesPositionAvailableQuantity(db *gorm.DB, apiUserInfo DbModels.LineA
|
||||
if totalNum.Cmp(decimal.Zero) <= 0 {
|
||||
totalNum = utility.StrToDecimal(preOrder.Num)
|
||||
}
|
||||
return totalNum
|
||||
|
||||
return totalNum.Truncate(int32(tradeSet.AmountDigit))
|
||||
}
|
||||
|
||||
// 获取币安合约持仓
|
||||
@ -524,16 +525,16 @@ func createFutPreAddPosition(preOrder *DbModels.LinePreOrder, db *gorm.DB, trade
|
||||
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)))
|
||||
} else {
|
||||
percentage = decimal.NewFromInt(1).Add(v.AddPositionPriceRatio.Div(decimal.NewFromInt(100)))
|
||||
}
|
||||
|
||||
dataPrice := price.Mul(percentage).Truncate(int32(tradeSet.PriceDigit))
|
||||
data.Price = dataPrice.String()
|
||||
|
||||
if v.AddPositionType == 1 {
|
||||
data.Num = preOrder.Num
|
||||
data.Num = utility.StrToDecimal(preOrder.Num).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
data.BuyPrice = "0"
|
||||
} else {
|
||||
data.BuyPrice = v.AddPositionVal.String()
|
||||
@ -588,6 +589,7 @@ func makeFuturesTakeAndReduce(preOrder *DbModels.LinePreOrder, db *gorm.DB, trad
|
||||
profitOrder := models.LinePreOrder{}
|
||||
copier.Copy(&profitOrder, preOrder)
|
||||
|
||||
profitOrder.Id = 0
|
||||
profitOrder.OrderSn = strconv.FormatInt(snowflakehelper.GetOrderId(), 10)
|
||||
profitOrder.Pid = preOrder.Id
|
||||
profitOrder.OrderType = 1
|
||||
@ -598,7 +600,7 @@ func makeFuturesTakeAndReduce(preOrder *DbModels.LinePreOrder, db *gorm.DB, trad
|
||||
|
||||
//止盈需要累加之前的亏损
|
||||
if totalLossAmountU.Cmp(decimal.Zero) > 0 {
|
||||
percent := totalLossAmountU.Div(num).Div(price).Sub(decimal.NewFromInt(1)).Abs()
|
||||
percent := totalLossAmountU.Div(num).Div(price).Abs()
|
||||
profitOrder.Rate = percent.Mul(decimal.NewFromInt(100)).Add(ext.TakeProfitRatio).Truncate(2).String()
|
||||
}
|
||||
|
||||
@ -617,6 +619,7 @@ func makeFuturesTakeAndReduce(preOrder *DbModels.LinePreOrder, db *gorm.DB, trad
|
||||
stopOrder := models.LinePreOrder{}
|
||||
copier.Copy(&stopOrder, preOrder)
|
||||
|
||||
stopOrder.Id = 0
|
||||
stopOrder.OrderSn = strconv.FormatInt(snowflakehelper.GetOrderId(), 10)
|
||||
stopOrder.Pid = preOrder.Id
|
||||
stopOrder.MainId = ext.MainOrderId
|
||||
|
||||
@ -83,6 +83,13 @@ func SpotOrderLock(db *gorm.DB, v *dto.PreOrderRedisList, item string, spotApi S
|
||||
return
|
||||
}
|
||||
|
||||
//判断是否有已触发交易对
|
||||
count, _ := GetSymbolTriggerCount(db, v.Symbol, 2)
|
||||
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
|
||||
price, _ := decimal.NewFromString(v.Price)
|
||||
num, _ := decimal.NewFromString(preOrder.Num)
|
||||
params := OrderPlacementService{
|
||||
@ -419,13 +426,6 @@ func SpotAddPositionTrigger(db *gorm.DB, v *AddPositionList, item string, spotAp
|
||||
return
|
||||
}
|
||||
|
||||
//判断是否有已触发交易对
|
||||
count, _ := GetSymbolTriggerCount(db, v.Symbol, 2)
|
||||
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
|
||||
price := v.Price
|
||||
num, _ := decimal.NewFromString(preOrder.Num)
|
||||
|
||||
|
||||
@ -199,7 +199,7 @@ func handleMainReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
takeProfitOrder.Rate = ext.ReduceTakeProfitRatio.String()
|
||||
//止盈需要累加之前的亏损
|
||||
if totalLossAmountU.Cmp(decimal.Zero) > 0 {
|
||||
percent := totalLossAmountU.Div(totalNum).Div(price).Sub(decimal.NewFromInt(1)).Abs()
|
||||
percent := totalLossAmountU.Div(totalNum).Div(price).Abs()
|
||||
takeProfitOrder.Rate = percent.Mul(decimal.NewFromInt(100)).Add(ext.ReduceTakeProfitRatio).Truncate(2).String()
|
||||
}
|
||||
|
||||
@ -252,6 +252,12 @@ func handleMainReduceFilled(db *gorm.DB, preOrder *DbModels.LinePreOrder) {
|
||||
}
|
||||
}
|
||||
|
||||
for _, item := range orders {
|
||||
if item.OrderType == 2 {
|
||||
processStopLossOrder(item)
|
||||
}
|
||||
}
|
||||
|
||||
//计算实际亏损
|
||||
if parentOrder.Price != "" {
|
||||
parentPrice := utility.StrToDecimal(parentOrder.Price)
|
||||
@ -734,7 +740,7 @@ func makeSpotTakeAndReduce(preOrder *DbModels.LinePreOrder, db *gorm.DB, tradeSe
|
||||
|
||||
//止盈需要累加之前的亏损
|
||||
if totalLossAmountU.Cmp(decimal.Zero) > 0 {
|
||||
percent := totalLossAmountU.Div(num).Div(price).Sub(decimal.NewFromInt(1)).Abs()
|
||||
percent := totalLossAmountU.Div(num).Div(price).Abs()
|
||||
profitOrder.Rate = percent.Mul(decimal.NewFromInt(100)).Add(ext.TakeProfitRatio).Truncate(2).String()
|
||||
}
|
||||
|
||||
@ -874,6 +880,7 @@ func processStopLossOrder(order models.LinePreOrder) error {
|
||||
price := utility.StrToDecimal(order.Price)
|
||||
stopLoss := dto.StopLossRedisList{
|
||||
Id: order.Id,
|
||||
MainId: order.MainId,
|
||||
PId: order.Pid,
|
||||
ApiId: order.ApiId,
|
||||
OrderTye: order.OrderType,
|
||||
|
||||
Reference in New Issue
Block a user