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
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 |
|
}
|
|
|