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.
 
 

58 lines
1.7 KiB

package repository
import (
"fmt"
"sig-pub/pkg/data"
"sig-pub/pkg/storage/persist"
"sig-pub/pkg/trade"
)
type BacktestRepository struct {
db *persist.DB
}
func NewBacktestRepository(db *persist.DB) *BacktestRepository {
return &BacktestRepository{
db: db,
}
}
// ListBacktestLogs 用户交易计划回测记录查询
func (p *BacktestRepository) ListBacktestLogs(userId int64, page data.Page) (backtestLogs []*trade.BacktestTradingPlan, err error) {
err = p.db.Select(&backtestLogs, `
select * from t_backtest_trading_plan where user_id = ?
order by id desc
offset ? limit ?
`, userId, page.Offset, page.Limit)
return
}
// BacktestLogTrades 交易计划回测交易单详情
func (p *BacktestRepository) BacktestLogTrades(userId, backtestId int64, page data.Page) (total int, tradeOrders []*trade.TradeOrder, err error) {
sqlFrom := `
from t_backtest_trading_order
where backtest_id = (select id from t_backtest_trading_plan where id = ? and user_id = ?)
`
err = p.db.Select(&total, fmt.Sprintf(`
select count(*) %s
`, sqlFrom), backtestId, userId)
if err != nil || total == 0 {
return
}
err = p.db.Select(&tradeOrders, fmt.Sprintf(`
select * %s
order by trade_id asc
offset ? limit ?
`, sqlFrom), backtestId, userId, page.Offset, page.Limit)
return
}
// BacktestLogStats 交易计划回测结果统计信息
func (p *BacktestRepository) BacktestLogStats(userId, backtestId int64) (stats *trade.BacktestTradingPlan, err error) {
stats = &trade.BacktestTradingPlan{}
err = p.db.Select(stats, `
select * from t_backtest_trading_plan_stats
where backtest_id = (select id from t_backtest_trading_plan where id = ? and user_id = ?)
`, backtestId, userId)
return
}