You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

76 lines
2.1 KiB

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
}