package trade import ( "sig-pub/pkg/types" "sig-pub/pkg/types/decimals" "github.com/govalues/decimal" ) // ITradeStrategy 下单策略 // 根据购买信号和账户信息生成下单参数 // TradeStrategy 下单买入策略接口(控制滑点, 仓位管理) type ITradeStrategy interface { // 下单, 币种,方向,杠杆 Trade(arg ...string) // 市场价格更新 Update(ctx ITradeStrategyContext, account ITradeAccount) } type ITradeStrategyContext interface { // 最新价格 LastPrice() decimal.Decimal } type TradeStrategyParam struct { MaxPosPct float64 // 单笔交易最大仓位占比 MaxExposurePct float64 // 最大总敞口占比 MaxLots float64 // 最大手数/数量 (optional) } type TradeStrategy struct { param TradeStrategyParam } func NewTradeStrategy(param TradeStrategyParam) (*TradeStrategy, error) { return &TradeStrategy{ param: param, }, nil } func (s *TradeStrategy) SigTrade(side types.Side, k types.Kline) (ta TradeArg, err error) { price := decimals.MustToFloat64(k.Close) time := k.Interval.MustAddMul(k.Ts, 1) ta = TradeArg{ Side: side, Price: price, Leverage: 1, Qty: 0.01, KInterval: string(k.Interval), KTime: k.Ts, Time: time, } return } type TradeArg struct { Side types.Side // 开仓方向 Price float64 // 开仓价格 Leverage int32 // 杠杆倍数 Qty float64 // 交易量 qty为基础货币数量 KInterval string // 交易k线周期 KTime int64 // 交易k线时间 Time int64 // 交易时间 }