Files
nofx/trader/types/parse.go
tinkle-community 9ea9bd705f fix(trader): harden API calls with timeouts, strict balance parsing, error context
- binance/bybit/gate: SDK default http.DefaultClient has no timeout; use a
  dedicated 30s-timeout client so a hung connection cannot stall the loop
- bybit: stop mutating http.DefaultClient.Transport, which leaked the
  referer header into every other HTTP request in the process
- add types.ParseFloatField: empty exchange fields stay zero, but malformed
  numeric values now surface as errors instead of silently becoming zero
  balances (applied to GetBalance across 8 exchanges)
- wrap order/market-data errors in auto_trader_orders and okx cancel paths
  with symbol context; log per-order cancel failures in okx CancelAllOrders
2026-06-11 00:30:34 +08:00

23 lines
682 B
Go

package types
import (
"fmt"
"strconv"
)
// ParseFloatField parses a numeric string field from an exchange API response.
// An empty string is treated as zero, since exchanges commonly omit fields
// that have no value (e.g. unrealized PnL with no open position). A non-empty
// value that fails to parse returns an error naming the field, so a malformed
// API response surfaces instead of silently becoming a zero balance.
func ParseFloatField(field, value string) (float64, error) {
if value == "" {
return 0, nil
}
v, err := strconv.ParseFloat(value, 64)
if err != nil {
return 0, fmt.Errorf("failed to parse %s value %q: %w", field, value, err)
}
return v, nil
}