1、参数组装
This commit is contained in:
@ -181,23 +181,29 @@ func (s *LinePreOrderDeleteReq) GetId() interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type LineAddPreOrderReq struct {
|
type LineAddPreOrderReq struct {
|
||||||
ExchangeType string `json:"exchange_type"` //交易所类型
|
ExchangeType string `json:"exchange_type"` //交易所类型
|
||||||
OrderType int `json:"order_type"` //订单类型
|
OrderType int `json:"order_type"` //订单类型
|
||||||
Symbol string `json:"symbol"` //交易对
|
Symbol string `json:"symbol"` //交易对
|
||||||
ApiUserId string `json:"api_id"` //下单用户
|
ApiUserId string `json:"api_id"` //下单用户
|
||||||
Site string `json:"site"` //购买方向
|
Site string `json:"site"` //购买方向
|
||||||
BuyPrice string `json:"buy_price"` //购买金额 U
|
BuyPrice string `json:"buy_price"` //购买金额 U
|
||||||
PricePattern string `json:"price_pattern"` //价格模式
|
PricePattern string `json:"price_pattern"` //价格模式
|
||||||
Price string `json:"price"` //下单价百分比
|
Price string `json:"price"` //下单价百分比
|
||||||
Profit string `json:"profit"` //止盈价
|
Profit string `json:"profit"` //止盈价
|
||||||
StopPrice string `json:"stop_price"` //止损价
|
StopPrice string `json:"stop_price"` //止损价
|
||||||
PriceType string `json:"price_type"` //价格类型
|
PriceType string `json:"price_type"` //价格类型
|
||||||
SaveTemplate string `json:"save_template"` //是否保存模板
|
SaveTemplate string `json:"save_template"` //是否保存模板
|
||||||
TemplateName string `json:"template_name"` //模板名字
|
TemplateName string `json:"template_name"` //模板名字
|
||||||
SymbolType int `json:"symbol_type"` //交易对类型 1-现货 2-合约
|
SymbolType int `json:"symbol_type"` //交易对类型 1-现货 2-合约
|
||||||
CoverType int `json:"cover_type"` //对冲类型 1= 现货对合约 2=合约对合约 3 合约对现货
|
CoverType int `json:"cover_type"` //对冲类型 0=无对冲 1= 现货对合约 2=合约对合约 3 合约对现货
|
||||||
ExpireHour int `json:"expire_hour"` // 过期时间 单位小时
|
ExpireHour int `json:"expire_hour"` // 过期时间 单位小时
|
||||||
MainOrderType string `json:"main_order_type"` //主单类型:限价(LIMIT)或市价(MARKET)
|
MainOrderType string `json:"main_order_type"` //主单类型:限价(LIMIT)或市价(MARKET)
|
||||||
|
TakeProfitRatio decimal.Decimal `json:"take_profit"` //主单止盈比例
|
||||||
|
ReducePriceRatio decimal.Decimal `json:"reduce_price"` //主单减仓价格百分比
|
||||||
|
ReduceNumRatio decimal.Decimal `json:"reduce_num"` //主单减仓数量百分比
|
||||||
|
ReduceTakeProfitRatio decimal.Decimal `json:"reduce_take_profit"` //主单减仓后止盈价百分比
|
||||||
|
ReduceStopLossRatio decimal.Decimal `json:"reduce_stop_price"` //主单减仓后止损价百分比
|
||||||
|
Ext []LineAddPreOrderExtReq `json:"ext"` //拓展字段
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req LineAddPreOrderReq) CheckParams() error {
|
func (req LineAddPreOrderReq) CheckParams() error {
|
||||||
@ -229,26 +235,32 @@ func (req LineAddPreOrderReq) CheckParams() error {
|
|||||||
|
|
||||||
// LineBatchAddPreOrderReq 批量添加订单请求参数
|
// LineBatchAddPreOrderReq 批量添加订单请求参数
|
||||||
type LineBatchAddPreOrderReq struct {
|
type LineBatchAddPreOrderReq struct {
|
||||||
ExchangeType string `json:"exchange_type"` //交易所类型 字典exchange_type
|
ExchangeType string `json:"exchange_type"` //交易所类型 字典exchange_type
|
||||||
SymbolType int `json:"symbolType"` //主单交易对类型 0-现货 1-合约
|
SymbolType int `json:"symbolType"` //主单交易对类型 0-现货 1-合约
|
||||||
OrderType int `json:"order_type"` //订单类型
|
OrderType int `json:"order_type"` //订单类型
|
||||||
SymbolGroupId string `json:"symbol_group_id"` //交易对组id
|
SymbolGroupId string `json:"symbol_group_id"` //交易对组id
|
||||||
Symbol string `json:"symbol"` //交易对
|
Symbol string `json:"symbol"` //交易对
|
||||||
ApiUserId string `json:"api_id"` //下单用户
|
ApiUserId string `json:"api_id"` //下单用户
|
||||||
Site string `json:"site"` //购买方向
|
Site string `json:"site"` //购买方向
|
||||||
BuyPrice string `json:"buy_price"` //购买金额 U
|
BuyPrice string `json:"buy_price"` //购买金额 U
|
||||||
PricePattern string `json:"price_pattern"` //价格模式
|
PricePattern string `json:"price_pattern"` //价格模式
|
||||||
Price string `json:"price"` //下单价百分比
|
Price string `json:"price"` //下单价百分比
|
||||||
Profit string `json:"profit"` //止盈价
|
Profit string `json:"profit"` //止盈价
|
||||||
StopPrice string `json:"stop_price"` //止损价
|
StopPrice string `json:"stop_price"` //止损价
|
||||||
PriceType string `json:"price_type"` //价格类型
|
PriceType string `json:"price_type"` //价格类型
|
||||||
SaveTemplate string `json:"save_template"` //是否保存模板
|
SaveTemplate string `json:"save_template"` //是否保存模板
|
||||||
TemplateName string `json:"template_name"` //模板名字
|
TemplateName string `json:"template_name"` //模板名字
|
||||||
OrderNum int `json:"order_num"` //脚本运行次数
|
OrderNum int `json:"order_num"` //脚本运行次数
|
||||||
Script string `json:"script"` //是否是脚本运行 1 = 是 0= 否
|
Script string `json:"script"` //是否是脚本运行 1 = 是 0= 否
|
||||||
CoverType int `json:"cover_type"` //对冲类型 1= 现货对合约 2=合约对合约 3 合约对现货
|
CoverType int `json:"cover_type"` //对冲类型 1= 现货对合约 2=合约对合约 3 合约对现货
|
||||||
ExpireHour int `json:"expire_hour"` // 过期时间 单位小时
|
ExpireHour int `json:"expire_hour"` // 过期时间 单位小时
|
||||||
MainOrderType string `json:"main_order_type"` //主单类型:限价(LIMIT)或市价(MARKET)
|
MainOrderType string `json:"main_order_type"` //主单类型:限价(LIMIT)或市价(MARKET)
|
||||||
|
TakeProfitRatio decimal.Decimal `json:"take_profit"` //主单止盈比例
|
||||||
|
ReducePriceRatio decimal.Decimal `json:"reduce_price"` //主单减仓价格百分比
|
||||||
|
ReduceNumRatio decimal.Decimal `json:"reduce_num"` //主单减仓数量百分比
|
||||||
|
ReduceTakeProfitRatio decimal.Decimal `json:"reduce_take_profit"` //主单减仓后止盈价百分比
|
||||||
|
ReduceStopLossRatio decimal.Decimal `json:"reduce_stop_price"` //主单减仓后止损价百分比
|
||||||
|
Ext LineAddPreOrderExtReq `json:"ext"` //拓展字段
|
||||||
}
|
}
|
||||||
|
|
||||||
func (req LineBatchAddPreOrderReq) CheckParams() error {
|
func (req LineBatchAddPreOrderReq) CheckParams() error {
|
||||||
|
|||||||
@ -36,6 +36,17 @@ func (m *LinePreOrderExtGetPageReq) GetNeedSearch() interface{} {
|
|||||||
return *m
|
return *m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LineAddPreOrderExtReq struct {
|
||||||
|
TakeProfitRatio decimal.Decimal `json:"takeProfitRatio" comment:"止盈百分比"`
|
||||||
|
ReducePriceRatio decimal.Decimal `json:"reducePriceRatio" comment:"减仓价格百分比"`
|
||||||
|
ReduceNumRatio decimal.Decimal `json:"reduceNumRatio" comment:"减仓数量百分比"`
|
||||||
|
ReduceTakeProfitRatio decimal.Decimal `json:"reduceTakeProfitRatio" comment:"减仓后止盈百分比"`
|
||||||
|
ReduceStopLossRatio decimal.Decimal `json:"reduceStopLossRatio" comment:"减仓后止损百分比"`
|
||||||
|
AddPositionPriceRatio decimal.Decimal `json:"addPositionPriceRatio" comment:"加仓价格百分比"`
|
||||||
|
AddPositionType int `json:"addPositionType" comment:"加仓类型 1-百分比 2-实际金额"`
|
||||||
|
AddPositionVal decimal.Decimal `json:"addPositionVal" comment:"加仓值"`
|
||||||
|
}
|
||||||
|
|
||||||
type LinePreOrderExtInsertReq struct {
|
type LinePreOrderExtInsertReq struct {
|
||||||
Id int `json:"-" comment:"主键id"` // 主键id
|
Id int `json:"-" comment:"主键id"` // 主键id
|
||||||
MainOrderId int `json:"mainOrderId" comment:"主单id"`
|
MainOrderId int `json:"mainOrderId" comment:"主单id"`
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import (
|
|||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
"go-admin/common/helper"
|
"go-admin/common/helper"
|
||||||
models2 "go-admin/models"
|
models2 "go-admin/models"
|
||||||
"go-admin/models/binancedto"
|
|
||||||
"go-admin/pkg/utility"
|
"go-admin/pkg/utility"
|
||||||
"go-admin/pkg/utility/snowflakehelper"
|
"go-admin/pkg/utility/snowflakehelper"
|
||||||
"go-admin/services/binanceservice"
|
"go-admin/services/binanceservice"
|
||||||
@ -217,8 +216,6 @@ func (e *LinePreOrder) Remove(d *dto.LinePreOrderDeleteReq, p *actions.DataPermi
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ints := make([]int, 0)
|
ints := make([]int, 0)
|
||||||
stoplossMarket, _ := helper.DefaultRedis.GetAllList(rediskey.StoplossMarkt)
|
|
||||||
stoploss := binancedto.StoplossMarket{}
|
|
||||||
apiIds := make([]int, 0)
|
apiIds := make([]int, 0)
|
||||||
|
|
||||||
if db.RowsAffected == 0 {
|
if db.RowsAffected == 0 {
|
||||||
@ -254,64 +251,9 @@ func (e *LinePreOrder) Remove(d *dto.LinePreOrderDeleteReq, p *actions.DataPermi
|
|||||||
|
|
||||||
binanceservice.MainClosePositionClearCache(order.Id, order.CoverType)
|
binanceservice.MainClosePositionClearCache(order.Id, order.CoverType)
|
||||||
|
|
||||||
helper.DefaultRedis.DeleteString(fmt.Sprintf(rediskey.SpotHedgeClosePosition, order.Id, order.Symbol))
|
|
||||||
helper.DefaultRedis.DeleteString(fmt.Sprintf(rediskey.FuturesHedgeClosePosition, order.Id, order.Symbol))
|
|
||||||
|
|
||||||
helper.DefaultRedis.DeleteString(fmt.Sprintf(rediskey.HoldeA, order.Id))
|
|
||||||
helper.DefaultRedis.DeleteString(fmt.Sprintf(rediskey.HoldeB, order.Id))
|
|
||||||
helper.DefaultRedis.DeleteString(fmt.Sprintf(rediskey.HedgeClosePosition, order.Id))
|
|
||||||
|
|
||||||
for _, st := range stoplossMarket {
|
|
||||||
sonic.Unmarshal([]byte(st), &stoploss)
|
|
||||||
|
|
||||||
if stoploss.Pid == order.Id {
|
|
||||||
helper.DefaultRedis.LRem(rediskey.StoplossMarkt, st)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ints = append(ints, order.Id)
|
ints = append(ints, order.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(apiIds) > 0 {
|
|
||||||
apiSymbols := make([]models.LinePreOrder, 0)
|
|
||||||
userHold := make(map[int][]string)
|
|
||||||
|
|
||||||
e.Orm.Model(&models.LinePreOrder{}).Where("pid = 0 AND status IN ('1','5','9','13') AND api_id IN ?", apiIds).
|
|
||||||
Group("api_id,symbol,quote_symbol").
|
|
||||||
Select("api_id,symbol,quote_symbol").
|
|
||||||
Find(&apiSymbols)
|
|
||||||
|
|
||||||
for _, apiId := range apiIds {
|
|
||||||
bre := false
|
|
||||||
|
|
||||||
for _, api := range apiSymbols {
|
|
||||||
if apiId == api.ApiId {
|
|
||||||
coin := utility.ReplaceSuffix(api.Symbol, api.QuoteSymbol, "")
|
|
||||||
userHold[api.ApiId] = append(userHold[api.ApiId], coin)
|
|
||||||
bre = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !bre {
|
|
||||||
userHold[apiId] = make([]string, 0)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for key, val := range userHold {
|
|
||||||
key := fmt.Sprintf(rediskey.UserHolding, key)
|
|
||||||
|
|
||||||
if len(val) > 0 {
|
|
||||||
if err := helper.DefaultRedis.SetListCache(key, 0, val...); err != nil {
|
|
||||||
logger.Errorf("重新设置用户持仓失败 apiid:%v,err:%v", key, err)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := helper.DefaultRedis.SetEmptyListCache(key, 0); err != nil {
|
|
||||||
logger.Errorf("重新设置用户持仓为空 失败 apiid:%v,err:%v", key, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(ints) > 0 {
|
if len(ints) > 0 {
|
||||||
e.Orm.Model(&models.LinePreOrder{}).Where("pid >0 AND pid in ?", ints).Unscoped().Delete(&models.LinePreOrder{})
|
e.Orm.Model(&models.LinePreOrder{}).Where("pid >0 AND pid in ?", ints).Unscoped().Delete(&models.LinePreOrder{})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,22 +41,12 @@ const (
|
|||||||
|
|
||||||
//需要清理键值---------BEGIN---------------
|
//需要清理键值---------BEGIN---------------
|
||||||
|
|
||||||
UserHolding = "api_user_hold:%v" //用户持仓币种 {主单apiid} 不是交易对
|
|
||||||
|
|
||||||
SpotHedgeClosePosition = "spot_hedge_close_position:%v_%s" //现货对冲平仓 {mainorderid|symbol}
|
|
||||||
FuturesHedgeClosePosition = "futures_hedge_close_position:%v_%s" //合约对冲平仓 {mainorderid|symbol}
|
|
||||||
|
|
||||||
SpotStopLossList = "spot_stoploss_list:%s" //现货止损待触发列表 {交易所类型code}
|
SpotStopLossList = "spot_stoploss_list:%s" //现货止损待触发列表 {交易所类型code}
|
||||||
FuturesStopLossList = "futures_stoploss_list:%s" //合约止损待触发列表 {交易所类型code}
|
FuturesStopLossList = "futures_stoploss_list:%s" //合约止损待触发列表 {交易所类型code}
|
||||||
|
|
||||||
SpotAddPositionList = "spot_add_position_list" //现货加仓待触发
|
SpotAddPositionList = "spot_add_position_list" //现货加仓待触发
|
||||||
FuturesAddPositionList = "futures_add_position_list" //合约加仓待触发
|
FuturesAddPositionList = "futures_add_position_list" //合约加仓待触发
|
||||||
StoplossMarkt = "stop_loss_markt" //对冲保险单(市价) 对冲单成交之后、清除
|
|
||||||
|
|
||||||
HoldeA = "holde_a:%v" //持仓A {主单id}
|
|
||||||
HoldeB = "holde_b:%v" //持仓B {主单id}
|
|
||||||
|
|
||||||
HedgeClosePosition = "hedge_close_position:%v" //对冲平仓记录 {主单id}
|
|
||||||
//需要清理键值---------END-----------------
|
//需要清理键值---------END-----------------
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|||||||
@ -45,7 +45,7 @@ func ChangeFutureOrder(mapData map[string]interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 获取 Redis 锁
|
// 获取 Redis 锁
|
||||||
lock := helper.NewRedisLock(fmt.Sprintf(rediskey.SpotCallBack, orderSn), 10, 5, 500*time.Millisecond)
|
lock := helper.NewRedisLock(fmt.Sprintf(rediskey.FutCallBack, orderSn), 10, 5, 500*time.Millisecond)
|
||||||
acquired, err := lock.AcquireWait(context.Background())
|
acquired, err := lock.AcquireWait(context.Background())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("合约订单回调失败,获取锁失败:", orderSn, " err:", err)
|
logger.Error("合约订单回调失败,获取锁失败:", orderSn, " err:", err)
|
||||||
|
|||||||
Reference in New Issue
Block a user