mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-22 03:37:36 +08:00
fix: fetch all Hyperliquid fills — UserFillsByTime is capped at 100
Root cause of the dashboard over-reporting profit while the account lost money: the fill sync used UserFillsByTime, which hard-caps at 100 fills per response. At 20x/4-position frequency the account does >100 fills/24h, so ~20% of fills were silently dropped — and the dropped ones skewed toward losers, inflating recorded PnL and under-counting fees. Verified: over a 46h window the DB showed net +$39 while Hyperliquid official was -$18.6, and the equity drop ($176 -> $156) confirmed the loss. Switch GetTrades to UserFills (returns up to 2000 recent fills), filtering to startTime client-side, and widen the sync lookback 24h -> 7d so gaps backfill. Verified live: a sync now pulls 675 fills where it previously always received exactly 100. Note: this stops future drift; already-corrupted historical position rows are not retroactively rebuilt (dedup blocks re-processing). Account equity remains the authoritative scoreboard.
This commit is contained in:
@@ -20,13 +20,16 @@ func (t *HyperliquidTrader) SyncOrdersFromHyperliquid(traderID string, exchangeI
|
||||
return fmt.Errorf("store is nil")
|
||||
}
|
||||
|
||||
// Get recent trades (last 24 hours)
|
||||
startTime := time.Now().Add(-24 * time.Hour)
|
||||
// Look back 7 days. GetTrades now pulls up to 2000 recent fills (UserFills)
|
||||
// and filters to this window, so a wide lookback backfills any fills missed
|
||||
// during past outages/gaps without dropping recent ones. Dedup by trade ID
|
||||
// keeps re-processing idempotent.
|
||||
startTime := time.Now().Add(-7 * 24 * time.Hour)
|
||||
|
||||
logger.Infof("🔄 Syncing Hyperliquid trades from: %s", startTime.Format(time.RFC3339))
|
||||
|
||||
// Use GetTrades method to fetch trade records
|
||||
trades, err := t.GetTrades(startTime, 1000)
|
||||
trades, err := t.GetTrades(startTime, 2000)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to get trades: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user