1、减仓策略
2、减仓后减仓节点(60%)
This commit is contained in:
@ -10,6 +10,7 @@ import (
|
||||
"go-admin/common/global"
|
||||
"go-admin/common/helper"
|
||||
"go-admin/models"
|
||||
"go-admin/services/cacheservice"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@ -151,19 +152,37 @@ func JudgeFuturesReduce(trade models.TradeSet) {
|
||||
key := fmt.Sprintf(rediskey.FuturesReduceList, global.EXCHANGE_BINANCE)
|
||||
reduceVal, _ := helper.DefaultRedis.GetAllList(key)
|
||||
|
||||
if len(reduceVal) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
db := GetDBConnection()
|
||||
futApi := FutRestApi{}
|
||||
setting, err := GetSystemSetting(db)
|
||||
setting, err := cacheservice.GetSystemSetting(db)
|
||||
|
||||
if err != nil {
|
||||
log.Error("获取系统设置失败")
|
||||
return
|
||||
}
|
||||
|
||||
tradePrice, _ := decimal.NewFromString(trade.LastPrice)
|
||||
//减仓单减仓策略
|
||||
orderReduceVal, _ := helper.DefaultRedis.GetAllList(fmt.Sprintf(rediskey.SpotOrderReduceStrategyList, global.EXCHANGE_BINANCE))
|
||||
reduceOrderStrategy := dto.LineOrderReduceStrategyResp{}
|
||||
|
||||
for _, item := range orderReduceVal {
|
||||
sonic.Unmarshal([]byte(item), &reduceOrderStrategy)
|
||||
|
||||
for _, item2 := range reduceOrderStrategy.Items {
|
||||
if reduceOrderStrategy.Symbol == trade.Coin+trade.Currency {
|
||||
//买入
|
||||
if item2.TriggerPrice.Cmp(decimal.Zero) > 0 &&
|
||||
tradePrice.Cmp(decimal.Zero) > 0 &&
|
||||
((strings.ToUpper(reduceOrderStrategy.Side) == "SELL" && item2.TriggerPrice.Cmp(tradePrice) >= 0) ||
|
||||
(strings.ToUpper(reduceOrderStrategy.Side) == "BUY" && item2.TriggerPrice.Cmp(tradePrice) <= 0)) {
|
||||
//todo 生成订单并触发
|
||||
// SpotReduceTrigger(db, reduceOrder, spotApi, setting, key, item)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, item := range reduceVal {
|
||||
reduceOrder := ReduceListItem{}
|
||||
if err := sonic.Unmarshal([]byte(item), &reduceOrder); err != nil {
|
||||
@ -173,7 +192,6 @@ func JudgeFuturesReduce(trade models.TradeSet) {
|
||||
|
||||
if reduceOrder.Symbol == trade.Coin+trade.Currency {
|
||||
orderPrice := reduceOrder.Price
|
||||
tradePrice, _ := decimal.NewFromString(trade.LastPrice)
|
||||
//买入
|
||||
if orderPrice.Cmp(decimal.Zero) > 0 &&
|
||||
tradePrice.Cmp(decimal.Zero) > 0 &&
|
||||
@ -188,7 +206,7 @@ func JudgeFuturesReduce(trade models.TradeSet) {
|
||||
|
||||
// 触发合约减仓
|
||||
func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRestApi, setting DbModels.LineSystemSetting, key, item string) {
|
||||
tradeSet, _ := GetTradeSet(reduceOrder.Symbol, 1)
|
||||
tradeSet, _ := cacheservice.GetTradeSet(global.EXCHANGE_BINANCE, reduceOrder.Symbol, 1)
|
||||
|
||||
if tradeSet.LastPrice == "" {
|
||||
return
|
||||
@ -239,17 +257,6 @@ func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRes
|
||||
positionSide = "LONG"
|
||||
}
|
||||
|
||||
// params := FutOrderPlace{
|
||||
// ApiId: reduceOrder.ApiId,
|
||||
// Side: reduceOrder.Side,
|
||||
// OrderType: "STOP",
|
||||
// Symbol: reduceOrder.Symbol,
|
||||
// Price: price,
|
||||
// StopPrice: price,
|
||||
// Quantity: num,
|
||||
// NewClientOrderId: reduceOrder.OrderSn,
|
||||
// }
|
||||
|
||||
if err := futApi.ClosePositionLoop(reduceOrder.Symbol, reduceOrder.OrderSn, num, reduceOrder.Side, positionSide, apiInfo, "LIMIT", "0", price, 3); err != nil {
|
||||
log.Errorf("合约减仓挂单失败 id:%s err:%v", reduceOrder.Id, err)
|
||||
|
||||
@ -267,6 +274,9 @@ func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRes
|
||||
Where("id = ? AND status =0", reduceOrder.Id).Updates(map[string]interface{}{"status": 1}).Error; err != nil {
|
||||
log.Errorf("合约减仓更新状态失败 id:%s err:%v", reduceOrder.Id, err)
|
||||
}
|
||||
|
||||
//处理减仓单减仓策略
|
||||
CacheOrderStrategyAndReCreate(db, reduceOrder, 2, tradeSet, setting)
|
||||
}
|
||||
|
||||
if _, err := helper.DefaultRedis.LRem(key, item); err != nil {
|
||||
@ -322,8 +332,8 @@ func FutAddPositionTrigger(db *gorm.DB, v *AddPositionList, item string, futApi
|
||||
} else if ok {
|
||||
defer lock.Release()
|
||||
|
||||
setting, _ := GetSystemSetting(db)
|
||||
tradeSet, _ := GetTradeSet(v.Symbol, 1)
|
||||
setting, _ := cacheservice.GetSystemSetting(db)
|
||||
tradeSet, _ := cacheservice.GetTradeSet(global.EXCHANGE_BINANCE, v.Symbol, 1)
|
||||
|
||||
if tradeSet.LastPrice == "" {
|
||||
log.Errorf("合约加仓触发 查询交易对失败 交易对:%s ordersn:%s", v.Symbol, v.OrderSn)
|
||||
|
||||
Reference in New Issue
Block a user