mirror of
https://github.com/laoxong/nofx.git
synced 2026-06-04 09:58:22 +08:00
705aa641b0
- Fix PostgreSQL placeholder conversion (? to $1, $2...) in all SQL queries - Fix int4 overflow for timestamp columns (ALTER to BIGINT) - Fix notional calculation bug in position Close() using proportional entry - Fix potential panic in DecisionTimestamp with bounds check - Fix nil pointer dereference in sliceUpTo with defensive checks - Fix race condition in releaseLock using sync.Once - Fix UnrealizedPnLPct always 0 in convertPositions - Improve Sharpe ratio calculation with proper negative return handling
41 lines
889 B
Go
41 lines
889 B
Go
package backtest
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
var persistenceDB *sql.DB
|
|
var dbIsPostgres bool
|
|
|
|
// UseDatabase enables database-backed persistence for all backtest storage operations.
|
|
// If isPostgres is true, queries will use $1, $2... placeholders instead of ?
|
|
func UseDatabase(db *sql.DB) {
|
|
persistenceDB = db
|
|
}
|
|
|
|
// UseDatabaseWithType enables database-backed persistence with explicit type.
|
|
func UseDatabaseWithType(db *sql.DB, isPostgres bool) {
|
|
persistenceDB = db
|
|
dbIsPostgres = isPostgres
|
|
}
|
|
|
|
func usingDB() bool {
|
|
return persistenceDB != nil
|
|
}
|
|
|
|
// convertQuery converts ? placeholders to $1, $2, etc. for PostgreSQL
|
|
func convertQuery(query string) string {
|
|
if !dbIsPostgres {
|
|
return query
|
|
}
|
|
result := query
|
|
index := 1
|
|
for strings.Contains(result, "?") {
|
|
result = strings.Replace(result, "?", fmt.Sprintf("$%d", index), 1)
|
|
index++
|
|
}
|
|
return result
|
|
}
|