package trade import ( "sig-pub/pkg/strategy" "sig-pub/pkg/types" "github.com/govalues/decimal" ) // ITradeAnalyzer 建仓到平仓分析器 type ITradeAnalyzer interface { IEntryAnalyzer IExitAnalyzer // Init 校验参数, 并根据参数初始化策略 Init(input types.Input) (err error) } // IEntryAnalyzer 建仓下单策略 type IEntryAnalyzer interface { strategy.ISigStrategy // 需要的各周期最小数据k线数 CandlePeriods(ctx strategy.IInstanceIntervalSigStrategyContext) (tradeInsts []string, iPeriods *types.IntervalState[int16]) // EntryAnalysis 生成下单参数(交易量/方向/杠杆) 建仓分析:确定是否入场、下单价格及仓位大小 // 币种持仓中不能改变杠杆 // tickets 建仓单信息 // skipCause 跳过交易信号原因 EntryAnalysis(ctx strategy.IInstanceIntervalSigStrategyContext, account ITradeAccount, sigInstId string, sigSide types.Side) (tickets []TradeTicket, skipCause Cause, err error) } // IExitAnalyzer 平仓评估评估、止盈止损策略(trading service 管理) type IExitAnalyzer interface { strategy.ISigStrategy // 需要的各周期最小数据k线数 CandlePeriods(ctx strategy.IInstanceIntervalSigStrategyContext) (tradeInsts []string, iPeriods *types.IntervalState[int16]) // ExitAnalysisOnPrice 价格更新评估是否平仓 // @return closeTicket平仓单信息 ExitAnalysisOnPrice(ctx strategy.IInstanceIntervalSigStrategyContext, account ITradeAccount, instId string, price float64) (closeTickets []TradeTicket, err error) // ExitAnalysisOnSig 信号触发时评估是否平仓 ExitAnalysisOnSig(ctx strategy.IInstanceIntervalSigStrategyContext, account ITradeAccount, instId string, sigSide types.Side) (closeTickets []TradeTicket, err error) } type TradeTicket struct { TradeType TradeType InstId string Side types.Side // 开仓方向 Price float64 // 开仓价格 Leverage int32 // 杠杆倍数 Qty decimal.Decimal // 交易量 qty为交易产品数量 todo decimal Interval string // k线周期 Ktime int64 // k线时间 Ctime int64 // 创建时间(ctime-ktime=信号延迟) Cause Cause TradesId []int64 // 关联交易订单id (仅平仓使用) }