{"repo":"chrisleekr/binance-trading-bot","free":true,"listed":false,"github":"https://github.com/chrisleekr/binance-trading-bot","clone":"git clone https://github.com/chrisleekr/binance-trading-bot.git","description":"Automated Binance trading bot with pluggable strategies, historical backtesting, and a live dashboard","language":"TypeScript","stars":5543,"topics":["binance","binance-api","binance-api-node","binance-trading-bot","bot","cryptocurrency","cryptotrading","grid-trading","technical-analysis-indicators","trading-bot","traidingview"],"license":"Apache-2.0","category":"trading_bot","readme_excerpt":"<div align=\"center\">\n\n# Binance Trading Bot\n\n**Automated Binance trading bot with pluggable strategies, historical backtesting, and a live dashboard.**<br/> Self-hosted. Multiple strategy profiles: grid, momentum, or rebalancing.\n\n[Documentation](https://chrisleekr.github.io/binance-trading-bot) · [Quick start](#quick-start-development) · [Deploy](deploy/README.md) · [Strategies](https://chrisleekr.github.io/binance-trading-bot/concepts/strategies/)\n\n[![CI](https://img.shields.io/github/actions/workflow/status/chrisleekr/binance-trading-bot/ci.yml?branch=main&label=CI)](https://github.com/chrisleekr/binance-trading-bot/actions/workflows/ci.yml) [![Docs](https://img.shields.io/github/actions/workflow/status/chrisleekr/binance-trading-bot/docs.yml?branch=main&label=docs)](https://chrisleekr.github.io/binance-trading-bot) [![Release](https://img.shields.io/github/v/release/chrisleekr/binance-trading-bot?sort=semver)](https://github.com/chrisleekr/binance-trading-bot/releases) [![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)\n\n[![Docker pulls](https://img.shields.io/docker/pulls/chrisleekr/binance-trading-bot)](https://hub.docker.com/r/chrisleekr/binance-trading-bot) [![Stars](https://img.shields.io/github/stars/chrisleekr/binance-trading-bot)](https://github.com/chrisleekr/binance-trading-bot/stargazers) [![Contributors](https://img.shields.io/github/contributors/chrisleekr/binance-trading-bot)](https://github.com/chrisleekr/binance-trading-bot/graphs/contributors)\n\n<img src=\"docs/assets/readme/dashboard.png\" alt=\"Dashboard showing open positions, open orders, market trend and the monitored symbol table\" width=\"900\" />\n\n</div>\n\n<!-- prettier-ignore -->\n> [!WARNING]\n> **I cannot guarantee whether you can make money or not. Use it at your own risk.** I have no responsibility for any loss or hardship incurred directly or indirectly by using this code. Read the [disclaimer](#disclaimer) before using it.\n>\n> Under active development and not recommended for real funds.\n\n## How it works\n\nYou run the app on your own server, connect it to your Binance account with an API key, and it watches the market and places buy and sell orders on your behalf. Once running, it repeats a short loop for every coin you told it to watch: read the market, run your strategy's rules, decide buy / sell / wait, and act.\n\n- **Strategy-pluggable.** A _strategy_ is the rulebook the bot trades by. Three ship today: **trailing-trade**, **momentum**, and **rebalance**, and you pick one per profile. Each lives in its own package behind a shared contract, so adding a fourth is mostly a new package plus a registry entry, not a rewrite of the trading loop.\n- **Account-scoped profiles.** One operator login owns one or more Binance _accounts_. Each account is one API key pair, one environment (testnet or live), and one wallet. Each account runs N independent _profiles_, each with its own coins, budget, and strategy, all sharing that account's wallet.\n- **Reliability-first.** Crash-only worker, idempotent jobs, and a version-aware per-symbol state commit mean a restart resumes cleanly and never double-places an order.\n\nPersistence is Postgres + TimescaleDB; cache and queues are Redis + BullMQ. Schema lives in [`packages/db`](packages/db).\n\n### Act on a symbol\n\nEvery monitored symbol gets a workspace: live market data, the strategy's current signal, open orders, and manual overrides in one place.\n\n<img src=\"docs/assets/readme/symbol-workspace.png\" alt=\"Symbol workspace showing a live candle chart with the entry price and trailing stop drawn on it\" width=\"900\" />\n\n### Tune a strategy, then backtest it\n\nConfigure a strategy per profile, then replay it against historical candles before risking anything. Every run is kept, so you can compare windows and symbols side by side.\n\n<img src=\"docs/assets/readme/backtest-history.png\" alt=\"Backtest history listing past runs with their window period, status and profit or loss\" width=\"900\" />\n\nMore screens are covered in the [user guide](https://chrisleekr.github.io/binance-trading-bot/user-guide/).\n\n## Configuration\n\nPer-profile configuration (grid, indicators, notifier providers, Technicals gates) lives in the database and is editable through the SPA after first run. See [configure a profile](https://chrisleekr.github.io/binance-trading-bot/get-started/configure/).\n\nProcess-level environment variables (`DATABASE_URL`, `REDIS_URL`, `WEB_ORIGIN`, `AUTH_SECRET`, etc.) are listed in [`.env.example`](.env.example) and described in the [environment variable reference](https://chrisleekr.github.io/binance-trading-bot/operations/env-vars/).\n\n## Quick start (development)\n\nPrerequisites: [Bun](https://bun.sh) 1.3+ and Docker (with the `compose` plugin) for the local Postgres + Redis stack.\n\nRun all commands from the repo root.\n\n```bash\n# 1. Install deps, write .env from .env.example, bring up Postgres + Redis\n#    with host ports exposed (via the local compose override), and run\n#    migrations.\nbun install\nbun run setup\n\n# 2. Start api + web + worker + technicals via turbo\nbun run dev\n```\n\nOpen the SPA at `http://localhost:5173`.\n\nTo run the whole stack in containers instead, use `bun run docker:dev`. One `app` service (ROLE=all) serves the SPA + `/api` on `http://localhost:53000`.\n\n## Quick start (deploy to a VM)\n\nThe 9-step operator runbook lives at [`deploy/README.md`](deploy/README.md). It covers `.env`, `AUTH_SECRET`, image pull, `docker compose up`, migrations, onboarding, IP-allowlisting the Binance key, smoke tests, and three TLS options.\n\nImages are published to Docker Hub as `chrisleekr/binance-trading-bot:vX.Y.Z`. Pin a version with `IMAGE_TAG` rather than tracking `:latest`.\n\n## Documentation\n\nThe full guide is at **<https://chrisleekr.github.io/binance-trading-bot>**, split by audience:\n\n| Audience | What's there |\n| --- | --- |\n| [**Get started**](https://chrisleekr.github.io/binance-trading-bot/get-started/) | Install, configure a profile, go live |\n| [**User guide**](https://chrisleekr.github.io/binance-trading-bot/user-guide/) | Dashboard, symbol workspace, profile and account settings |\n| [**Concepts**](https://chrisleekr.github.io/binance-trading-bot/concepts/) | Strategies, discovery, technicals, backtesting, notifiers, written for non-experts |\n| [**Operations**](https://chrisleekr.github.io/binance-trading-bot/operations/) | Deploy, kill switch, environment variables, troubleshooting |\n| [**Contributing**](https://chrisleekr.github.io/binance-trading-bot/contributing/) | Architecture, plugin contracts, CI gates, coding rules, testing |\n\nBuild the site locally:\n\n```bash\nbun run docs:install\nbun run docs:serve   # http://127.0.0.1:8000\n```\n\n## Contributing\n\nIssues and pull requests are welcome at [github.com/chrisleekr/binance-trading-bot](https://github.com/chrisleekr/binance-trading-bot).\n\n1. Read [`CONTRIBUTING.md`](CONTRIBUTING.md) for the workflow.\n2. Read [`AGENTS.md`](AGENTS.md) for the engineering charter and the invariants (`CLAUDE.md` is a symlink alias for Claude Code).\n3. `bun run lint` and `bun run typecheck` must be clean before opening a pull request.\n\nSecurity issues: please follow [`SECURITY.md`](SECURITY.md) rather than opening a public issue.\n\n## License\n\n[Apache-2.0](LICENSE). Third-party attributions are in [`NOTICE`](NOTICE).\n\n## Disclaimer\n\nI give no warranty and accept no responsibility or liability for the accuracy or the completeness of the information and materials contained in this project. Under no circumstances will I be held responsible or liable in any way for any claims, damages, losses, expenses, costs or liabilities whatsoever (including, without limitation, any direct or indirect damages for loss of profits, business interruption or loss of information) resulting from or arising directly or indirectly from your use of or inability to use this code or any code linked to it, or from your reliance on the information and material on this code, even if I have been advised of the possibility of such damages in advance.\n\n**So use it at your own risk!**\n","default_branch":"main","files":2330,"tree":[".branch-name-lint.json",".claude/rules/principles.md",".claude/skills/feature-walkthrough/SKILL.md",".coderabbit.yaml",".cursorrules",".dockerignore",".editorconfig",".env.example",".gitattributes",".github/CODEOWNERS",".github/ISSUE_TEMPLATE/bug_report.yml",".github/ISSUE_TEMPLATE/config.yml",".github/ISSUE_TEMPLATE/feature_request.yml",".github/PULL_REQUEST_TEMPLATE.md",".github/workflows/ci.yml",".github/workflows/codeql.yml",".github/workflows/docs.yml",".github/workflows/nightly.yml",".github/workflows/release-please.yml",".gitignore",".gitlab-ci.yml",".husky/commit-msg",".husky/pre-commit",".husky/pre-push",".oxlintrc.json",".prettierignore",".release-please-config-beta.json",".release-please-config.json",".release-please-manifest.json",".tool-versions",".vscode/extensions.json",".vscode/settings.json","AGENT.md","AGENTS.md","CHANGELOG.md","CLAUDE.md","CODE_OF_CONDUCT.md","CONTRIBUTING.md","DESIGN.md","GEMINI.md","LICENSE","NOTICE","README.md","SECURITY.md","apps/api/__tests__/_helpers.ts","apps/api/__tests__/auth-integration.test.ts","apps/api/__tests__/auth.test.ts","apps/api/__tests__/bust-dashboard-cache.test.ts","apps/api/__tests__/client-ip.test.ts","apps/api/__tests__/cross-account.test.ts","apps/api/__tests__/enablement-gate.test.ts","apps/api/__tests__/env-docs.test.ts","apps/api/__tests__/fixtures/web-dist/index.html","apps/api/__tests__/global-setup.test.ts","apps/api/__tests__/global-setup.ts","apps/api/__tests__/index.test.ts","apps/api/__tests__/integration/onboarding-testcontainers.test.ts","apps/api/__tests__/key-projection.test.ts","apps/api/__tests__/lib/manual-orders.test.ts","apps/api/__tests__/lib/order-feasibility.test.ts","apps/api/__tests__/lib/period-window.test.ts","apps/api/__tests__/live-demo-boot.test.ts","apps/api/__tests__/live-demo-session-resolver.test.ts","apps/api/__tests__/log-err-serializer.test.ts","apps/api/__tests__/log-redaction.test.ts","apps/api/__tests__/login-throttle.test.ts","apps/api/__tests__/metrics-middleware.test.ts","apps/api/__tests__/onboarding.test.ts","apps/api/__tests__/openapi-doc.test.ts","apps/api/__tests__/origin-allowlist.test.ts","apps/api/__tests__/reset-chain-deadlock.test.ts","apps/api/__tests__/reset-password-integration.test.ts","apps/api/__tests__/reset-password.test.ts","apps/api/__tests__/reset-singletons.test.ts","apps/api/__tests__/route-helpers.test.ts","apps/api/__tests__/routes/account-health.test.ts","apps/api/__tests__/routes/account-settings.test.ts","apps/api/__tests__/routes/accounts.test.ts","apps/api/__tests__/routes/action-logs.test.ts","apps/api/__tests__/routes/ai-provider.route.test.ts","apps/api/__tests__/routes/api-keys.test.ts","apps/api/__tests__/routes/archive.test.ts","apps/api/__tests__/routes/audit-logs.test.ts","apps/api/__tests__/routes/backtests.test.ts","apps/api/__tests__/routes/backup-config.route.test.ts","apps/api/__tests__/routes/change-password.test.ts","apps/api/__tests__/routes/dashboard.test.ts","apps/api/__tests__/routes/discovery.test.ts","apps/api/__tests__/routes/dust-transfer-cancel.test.ts","apps/api/__tests__/routes/dust-transfer-mapper.test.ts","apps/api/__tests__/routes/dust-transfer.test.ts","apps/api/__tests__/routes/exchange-info.test.ts","apps/api/__tests__/routes/gate-status.test.ts","apps/api/__tests__/routes/lint-config.test.ts","apps/api/__tests__/routes/live-demo-guard-topology.test.ts","apps/api/__tests__/routes/live-demo-guard.test.ts","apps/api/__tests__/routes/manual-orders.test.ts","apps/api/__tests__/routes/notify-providers.test.ts","apps/api/__tests__/routes/ops-notify.test.ts","apps/api/__tests__/routes/orphan-orders.test.ts","apps/api/__tests__/routes/override.test.ts","apps/api/__tests__/routes/profile-diagnosis.test.ts","apps/api/__tests__/routes/profile-lint-config.test.ts","apps/api/__tests__/routes/profile-logs.test.ts","apps/api/__tests__/routes/profiles.test.ts","apps/api/__tests__/routes/research-removed.test.ts","apps/api/__tests__/routes/retention-config.route.test.ts","apps/api/__tests__/routes/risk.test.ts","apps/api/__tests__/routes/save-feasibility-diagnostics.test.ts","apps/api/__tests__/routes/status-parse.test.ts","apps/api/__tests__/routes/status.test.ts","apps/api/__tests__/routes/switch-strategy.test.ts","apps/api/__tests__/routes/symbols.test.ts","apps/api/__tests__/routes/technicals.test.ts","apps/api/__tests__/routes/worker-crons.test.ts","apps/api/__tests__/strategies/reason-attribution.test.ts","apps/api/__tests__/strategies/registry.test.ts","apps/api/__tests__/vitest-config.test.ts","apps/api/__tests__/web-dist.test.ts","apps/api/__tests__/ws-replay.test.ts","apps/api/__tests__/ws-upgrade.test.ts","apps/api/package.json","apps/api/scripts/reset-password.ts","apps/api/src/app.ts","apps/api/src/auth.ts","apps/api/src/backtest-signature.ts","apps/api/src/di.ts","apps/api/src/enablement-gate.ts","apps/api/src/env.ts","apps/api/src/index.ts","apps/api/src/lib/entry-halt.ts","apps/api/src/lib/manual-orders.ts","apps/api/src/lib/order-feasibility.ts","apps/api/src/lib/period-window.ts","apps/api/src/middleware/audit.ts","apps/api/src/middleware/auth.ts","apps/api/src/middleware/bust-dashboard-cache.ts","apps/api/src/middleware/client-ip.ts","apps/api/src/middleware/cors.ts","apps/api/src/middleware/error.ts","apps/api/src/middleware/logger.ts","apps/api/src/middleware/login-rate-limit.ts","apps/api/src/middleware/metrics.ts","apps/api/src/middleware/require-not-demo.ts","apps/api/src/middleware/require-user.ts","apps/api/src/middleware/security-headers.ts","apps/api/src/notifiers.ts","apps/api/src/profile-teardown.ts","apps/api/src/redis-helpers.ts","apps/api/src/route-helpers.ts","apps/api/src/routes/account-health.ts","apps/api/src/routes/account-settings.ts","apps/api/src/routes/accounts.ts","apps/api/src/routes/action-logs.ts","apps/api/src/routes/ai-provider.ts","apps/api/src/routes/api-keys.ts","apps/api/src/routes/archive.ts","apps/api/src/routes/audit-logs.ts","apps/api/src/routes/auth.ts","apps/api/src/routes/backtests.ts","apps/api/src/routes/backup.ts","apps/api/src/routes/dashboard.ts","apps/api/src/routes/discovery.ts","apps/api/src/routes/docs.ts","apps/api/src/routes/dust-transfer.ts","apps/api/src/routes/exchange-info.ts","apps/api/src/routes/gate-status.ts","apps/api/src/routes/health.ts","apps/api/src/routes/kill-switch.ts","apps/api/src/routes/manual-orders.ts","apps/api/src/routes/market-trend.ts","apps/api/src/routes/mount.ts","apps/api/src/routes/ops-notify.ts","apps/api/src/routes/orders.ts","apps/api/src/routes/orphan-orders.ts","apps/api/src/routes/override.ts","apps/api/src/routes/profile-diagnosis.ts","apps/api/src/routes/profile-logs.ts","apps/api/src/routes/profiles.ts","apps/api/src/routes/retention-config.ts","apps/api/src/routes/retention-status.ts","apps/api/src/routes/risk.ts","apps/api/src/routes/status.ts","apps/api/src/routes/strategies.ts","apps/api/src/routes/symbols.ts","apps/api/src/routes/technicals-health.ts","apps/api/src/routes/technicals.ts","apps/api/src/routes/worker-crons.ts","apps/api/src/routes/ws.ts","apps/api/src/strategies.ts","apps/api/src/strategies/registry.ts","apps/api/src/types.ts","apps/api/src/web-dist.ts","apps/api/src/web-static.ts","apps/api/src/ws/registry.ts","apps/api/src/ws/replay.ts","apps/api/tsconfig.json","apps/api/vitest.config.ts","apps/server/Dockerfile","apps/server/__tests__/ports.test.ts","apps/server/docker-entrypoint.sh","apps/server/package.json","apps/server/src/index.ts","apps/server/src/ports.ts","apps/server/tsconfig.json","apps/server/vitest.config.ts","apps/web/README.md","apps/web/__tests__/_deferred-responder.ts","apps/web/__tests__/account-balances-panel.test.tsx","apps/web/__tests__/account-health-bar.test.tsx","apps/web/__tests__/account-kill-switch.test.tsx","apps/web/__tests__/account-route.test.tsx","apps/web/__tests__/account-settings-route.test.tsx","apps/web/__tests__/account-switcher.test.tsx","apps/web/__tests__/account-wire.test.ts","apps/web/__tests__/action-banner.test.tsx","apps/web/__tests__/activity-feed.test.tsx","apps/web/__tests__/add-symbol-panel.test.tsx","apps/web/__tests__/aggregate-pnl.test.ts","apps/web/__tests__/ai-provider-card.test.tsx","apps/web/__tests__/amount-or-percent-widget.test.tsx","apps/web/__tests__/api-key-panel.test.tsx","apps/web/__tests__/api.test.ts","apps/web/__tests__/app-css.test.ts","apps/web/__tests__/app-shell.test.tsx","apps/web/__tests__/array-seed.test.ts","apps/web/__tests__/asset-names.test.ts","apps/web/__tests__/auto-form.test.tsx","apps/web/__tests__/backtest-attribute-blocker.test.ts","apps/web/__tests__/backtest-config-schema.test.ts","apps/web/__tests__/backtest-decision-breakdown.test.ts","apps/web/__tests__/backtest-diagnosis-spine-render.test.tsx","apps/web/__tests__/backtest-diagnosis-spine.test.ts","apps/web/__tests__/backtest-fills.test.tsx","apps/web/__tests__/backtest-llm-advisor.test.tsx","apps/web/__tests__/backtest-price-charts.test.tsx","apps/web/__tests__/backtest-recommendations.test.tsx","apps/web/__tests__/backtest-results.test.tsx","apps/web/__tests__/backtest-round-trips.test.tsx","apps/web/__tests__/backtest-route.test.tsx","apps/web/__tests__/backup-restore-route.test.tsx","apps/web/__tests__/backup-settings-card.test.tsx","apps/web/__tests__/balance-value.test.ts","apps/web/__tests__/basket-symbols.test.ts","apps/web/__tests__/build-ticker-metrics.test.ts","apps/web/__tests__/bulk-order-drawer.test.tsx","apps/web/__tests__/bull-hold-config-form.test.ts","apps/web/__tests__/chart-interval-selector.test.tsx","apps/web/__tests__/coin-icon.test.tsx","apps/web/__tests__/condition-timeline.test.tsx","apps/web/__tests__/config-diagnostics.test.tsx","apps/web/__tests__/config-diff.test.ts","apps/web/__tests__/cost-model-fields.test.tsx","apps/web/__tests__/dashboard-aggregate-query.test.ts","apps/web/__tests__/discovery-dashboard.test.tsx","apps/web/__tests__/discovery-disposition.test.ts","apps/web/__tests__/discovery-funnel-panel.test.tsx","apps/web/__tests__/dust-transfer-route.test.tsx","apps/web/__tests__/enablement-policy-panel.test.tsx","apps/web/__tests__/entry-sizing-widget.test.tsx","apps/web/__tests__/equity-pnl-card.test.tsx","apps/web/__tests__/error-boundary.test.tsx","apps/web/__tests__/error-message.test.ts","apps/web/__tests__/features/profile/wizard/profile-create-wizard.test.tsx","apps/web/__tests__/features/profile/wizard/reducer.test.ts","apps/web/__tests__/field-renderer.test.tsx","apps/web/__tests__/focus-config-field.test.ts","apps/web/__tests__/force-sell-guard-nudge.test.tsx","apps/web/__tests__/force-trigger-panel.test.tsx","apps/web/__tests__/form-actions.test.tsx","apps/web/__tests__/format-tick.test.ts","apps/web/__tests__/format-time.test.ts","apps/web/__tests__/format.test.ts","apps/web/__tests__/friendly-error-label.test.ts","apps/web/__tests__/gate-scorecard.test.tsx","apps/web/__tests__/helpers/pending-fetch.ts","apps/web/__tests__/history-route.test.tsx","apps/web/__tests__/i18n.test.ts","apps/web/__tests__/index-html-csp.test.ts","apps/web/__tests__/index-route.test.tsx","apps/web/__tests__/investigate-button.test.tsx","apps/web/__tests__/json-schema-resolver.test.ts","apps/web/__tests__/label.test.tsx","apps/web/__tests__/live-demo-banner.test.tsx","apps/web/__tests__/live-gate-status-card.test.tsx","apps/web/__tests__/live-profile-provider.test.tsx","apps/web/__tests__/live-scorecard.test.ts","apps/web/__tests__/live-vs-backtest-card.test.tsx","apps/web/__tests__/loading-placeholder-gate.test.ts","apps/web/__tests__/loading-placeholders.test.tsx","apps/web/__tests__/log-viewer-panel.test.tsx","apps/web/__tests__/login-route.test.tsx","apps/web/__tests__/market-trend-card.test.tsx","apps/web/__tests__/micro-label-size-floor.test.ts","apps/web/__tests__/momentum-decision-breakdown.test.ts","apps/web/__tests__/notifications-panel.test.tsx","apps/web/__tests__/onboarding-route.test.tsx","apps/web/__tests__/onboarding-status-query.test.ts","apps/web/__tests__/ops-health-panel.test.tsx","apps/web/__tests__/ops-notify-card.test.tsx","apps/web/__tests__/order-book-group.test.ts","apps/web/__tests__/order-raw.test.ts","apps/web/__tests__/orphan-orders-route.test.tsx","apps/web/__tests__/override-watch-classification.test.tsx","apps/web/__tests__/page-header.test.tsx","apps/web/__tests__/page-skeleton.test.tsx","apps/web/__tests__/panel.test.tsx","apps/web/__tests__/pending-fetch.test.ts","apps/web/__tests__/percent-convert-widget.test.tsx","apps/web/__tests__/pnl-value.test.tsx","apps/web/__tests__/positions-orders-panel.test.tsx","apps/web/__tests__/preview-modules.test.ts","apps/web/__tests__/profile-config-panel.test.tsx","apps/web/__tests__/profile-general-panel.test.tsx","apps/web/__tests__/profile-health-strip.test.tsx","apps/web/__tests__/profile-manage-card.test.tsx","apps/web/__tests__/profile-manage-sheet.test.tsx","apps/web/__tests__/profile-page-header.test.tsx","apps/web/__tests__/profile-route-retirement.test.tsx","apps/web/__tests__/profile-status.test.tsx","apps/web/__tests__/profile-switcher.test.tsx","apps/web/__tests__/pwa.test.ts","apps/web/__tests__/query-client.test.ts","apps/web/__tests__/realised-pnl-card.test.tsx","apps/web/__tests__/regime-status.test.ts","apps/web/__tests__/retention-receipt.test.ts","apps/web/__tests__/retention-settings-card.test.tsx","apps/web/__tests__/risk-panel.test.tsx","apps/web/__tests__/rollup-stats.test.ts","apps/web/__tests__/root-loader.test.tsx","apps/web/__tests__/route-error-card.test.tsx","apps/web/__tests__/route-pending.test.tsx","apps/web/__tests__/route-redirects.test.tsx","apps/web/__tests__/row-actions.test.tsx","apps/web/__tests__/save-diagnostics.test.ts","apps/web/__tests__/scoped-balances.test.tsx","apps/web/__tests__/scoped-kpi-strip.test.tsx","apps/web/__tests__/settings-route.test.tsx","apps/web/__tests__/setup-contract.test.ts","apps/web/__tests__/setup.ts","apps/web/__tests__/side-nav.test.tsx","apps/web/__tests__/status-bar.test.tsx","apps/web/__tests__/strategy-preview-panel.test.tsx","apps/web/__tests__/strategy-view-registry.test.tsx","apps/web/__tests__/stubs/virtual-pwa-register.ts","apps/web/__tests__/sw-register.test.ts","apps/web/__tests__/symbol-advanced-drawer.test.tsx","apps/web/__tests__/symbol-balances-panel.test.tsx","apps/web/__tests__/symbol-cancel-override-panel.test.tsx","apps/web/__tests__/symbol-candle-chart-overlays.test.tsx","apps/web/__tests__/symbol-candle-chart-precision.test.ts","apps/web/__tests__/symbol-chart-lines.test.ts","apps/web/__tests__/symbol-config-form.test.tsx","apps/web/__tests__/symbol-config-panel.test.tsx","apps/web/__tests__/symbol-detail-route.test.tsx","apps/web/__tests__/symbol-disable-banner.test.tsx","apps/web/__tests__/symbol-discovery-status.test.tsx","apps/web/__tests__/symbol-entry-blocker.test.tsx","apps/web/__tests__/symbol-grid-ladder.test.ts","apps/web/__tests__/symbol-logs-panel.test.tsx","apps/web/__tests__/symbol-order-book-panel.test.tsx","apps/web/__tests__/symbol-order-history-panel.test.tsx","apps/web/__tests__/symbol-pause-panel.test.tsx","apps/web/__tests__/symbol-position-strip.test.tsx","apps/web/__tests__/symbol-protective-stop-blocker.test.tsx","apps/web/__tests__/symbol-quote.test.ts","apps/web/__tests__/symbol-rail.test.tsx","apps/web/__tests__/symbol-recent-trades-panel.test.tsx","apps/web/__tests__/symbol-reserve-card.test.tsx","apps/web/__tests__/symbol-signal-panel.test.tsx","apps/web/__tests__/symbol-stats-strip.test.tsx","apps/web/__tests__/symbol-stop-tracking-panel.test.tsx","apps/web/__tests__/symbol-switcher.test.tsx","apps/web/__tests__/symbol-table.test.tsx","apps/web/__tests__/symbol-technicals-hooks.test.tsx","apps/web/__tests__/symbol-technicals-panel.test.tsx","apps/web/__tests__/symbol-tick-chips.test.tsx","apps/web/__tests__/symbol-trade-panels.test.tsx","apps/web/__tests__/symbol-workspace-overlays.test.ts","apps/web/__tests__/symbol-workspace.test.tsx","apps/web/__tests__/technicals-format.test.ts","apps/web/__tests__/technicals-gate-display.test.ts","apps/web/__tests__/technicals-health-pill.test.tsx","apps/web/__tests__/tick-trace-panel.test.tsx","apps/web/__tests__/timezone-context.test.tsx","apps/web/__tests__/top-bar-status.test.tsx","apps/web/__tests__/top-bar-ticker.test.tsx","apps/web/__tests__/trade-archive-panel.test.tsx","apps/web/__tests__/tt-mirror-parity.test.ts","apps/web/__tests__/unauthorized-redirect.test.tsx","apps/web/__tests__/unrealised-pnl.test.ts","apps/web/__tests__/use-document-title.integration.test.tsx","apps/web/__tests__/use-document-title.test.ts","apps/web/__tests__/use-flash-on-change.test.ts","apps/web/__tests__/use-override-outcome.test.tsx","apps/web/__tests__/use-preview-model.test.tsx","apps/web/__tests__/use-profile-socket.test.tsx","apps/web/__tests__/use-scroll-anchor.test.tsx","apps/web/__tests__/use-strategy-descriptor.test.tsx","apps/web/__tests__/use-theme.test.tsx"],"storefront":"/r/chrisleekr","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/chrisleekr/binance-trading-bot/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}