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.
55 lines
1.4 KiB
55 lines
1.4 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" |
|
) |
|
|
|
type TradingDataPersist struct { |
|
db *persist.RDB |
|
ckDB *ck.ClickhouseDB |
|
ckBatchWriter *ck.ClickhouseBatchWriter |
|
} |
|
|
|
func NewTradingDataPersist(db *persist.RDB, ckDB *ck.ClickhouseDB, ckBatchWriter *ck.ClickhouseBatchWriter) *TradingDataPersist { |
|
return &TradingDataPersist{ |
|
db: db, |
|
ckDB: ckDB, |
|
ckBatchWriter: ckBatchWriter, |
|
} |
|
} |
|
|
|
func (p *TradingDataPersist) Init() (err error) { |
|
err = p.ckDB.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) { |
|
err = ck.InsertBatch(p.ckBatchWriter, ctx, []*backtest.BacktestTradingPlan{backtestTradingPlan}) |
|
if err != nil { |
|
return |
|
} |
|
err = ck.InsertBatch(p.ckBatchWriter, ctx, backtestTradingPlan.Trades) |
|
return |
|
}
|
|
|