mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-06-30 17:41:22 +08:00
- 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
23 lines
682 B
Go
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
|
|
}
|