1、波段触发修改
This commit is contained in:
@ -24,22 +24,29 @@ import (
|
||||
|
||||
type BinanceStrategyOrderService struct {
|
||||
service.Service
|
||||
Debug bool
|
||||
}
|
||||
|
||||
// 判断是否触发波段订单
|
||||
func (e *BinanceStrategyOrderService) TriggerStrategyOrder(exchangeType string) {
|
||||
//现货
|
||||
orderStrs, _ := helper.DefaultRedis.GetAllList(fmt.Sprintf(rediskey.StrategyFutOrderList, exchangeType))
|
||||
e.DoJudge(orderStrs, 1, exchangeType)
|
||||
orderStrs, _ := helper.DefaultRedis.GetAllList(fmt.Sprintf(rediskey.StrategySpotOrderList, exchangeType))
|
||||
if len(orderStrs) > 0 {
|
||||
e.DoJudge(orderStrs, 1, exchangeType)
|
||||
}
|
||||
|
||||
//合约
|
||||
futOrdedrStrs, _ := helper.DefaultRedis.GetAllList(fmt.Sprintf(rediskey.StrategyFutOrderList, exchangeType))
|
||||
e.DoJudge(futOrdedrStrs, 2, exchangeType)
|
||||
|
||||
if len(futOrdedrStrs) > 0 {
|
||||
e.DoJudge(futOrdedrStrs, 2, exchangeType)
|
||||
}
|
||||
}
|
||||
|
||||
// 判断是否符合条件
|
||||
func (e *BinanceStrategyOrderService) DoJudge(orderStrs []string, symbolType int, exchangeType string) {
|
||||
db := GetDBConnection()
|
||||
// setting, _ := cacheservice.GetSystemSetting(db)
|
||||
|
||||
for _, orderStr := range orderStrs {
|
||||
var lockKey string
|
||||
@ -56,7 +63,7 @@ func (e *BinanceStrategyOrderService) DoJudge(orderStrs []string, symbolType int
|
||||
lockKey = rediskey.StrategyFutTriggerLock
|
||||
}
|
||||
|
||||
lock := helper.NewRedisLock(fmt.Sprintf(lockKey, orderItem.ApiId, orderItem.Symbol), 200, 50, 100*time.Millisecond)
|
||||
lock := helper.NewRedisLock(fmt.Sprintf(lockKey, orderItem.ApiId, orderItem.OrderSn), 60, 20, 300*time.Millisecond)
|
||||
|
||||
if ok, err := lock.AcquireWait(context.Background()); err != nil {
|
||||
e.Log.Debug("获取锁失败", err)
|
||||
@ -65,13 +72,13 @@ func (e *BinanceStrategyOrderService) DoJudge(orderStrs []string, symbolType int
|
||||
defer lock.Release()
|
||||
|
||||
//判断是否符合条件
|
||||
success, err := e.JudgeStrategy(orderItem, 1, exchangeType)
|
||||
success, err := e.JudgeStrategy(orderItem, symbolType, exchangeType)
|
||||
|
||||
if err != nil {
|
||||
e.Log.Errorf("order_id:%d err:%v", orderItem.Id, err)
|
||||
}
|
||||
|
||||
if success {
|
||||
if e.Debug || success {
|
||||
e.TriggerOrder(db, orderStr, orderItem, symbolType)
|
||||
}
|
||||
}
|
||||
@ -121,22 +128,26 @@ func (e *BinanceStrategyOrderService) JudgeStrategy(order dto.StrategyOrderRedis
|
||||
}
|
||||
|
||||
percentag := lastPrice.Div(startPrice).Sub(decimal.NewFromInt(1)).Truncate(6)
|
||||
fmt.Printf("百分比:%s", percentag.Mul(decimal.NewFromInt(100)).String())
|
||||
logger.Infof("百分比:%s", percentag.Mul(decimal.NewFromInt(100)).String())
|
||||
//价格没有变动
|
||||
if percentag.Cmp(decimal.Zero) == 0 {
|
||||
return result, nil
|
||||
}
|
||||
|
||||
//满足条件
|
||||
switch order.CompareType {
|
||||
case 1:
|
||||
result = percentag.Mul(decimal.NewFromInt(100)).Cmp(order.Percentag) > 0
|
||||
case 2:
|
||||
result = percentag.Mul(decimal.NewFromInt(100)).Cmp(order.Percentag) >= 0
|
||||
case 5:
|
||||
result = percentag.Mul(decimal.NewFromInt(100)).Cmp(order.Percentag) == 0
|
||||
default:
|
||||
return result, errors.New("没有对应的类型")
|
||||
switch {
|
||||
//涨价格大于0.5% 跌价格小于-0.5%
|
||||
case order.CompareType == 1 && order.Direction == 1 && percentag.Cmp(decimal.Zero) > 0,
|
||||
order.CompareType == 1 && order.Direction == 2 && percentag.Cmp(decimal.Zero) < 0:
|
||||
result = percentag.Abs().Mul(decimal.NewFromInt(100)).Cmp(order.Percentag) > 0
|
||||
|
||||
case order.CompareType == 2 && order.Direction == 1 && percentag.Cmp(decimal.Zero) > 0,
|
||||
order.CompareType == 2 && order.Direction == 2 && percentag.Cmp(decimal.Zero) < 0:
|
||||
result = percentag.Abs().Mul(decimal.NewFromInt(100)).Cmp(order.Percentag) >= 0
|
||||
|
||||
case order.CompareType == 5 && order.Direction == 1 && percentag.Cmp(decimal.Zero) > 0,
|
||||
order.CompareType == 5 && order.Direction == 2 && percentag.Cmp(decimal.Zero) < 0:
|
||||
result = percentag.Abs().Mul(decimal.NewFromInt(100)).Cmp(order.Percentag) == 0
|
||||
}
|
||||
|
||||
return result, nil
|
||||
@ -145,7 +156,7 @@ func (e *BinanceStrategyOrderService) JudgeStrategy(order dto.StrategyOrderRedis
|
||||
// 触发委托单
|
||||
func (e *BinanceStrategyOrderService) TriggerOrder(db *gorm.DB, cacheVal string, order dto.StrategyOrderRedisList, symbolType int) error {
|
||||
orders := make([]models.LinePreOrder, 0)
|
||||
if err := e.Orm.Model(&models.LinePreOrder{}).Where("main_id =?", order.Id).Find(&orders).Error; err != nil {
|
||||
if err := e.Orm.Model(&models.LinePreOrder{}).Where("main_id =? or id =?", order.Id, order.Id).Find(&orders).Error; err != nil {
|
||||
e.Log.Errorf("order_id:%d 获取委托单失败:%s", order.Id, err.Error())
|
||||
return err
|
||||
}
|
||||
@ -156,7 +167,16 @@ func (e *BinanceStrategyOrderService) TriggerOrder(db *gorm.DB, cacheVal string,
|
||||
return errors.New("获取系统设置失败")
|
||||
}
|
||||
|
||||
tradeSet, _ := cacheservice.GetTradeSet(global.EXCHANGE_BINANCE, order.Symbol, symbolType)
|
||||
var tradeSet models2.TradeSet
|
||||
|
||||
switch symbolType {
|
||||
case 1:
|
||||
tradeSet, _ = cacheservice.GetTradeSet(global.EXCHANGE_BINANCE, order.Symbol, 0)
|
||||
case 2:
|
||||
tradeSet, _ = cacheservice.GetTradeSet(global.EXCHANGE_BINANCE, order.Symbol, 1)
|
||||
default:
|
||||
return errors.New("获取交易对行情失败,交易对类型错误")
|
||||
}
|
||||
|
||||
if tradeSet.Coin == "" {
|
||||
return errors.New("获取交易对行情失败")
|
||||
@ -177,11 +197,36 @@ func (e *BinanceStrategyOrderService) TriggerOrder(db *gorm.DB, cacheVal string,
|
||||
}
|
||||
}
|
||||
|
||||
if mainOrder.Id == 0 {
|
||||
return errors.New("获取主单失败")
|
||||
}
|
||||
|
||||
GetOrderByPid(&mainOrder, orders, mainOrder.Id)
|
||||
|
||||
e.RecalculateOrder(tradeSet, &mainOrder, setting)
|
||||
|
||||
if err := e.Orm.Save(&mainOrder).Error; err != nil {
|
||||
//事务保存
|
||||
err := e.Orm.Transaction(func(tx *gorm.DB) error {
|
||||
if err1 := tx.Save(&mainOrder).Error; err1 != nil {
|
||||
return err1
|
||||
}
|
||||
|
||||
for _, v := range mainOrder.Childs {
|
||||
if err1 := tx.Save(&v).Error; err1 != nil {
|
||||
return err1
|
||||
}
|
||||
|
||||
for _, v2 := range v.Childs {
|
||||
if err1 := tx.Save(&v2).Error; err1 != nil {
|
||||
return err1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
e.Log.Errorf("order_id:%d 波段触发保存委托单失败:%s", mainOrder.Id, err.Error())
|
||||
return err
|
||||
}
|
||||
@ -224,16 +269,29 @@ func (e *BinanceStrategyOrderService) StrategyOrderPlace(db *gorm.DB, cacheVal s
|
||||
|
||||
if err := futApi.OrderPlaceLoop(db, params, 3); err != nil {
|
||||
logger.Error("下单失败", mainOrder.Symbol, " err:", err)
|
||||
if _, err := helper.DefaultRedis.LRem(key, cacheVal); err != nil {
|
||||
logger.Error("删除redis 预下单失败:", err)
|
||||
}
|
||||
|
||||
err := db.Model(&models.LinePreOrder{}).Where("id =? and status='0'", mainOrder.Id).Updates(map[string]interface{}{"status": "2", "desc": err.Error()}).Error
|
||||
|
||||
if err != nil {
|
||||
logger.Error("更新预下单状态失败")
|
||||
}
|
||||
|
||||
return
|
||||
} else {
|
||||
if _, err := helper.DefaultRedis.LRem(key, cacheVal); err != nil {
|
||||
logger.Error("删除redis 预下单失败:", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if err := db.Model(&models.LinePreOrder{}).Where("id =? ", mainOrder.Id).Updates(map[string]interface{}{"trigger_time": time.Now()}).Error; err != nil {
|
||||
logger.Error("更新预下单状态失败 ordersn:", mainOrder.OrderSn, " status:1")
|
||||
}
|
||||
|
||||
if err := db.Model(&models.LinePreOrder{}).Where("id =? AND status ='0'", mainOrder.Id).Updates(map[string]interface{}{"status": "1"}).Error; err != nil {
|
||||
logger.Error("更新预下单状态失败 ordersn:", mainOrder.OrderSn, " status:1")
|
||||
}
|
||||
}
|
||||
|
||||
@ -247,9 +305,10 @@ func (e *BinanceStrategyOrderService) RecalculateOrder(tradeSet models2.TradeSet
|
||||
return errors.New("获取拓展信息失败")
|
||||
}
|
||||
|
||||
var newPrice decimal.Decimal
|
||||
lastPrice := utility.StrToDecimal(tradeSet.LastPrice)
|
||||
rate := utility.StrToDecimal(mainOrder.Rate)
|
||||
newPrice := lastPrice.Mul(decimal.NewFromInt(1).Add(rate.Div(decimal.NewFromInt(100)).Truncate(4))).Truncate(int32(tradeSet.PriceDigit))
|
||||
newPrice = lastPrice.Mul(decimal.NewFromInt(1).Add(rate.Div(decimal.NewFromInt(100)).Truncate(4))).Truncate(int32(tradeSet.PriceDigit))
|
||||
buyPrice := utility.StrToDecimal(mainOrder.BuyPrice)
|
||||
totalNum := buyPrice.Div(newPrice).Truncate(int32(tradeSet.AmountDigit))
|
||||
|
||||
@ -257,51 +316,60 @@ func (e *BinanceStrategyOrderService) RecalculateOrder(tradeSet models2.TradeSet
|
||||
mainOrder.Price = newPrice.String()
|
||||
mainOrder.Num = totalNum.String()
|
||||
remainQuantity := totalNum
|
||||
var totalLossAmount decimal.Decimal
|
||||
prePrice := lastPrice
|
||||
|
||||
for index := range mainOrder.Childs {
|
||||
var ext models.LinePreOrderExt
|
||||
extOrderId := mainOrder.Childs[index].Id
|
||||
takeStopArray := []int{1, 2}
|
||||
|
||||
//止盈止损 ext拓展id为 pid
|
||||
if utility.ContainsInt(takeStopArray, mainOrder.Childs[index].OrderType) {
|
||||
extOrderId = mainOrder.Childs[index].Pid
|
||||
}
|
||||
|
||||
for _, v := range exts {
|
||||
if v.OrderId == mainOrder.Child[index].Id {
|
||||
if v.OrderId == extOrderId {
|
||||
ext = v
|
||||
break
|
||||
}
|
||||
}
|
||||
if ext.Id <= 0 {
|
||||
logger.Errorf("子订单ext不存在 id:%d", mainOrder.Child[index].Id)
|
||||
logger.Errorf("子订单ext不存在 id:%d", mainOrder.Childs[index].Id)
|
||||
continue
|
||||
}
|
||||
|
||||
//主单止盈、止损
|
||||
if mainOrder.Child[index].Pid == mainOrder.Child[index].MainId && (mainOrder.Child[index].OrderType == 1 || mainOrder.Child[index].OrderType == 2) {
|
||||
if mainOrder.Childs[index].Pid == mainOrder.Childs[index].MainId && (mainOrder.Childs[index].OrderType == 1 || mainOrder.Childs[index].OrderType == 2) {
|
||||
var percent decimal.Decimal
|
||||
|
||||
switch {
|
||||
// 加价
|
||||
case mainOrder.Child[index].OrderType == 1 && mainOrder.Site == "BUY", mainOrder.Child[index].OrderType == 2 && mainOrder.Site == "SELL":
|
||||
case mainOrder.Childs[index].OrderType == 1 && mainOrder.Site == "BUY", mainOrder.Childs[index].OrderType == 2 && mainOrder.Site == "SELL":
|
||||
percent = decimal.NewFromInt(100).Add(ext.TakeProfitRatio)
|
||||
//减价
|
||||
case mainOrder.Child[index].OrderType == 2 && mainOrder.Site == "BUY", mainOrder.Child[index].OrderType == 1 && mainOrder.Site == "SELL":
|
||||
case mainOrder.Childs[index].OrderType == 2 && mainOrder.Site == "BUY", mainOrder.Childs[index].OrderType == 1 && mainOrder.Site == "SELL":
|
||||
percent = decimal.NewFromInt(100).Sub(ext.StopLossRatio)
|
||||
}
|
||||
|
||||
childPrice := lastPrice.Mul(percent.Div(decimal.NewFromInt(100).Truncate(4))).Truncate(int32(tradeSet.PriceDigit))
|
||||
mainOrder.Child[index].Price = childPrice.String()
|
||||
mainOrder.Child[index].Num = totalNum.String()
|
||||
mainOrder.Childs[index].Price = childPrice.String()
|
||||
mainOrder.Childs[index].Num = totalNum.String()
|
||||
|
||||
} else {
|
||||
//todo 重新计算
|
||||
lastNum := remainQuantity
|
||||
|
||||
//过期时间
|
||||
if ext.ExpirateHour <= 0 {
|
||||
mainOrder.Child[index].ExpireTime = time.Now().AddDate(10, 0, 0)
|
||||
mainOrder.Childs[index].ExpireTime = time.Now().AddDate(10, 0, 0)
|
||||
} else {
|
||||
mainOrder.Child[index].ExpireTime = time.Now().Add(time.Hour * time.Duration(ext.ExpirateHour))
|
||||
mainOrder.Childs[index].ExpireTime = time.Now().Add(time.Hour * time.Duration(ext.ExpirateHour))
|
||||
}
|
||||
|
||||
switch {
|
||||
//加仓单
|
||||
case mainOrder.Child[index].OrderType == 1 && mainOrder.Child[index].OrderCategory == 3:
|
||||
case mainOrder.Childs[index].OrderType == 1 && mainOrder.Childs[index].OrderCategory == 3:
|
||||
var percentage decimal.Decimal
|
||||
|
||||
if mainOrder.Site == "BUY" {
|
||||
@ -311,24 +379,29 @@ func (e *BinanceStrategyOrderService) RecalculateOrder(tradeSet models2.TradeSet
|
||||
}
|
||||
|
||||
dataPrice := utility.StrToDecimal(mainOrder.Price).Mul(percentage).Truncate(int32(tradeSet.PriceDigit))
|
||||
mainOrder.Child[index].Price = dataPrice.String()
|
||||
mainOrder.Childs[index].Price = dataPrice.String()
|
||||
|
||||
priceDiff := dataPrice.Sub(prePrice).Abs()
|
||||
totalLossAmount = totalLossAmount.Add(lastNum.Mul(priceDiff))
|
||||
|
||||
if ext.AddPositionType == 1 {
|
||||
buyPrice := utility.StrToDecimal(mainOrder.BuyPrice).Mul(utility.SafeDiv(ext.AddPositionVal, decimal.NewFromInt(100))).Truncate(2)
|
||||
mainOrder.Child[index].Num = utility.SafeDiv(buyPrice, dataPrice).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
mainOrder.Childs[index].Num = utility.SafeDiv(buyPrice, dataPrice).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
|
||||
} else {
|
||||
mainOrder.Child[index].Num = utility.SafeDiv(ext.AddPositionVal.Truncate(2), dataPrice).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
mainOrder.Childs[index].Num = utility.SafeDiv(ext.AddPositionVal.Truncate(2), dataPrice).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
}
|
||||
|
||||
//加库存
|
||||
lastNum = lastNum.Add(utility.StrToDecimal(mainOrder.Child[index].Num))
|
||||
lastNum = lastNum.Add(utility.StrToDecimal(mainOrder.Childs[index].Num))
|
||||
// 计算子订单
|
||||
if len(mainOrder.Child[index].Child) > 0 {
|
||||
calculateChildOrder(&mainOrder.Child, &tradeSet, ext, lastNum, dataPrice, false)
|
||||
if len(mainOrder.Childs[index].Childs) > 0 {
|
||||
calculateChildOrder(&mainOrder.Childs[index].Childs, &tradeSet, ext, lastNum, dataPrice, totalLossAmount, false)
|
||||
}
|
||||
//覆盖最近的订单价
|
||||
prePrice = dataPrice
|
||||
//减仓单
|
||||
case mainOrder.Child[index].OrderType == 4:
|
||||
case mainOrder.Childs[index].OrderType == 4:
|
||||
percentage := decimal.NewFromInt(1)
|
||||
|
||||
if mainOrder.Site == "BUY" && ext.PriceRatio.Cmp(decimal.Zero) > 0 {
|
||||
@ -338,22 +411,26 @@ func (e *BinanceStrategyOrderService) RecalculateOrder(tradeSet models2.TradeSet
|
||||
}
|
||||
|
||||
dataPrice := utility.StrToDecimal(mainOrder.Price).Mul(percentage).Truncate(int32(tradeSet.PriceDigit))
|
||||
mainOrder.Child[index].Price = dataPrice.String()
|
||||
mainOrder.Childs[index].Price = dataPrice.String()
|
||||
priceDiff := dataPrice.Sub(prePrice).Abs()
|
||||
totalLossAmount = totalLossAmount.Add(lastNum.Mul(priceDiff))
|
||||
|
||||
//百分比减仓
|
||||
if ext.AddPositionType == 1 {
|
||||
mainOrder.Child[index].Num = lastNum.Mul(ext.AddPositionVal.Div(decimal.NewFromInt(100))).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
mainOrder.Childs[index].Num = lastNum.Mul(ext.AddPositionVal.Div(decimal.NewFromInt(100))).Truncate(int32(tradeSet.AmountDigit)).String()
|
||||
|
||||
} else {
|
||||
logger.Error("减仓不能是固定数值")
|
||||
}
|
||||
|
||||
//减库存
|
||||
lastNum = lastNum.Sub(utility.StrToDecimal(mainOrder.Child[index].Num))
|
||||
lastNum = lastNum.Sub(utility.StrToDecimal(mainOrder.Childs[index].Num))
|
||||
// 计算子订单
|
||||
if len(mainOrder.Child[index].Child) > 0 {
|
||||
calculateChildOrder(&mainOrder.Child, &tradeSet, ext, lastNum, dataPrice, false)
|
||||
if len(mainOrder.Childs[index].Childs) > 0 {
|
||||
calculateChildOrder(&mainOrder.Childs[index].Childs, &tradeSet, ext, lastNum, dataPrice, totalLossAmount, false)
|
||||
}
|
||||
//覆盖最近的订单价
|
||||
prePrice = dataPrice
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -362,7 +439,8 @@ func (e *BinanceStrategyOrderService) RecalculateOrder(tradeSet models2.TradeSet
|
||||
|
||||
// 计算子订单信息
|
||||
// isTpTp 是否是止盈后止损止盈
|
||||
func calculateChildOrder(orders *[]models.LinePreOrder, tradeSet *models2.TradeSet, ext models.LinePreOrderExt, lastNum decimal.Decimal, price decimal.Decimal, isTpTp bool) error {
|
||||
// totalLossAmount 累计亏损金额
|
||||
func calculateChildOrder(orders *[]models.LinePreOrder, tradeSet *models2.TradeSet, ext models.LinePreOrderExt, lastNum decimal.Decimal, price decimal.Decimal, totalLossAmount decimal.Decimal, isTpTp bool) error {
|
||||
for index := range *orders {
|
||||
orderQuantity := lastNum.Truncate(int32(tradeSet.AmountDigit))
|
||||
percentage := decimal.NewFromInt(1)
|
||||
@ -389,11 +467,21 @@ func calculateChildOrder(orders *[]models.LinePreOrder, tradeSet *models2.TradeS
|
||||
switch {
|
||||
//做多止盈、做空止损
|
||||
case (*orders)[index].OrderType == 1 && (*orders)[index].Site == "SELL", (*orders)[index].OrderType == 2 && (*orders)[index].Site == "BUY":
|
||||
percentage = decimal.NewFromInt(100).Add(addPercentage).Div(decimal.NewFromInt(100))
|
||||
percentage = decimal.NewFromInt(100).Add(addPercentage)
|
||||
|
||||
//做多止损、做空止盈
|
||||
case (*orders)[index].OrderType == 2 && (*orders)[index].Site == "SELL", (*orders)[index].OrderType == 1 && (*orders)[index].Site == "BUY":
|
||||
percentage = decimal.NewFromInt(100).Sub(addPercentage).Div(decimal.NewFromInt(100))
|
||||
percentage = decimal.NewFromInt(100).Sub(addPercentage)
|
||||
}
|
||||
|
||||
//止盈亏损回本百分比
|
||||
if (*orders)[index].OrderType == 1 && totalLossAmount.Cmp(decimal.Zero) > 0 {
|
||||
lossPercent := totalLossAmount.Div(lastNum).Mul(decimal.NewFromInt(100)).Truncate(2)
|
||||
percentage = percentage.Add(lossPercent)
|
||||
}
|
||||
|
||||
if percentage.Cmp(decimal.Zero) > 0 {
|
||||
percentage = percentage.Div(decimal.NewFromInt(100))
|
||||
}
|
||||
|
||||
orderPrice := price.Mul(percentage).Truncate(int32(tradeSet.PriceDigit))
|
||||
@ -402,8 +490,8 @@ func calculateChildOrder(orders *[]models.LinePreOrder, tradeSet *models2.TradeS
|
||||
lastOrderQuantity := lastNum.Sub(orderQuantity).Truncate(int32(tradeSet.AmountDigit))
|
||||
|
||||
//止盈后止盈、止盈后止损
|
||||
if len((*orders)[index].Child) > 0 && lastOrderQuantity.Cmp(decimal.Zero) > 0 {
|
||||
calculateChildOrder(&(*orders)[index].Child, tradeSet, ext, lastOrderQuantity, orderPrice, true)
|
||||
if len((*orders)[index].Childs) > 0 && lastOrderQuantity.Cmp(decimal.Zero) > 0 {
|
||||
calculateChildOrder(&(*orders)[index].Childs, tradeSet, ext, lastOrderQuantity, orderPrice, decimal.Zero, true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
26
services/binanceservice/strategy_order_service_test.go
Normal file
26
services/binanceservice/strategy_order_service_test.go
Normal file
@ -0,0 +1,26 @@
|
||||
package binanceservice
|
||||
|
||||
import (
|
||||
"go-admin/common/global"
|
||||
"go-admin/common/helper"
|
||||
"testing"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/sdk"
|
||||
"gorm.io/driver/mysql"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// 测试策略 触发单
|
||||
func TestTriggerOrder(t *testing.T) {
|
||||
service := BinanceStrategyOrderService{}
|
||||
dsn := "root:123456@tcp(127.0.0.1:3306)/go_exchange_single?charset=utf8mb4&parseTime=True&loc=Local&timeout=1000ms"
|
||||
db, _ := gorm.Open(mysql.Open(dsn), &gorm.Config{})
|
||||
helper.InitDefaultRedis("127.0.0.1:6379", "", 2)
|
||||
helper.InitLockRedisConn("127.0.0.1:6379", "", "2")
|
||||
sdk.Runtime.SetDb("default", db)
|
||||
|
||||
service.Orm = db
|
||||
service.Debug = true
|
||||
|
||||
service.TriggerStrategyOrder(global.EXCHANGE_BINANCE)
|
||||
}
|
||||
Reference in New Issue
Block a user