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