コンテンツにスキップ

Saxo Magic Numbers Inventory (2026-04-12)

Scope

  • Directory: aegis_v3/aegis/broker/saxo/
  • Focus: timeout values, retry counts, rate/backoff knobs, price multipliers, chunk sizes, and polling intervals
  • Method: static line-by-line audit plus GitNexus query on timeout / retry / rate-limit flows

Inventory

File:Line Current value Why it matters Suggested config key
adapter.py:83 0.10 Reprice step percentage for spread orders saxo.reprice_step_pct
adapter.py:84 0.05 Minimum absolute repricing step in dollars saxo.reprice_min_step
adapter.py:85 1 Max repricing attempts before giving up saxo.reprice_max_attempts
adapter.py:89 0.50 Secondary repricing floor as percentage of original price saxo.reprice_floor_pct
adapter.py:90 1.05 Absolute credit floor used as a safety guard saxo.absolute_credit_floor
adapter.py:126 60 Spread quote cache TTL in seconds saxo.spread_quote_cache_ttl_sec
adapter.py:339 5000 Balance subscription refresh rate in milliseconds saxo.balance_refresh_rate_ms
adapter.py:522 / adapter.py:547 5.0 Max strike remap distance for Saxo-compatible options saxo.option_strike_remap_max_diff
adapter.py:741 3 Pending single-leg quote retry delay in seconds saxo.quote_pending_retry_delay_sec
adapter.py:1132 3 Pending multileg snapshot retry delay in seconds saxo.multileg_quote_retry_delay_sec
adapter.py:1200 / adapter.py:2397 50 Batch size for instrument detail fetches saxo.instrument_details_batch_size
adapter.py:1443 / adapter.py:1662 240.0 Default spread-order timeout budget in seconds saxo.order_timeout_sec
adapter.py:1596 10.0 Quick post-cancel fill recheck timeout in seconds saxo.cancel_recheck_timeout_sec
adapter.py:2036 0.30 Cap for repricing step as percentage of current price saxo.reprice_step_cap_pct
adapter.py:2326 30.0 Reconciliation poll timeout after OrderCommandTimeout saxo.timeout_reconcile_poll_sec
client.py:33 500, 502, 503 HTTP status codes considered retryable saxo.http_retryable_statuses
client.py:36 / client.py:39 / client.py:40 1.0, 8.0, 0.25, 0.1 Exponential backoff base/max, jitter, and floor saxo.http_retry_backoff_base_sec, saxo.http_retry_backoff_max_sec, saxo.http_retry_jitter_pct, saxo.http_retry_min_backoff_sec
client.py:52 / client.py:57 / client.py:62 120, 1, 10_000_000 Built-in Saxo rate-limit defaults used before headers arrive saxo.session_rate_limit_per_min, saxo.order_rate_limit_per_sec, saxo.app_day_rate_limit
client.py:185 / client.py:186 30.0, 3 Default request timeout and retry count saxo.http_timeout_sec, saxo.http_max_retries
client.py:201 / client.py:202 100, 5.0 NTP drift sampling interval and warning threshold saxo.ntp_check_interval_requests, saxo.ntp_drift_warn_sec
client.py:210-214 30, 20, 10, 300 Connector keepalive, pool size, per-host limit, DNS TTL saxo.http_keepalive_timeout_sec, saxo.http_connection_limit, saxo.http_limit_per_host, saxo.http_dns_ttl_sec
client.py:377 10 Per-request TCP connect timeout in seconds saxo.http_connect_timeout_sec
client.py:555 25 Default instrument search result limit saxo.instrument_search_limit
client.py:589 / client.py:809 / client.py:943 45.0 Heavy read timeout for option space, orders, positions saxo.heavy_read_timeout_sec
client.py:613 0.01 Strike price equality tolerance when matching option contracts saxo.option_strike_match_tolerance
client.py:680 1000 Multileg subscription refresh rate in milliseconds saxo.multileg_subscription_refresh_rate_ms
client.py:841 / client.py:872 14 ENS history lookback window in days saxo.ens_lookback_days
client.py:849 / client.py:897 30.0 ENS activity query timeout in seconds saxo.ens_timeout_sec
auth.py:59 / auth.py:60 1200, 2400 Fallback OAuth token TTL assumptions in seconds saxo.oauth_default_access_token_ttl_sec, saxo.oauth_default_refresh_token_ttl_sec
auth.py:78 / auth.py:81 60 Access/refresh expiry safety buffer in seconds saxo.oauth_expiry_buffer_sec
auth.py:159 86400 24-hour portal token fallback TTL in seconds saxo.oauth_portal_token_ttl_sec
auth.py:224 300.0 OAuth callback server wait timeout in seconds saxo.oauth_callback_timeout_sec
auth.py:260 8888 Local OAuth callback port fallback saxo.oauth_callback_port
models.py:24 86400 UIC cache TTL in seconds saxo.uic_cache_ttl_sec
streaming.py:70 12 Context ID suffix length derived from UUID hex saxo.streaming_context_id_suffix_len
streaming.py:111 / streaming.py:176 20, 10 WebSocket heartbeat and close timeout in seconds saxo.streaming_heartbeat_sec, saxo.streaming_close_timeout_sec

Notes

  • client.py:52-64 are vendor defaults mirrored from Saxo's documented rate limits; they are still hardcoded in code paths before response headers arrive.
  • adapter.py:83-90 are partially overrideable today, but the defaults still live in code and should be surfaced explicitly in config if cross-environment tuning is expected.
  • auth.py:59-60 are fallback values rather than live token claims; externalizing them would make that assumption visible during incident response.
  • Why: these constants sit on order placement, retry cadence, token lifetime, and streaming reliability paths, so inventorying them first is safer than changing behavior during the overnight queue.