{"id":51251127,"url":"https://github.com/danielinux7/backtick","last_synced_at":"2026-06-29T07:01:29.891Z","repository":{"id":365270169,"uuid":"1246905355","full_name":"danielinux7/backtick","owner":"danielinux7","description":"Replay Binance markets bar-by-bar and tick-by-tick with real bid/ask time \u0026 sales, footprint, and hypothetical trades. Open source, local-first.","archived":false,"fork":false,"pushed_at":"2026-06-16T15:47:11.000Z","size":1850,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-16T17:14:44.671Z","etag":null,"topics":["backtesting","binance","cryptocurrency","fastapi","lightweight-charts","order-flow","pwa","replay","trading","trading-tools"],"latest_commit_sha":null,"homepage":"https://backtick.to","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielinux7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-22T17:27:26.000Z","updated_at":"2026-06-16T15:50:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/danielinux7/backtick","commit_stats":null,"previous_names":["danielinux7/backtick"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/danielinux7/backtick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielinux7%2Fbacktick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielinux7%2Fbacktick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielinux7%2Fbacktick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielinux7%2Fbacktick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielinux7","download_url":"https://codeload.github.com/danielinux7/backtick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielinux7%2Fbacktick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34916411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backtesting","binance","cryptocurrency","fastapi","lightweight-charts","order-flow","pwa","replay","trading","trading-tools"],"created_at":"2026-06-29T07:01:28.535Z","updated_at":"2026-06-29T07:01:29.885Z","avatar_url":"https://github.com/danielinux7.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Backtick\n\n**Replay the market tick by tick.** Backtick is a local-first, open-source web app\nfor replaying Binance history candle-by-candle *and* trade-by-trade — with a real\nbid/ask tape, footprint, and hypothetical trades — built for discretionary\nbacktesting.\n\n🌐 **Live:** [backtick.to](https://backtick.to) · 📖 [Docs](https://backtick.to/docs) · ℹ️ [About](https://backtick.to/about)\n\n![Backtick](frontend/icons/og-image.png)\n\n## Why it's different\n\nMost replay tools just move a candle forward. Backtick surfaces the order flow\n*inside* the bar — the reads other platforms gate behind a premium tier:\n\n- **True time \u0026 sales** — every print tagged buy/sell from Binance aggTrades' real\n  `is_buyer_maker` flag (green = aggressive buy at the ask, orange = sell at the\n  bid), with a large-prints percentile highlighter.\n- **Tick-by-tick replay + synced tape** — step or auto-play individual aggTrades as\n  the forming candle rebuilds, with the tape in lockstep; 1×–200×.\n- **Footprint** — per-candle buy/sell volume by price level, so absorption and\n  imbalance are visible inside the bar.\n- **Open source \u0026 local-first** — runs on your machine, reads straight from Binance,\n  and your hypothetical trades stay in your own session.\n\nPlus the usual sandbox: candle replay, market/limit trades with SL/TP, indicators\n(EMA / RSI / CVD / Volume / Volume Profile / Liquidations), drawing tools, a\nwatchlist, live + replay modes, and an installable PWA.\n\n## Quickstart\n\nUses a virtualenv (never install into system Python):\n\n```bash\npython3 -m venv /tmp/backtick_venv\n/tmp/backtick_venv/bin/pip install -r requirements.txt -r requirements-dev.txt\n/tmp/backtick_venv/bin/uvicorn backend.main:app --reload --port 8765\n```\n\nOpen \u003chttp://localhost:8765\u003e — the marketing landing is at `/`, the chart app at\n`/app`. It opens on SOLUSDT 4h, roughly two months back, so there's something to\nstep through immediately.\n\n## Tests\n\n```bash\n/tmp/backtick_venv/bin/pytest -q     # backend unit tests (no network)\nnpx playwright test                  # frontend E2E smoke (needs server on :8765)\n```\n\nUnit tests cover the riskiest logic — gap-fill (`_missing_ranges`) and trade\nSL/TP/limit fills + snapshot round-trip. The Playwright smoke test hits live\nBinance, so treat a network failure as flaky, not a regression.\n\n## Layout\n\n```\nbackend/\n  main.py          FastAPI app + chart/replay routes, page routes, /healthz\n  binance.py       historical klines via Binance REST + parquet cache w/ gap-fill\n  replay.py        Session / Trade / SessionStore; SL/TP + limit-fill logic\n  aggtrades.py     aggTrades fetch for tick replay / CVD\n  auth.py, routes_auth.py, db.py, models.py, snapshots.py, exchange_info.py\nfrontend/\n  landing.html, docs.html, about.html, contact.html   marketing site (no-JS)\n  site.css                                             marketing styles\n  index.html, app.js, style.css                        the chart app\n  avatars.js, symbol-picker.js, pwa.js, auth-modal.js\n  sw.js            service worker (CACHE_VERSION bumped per deploy)\n  manifest.webmanifest, icons/\nscripts/\n  bump_sw_version.py   content-hashes the shell into sw.js CACHE_VERSION\n```\n\n## Deploy\n\nDeploys to [Render](https://render.com) from `render.yaml` (auto-deploy on push to\n`main`). The build runs `scripts/bump_sw_version.py` so clients pick up new frontend\nassets via the service-worker cache. Secrets — `SESSION_SECRET`, Google OAuth\n(`GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET`) — live in environment variables, never\nin the repo.\n\n## Disclaimer\n\nBacktick is a backtesting and education tool, not financial advice. Markets are\nrisky; nothing here is a recommendation to trade.\n\n## License\n\n[MIT](LICENSE) © 2026 Danial Zakaria\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielinux7%2Fbacktick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielinux7%2Fbacktick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielinux7%2Fbacktick/lists"}