修复 scale-in 后 leg.EntryPrice 不更新 + 重启恢复时加载 scale prices
- trader.go: scale-in 后用 weightedAvgPrice 更新 LongLeg/ShortLeg.EntryPrice - trader.go: restoreOpenPositions 从 orders 表加载 scale prices 重建完整价格切片 - db/trade_repo.go: 新增 GetScalePrices(tradeID) 方法 - README: v1.2.1 版本记录
This commit is contained in:
@@ -235,6 +235,31 @@ func scanTrades(rows *sql.Rows) ([]TradeRecord, error) {
|
||||
return trades, rows.Err()
|
||||
}
|
||||
|
||||
// GetScalePrices returns scale-in order prices for a trade, grouped by leg.
|
||||
func (d *DB) GetScalePrices(tradeID int64) (longPrices, shortPrices []float64, err error) {
|
||||
rows, err := d.Query(`SELECT leg, price FROM orders
|
||||
WHERE trade_id=? AND type='scale' AND price IS NOT NULL
|
||||
ORDER BY id`, tradeID)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var leg string
|
||||
var price float64
|
||||
if err := rows.Scan(&leg, &price); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
switch leg {
|
||||
case "long":
|
||||
longPrices = append(longPrices, price)
|
||||
case "short":
|
||||
shortPrices = append(shortPrices, price)
|
||||
}
|
||||
}
|
||||
return longPrices, shortPrices, rows.Err()
|
||||
}
|
||||
|
||||
// GetClosedStats returns convergence counts from the database.
|
||||
func (d *DB) GetClosedStats() (converged, diverged, flat, total int, err error) {
|
||||
if err = d.QueryRow("SELECT COUNT(*) FROM trades WHERE status='closed'").Scan(&total); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user