package trading import ( "context" "sig-pub/internal/trading/backtest" "sig-pub/pkg/data" "sig-pub/pkg/data/entity" "sig-pub/pkg/storage/ck" "sig-pub/pkg/storage/persist" "sig-pub/pkg/trade" ) type TradingDataPersist struct { db *persist.DB pgBatchWriter *persist.PGBatchWriter ckDB *ck.ClickhouseDB ckBatchWriter *ck.ClickhouseBatchWriter } func NewTradingDataPersist(db *persist.DB, pgBatchWriter *persist.PGBatchWriter, ckDB *ck.ClickhouseDB, ckBatchWriter *ck.ClickhouseBatchWriter) *TradingDataPersist { return &TradingDataPersist{ db: db, pgBatchWriter: pgBatchWriter, ckDB: ckDB, ckBatchWriter: ckBatchWriter, } } func (p *TradingDataPersist) Init() (err error) { // err = p.db.AutoMigrateTables( // &backtest.BacktestTradingPlan{}, // &backtest.Trade{}, // ) return } func (p *TradingDataPersist) GetTradePlanById(planId int64) (plan *entity.TradePlan, err error) { plan = new(entity.TradePlan) err = p.db.Select(plan, `select * from t_trade_plan where id = ?`, planId) if err != nil { return } if plan.InstId == "" { err = data.ErrorNotExists return } return } // SaveBacktestTradingPlan 保存交易计划回测结果 func (p *TradingDataPersist) SaveBacktestTradingPlan(ctx context.Context, backtestTradingPlan *backtest.BacktestTradingPlan) (err error) { datas := make([]any, 0, len(backtestTradingPlan.Trades)+1) datas = append(datas, backtestTradingPlan) for _, trade := range backtestTradingPlan.Trades { datas = append(datas, trade) } err = persist.InsertBatch(p.pgBatchWriter, ctx, datas) return } // ListBacktestLogs 用户交易计划回测记录查询 func (p *TradingDataPersist) ListBacktestLogs(userId int64) (backtestLogs []*backtest.BacktestTradingPlan, err error) { err = p.db.Select(&backtestLogs, ` select * from t_backtest_trading_plan where user_id = ? order by id desc `, userId) return } func (p *TradingDataPersist) ListBacktestTrades(backtestId int64) (trades []*trade.TradeOrder, err error) { err = p.db.Select(&trades, ` select * from t_backtest_trading_order where backtest_id = ? order by id asc `, backtestId) return }