# Server PORT=8080 # Engine tuning MIN_NET_PROFIT_PCT=0.0005 # 0.05% minimum net return to execute MAX_TRADE_BTC=0.25 # max BTC per simulated trade STALE_MS=3000 # quote older than this is ignored FLICKER_CONFIRM_MS=150 # opportunity must persist this long before executing LATENCY_MS=120 # simulated detection->execution latency LATENCY_SLIPPAGE_BPS=2 # adverse price drift applied during latency (basis points) # Risk CIRCUIT_BREAKER_LOSSES=5 # consecutive losing trades before pausing CIRCUIT_BREAKER_COOLDOWN_MS=15000 # Wallets (per exchange, simulated) INITIAL_USDT=50000 INITIAL_BTC=0.5 # Demo mode (injects synthetic divergences, clearly flagged) DEMO_MODE=false # Feed recorder (NDJSON to data/) RECORD_FEED=false # API docs — Scalar at GET /api-docs (OpenAPI generated from Zod; no env vars required) # Observability — https://sentry.io (project: arbpulse) SENTRY_DSN= # Tracing/spans gate — default off. Error monitoring is always on when SENTRY_DSN # is set; spans are only created/exported when SENTRY_TRACING is enabled. Kept off # by default so 24/7 operation stays within Sentry's free-tier span quota. SENTRY_TRACING=false # Structured logs (pino); correlation IDs on REST, SSE, and WS hot path LOG_LEVEL=info # Upstash Redis — rate limit on /api/* and short-TTL snapshot cache for GET /api/state UPSTASH_REDIS_REST_URL="https://natural-baboon-144595.upstash.io" UPSTASH_REDIS_REST_TOKEN="gQAAAAAAAjTTAAIgcDE0MDk4MGZlOWMwN2M0NTdiOWQ5MWYxMjVhOWMyNWVlZQ"