No description
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
Trader Joes - Trade Republic ticker
Dieses Projekt ist ein leichtgewichtiger Node.js-Dienst, der Live-Marktdaten (Ticker) von Trade Republic per WebSocket abonniert und in einer Postgres-Datenbank speichert. Es liest aktive Symbole aus einer watchlist-Tabelle, verbindet sich zum Trade-Republic-WebSocket, registriert sich, abonniert die Ticker und schreibt relevante Bid-Updates in die Tabelle ticker_tr. Um die Datenmenge zu begrenzen, kommt ein Deadband-Filter zum Einsatz.
Kurzüberblick
- Datenquelle: WebSocket
wss://api.traderepublic.com/mit Registrierung und Symbol-Abos. - Watchlist: Aus Postgres (
watchlist) mit Filterticker_type='Trade Republic' AND status='active'. - Speicherung:
ticker_trmit Feldernwatchlist_id,symbol,price,timestamp,size. - Deadband: Nur Insert, wenn Änderung groß genug ist (Price > 0.1%, Size > 0.1%, Timestamp > 60s).
- Robustheit: Periodische Verbindungsrotation (10–45 Minuten) und zufälliger Reconnect (1–60 Sekunden).
- Logging: Steuerbar über
LOG_LEVEL(error,warn,info,debug).
Setup
- Install Node.js 18+.
- Set Postgres env vars:
PGHOST,PGPORT,PGUSER,PGPASSWORD,PGDATABASE(orDATABASE_URL). - Optional SSL: set
PGSSL=trueif your provider requires SSL.
Install
- Run
npm installto install dependencies.
Run
- Execute
npm startto connect via WebSocket to Trade Republic, register, subscribe to allwatchlistentries whereticker_type = 'Trade Republic'andstatus = 'active', and insertmessage.bidupdates intoticker_tr. - Previous query-only script:
npm run queryto printticker_symbols.
Details
- Registration frame:
connect 31 {"locale":"de","platformId":"webtrading","platformVersion":"opera - 120.0.0","clientId":"app.traderepublic.com","clientVersion":"7.38.2"} - Subscription frames (per symbol):
sub <id> {"type":"ticker","id":"<SYMBOL>"}—<id>uses the DB rowid(fallback to internal counter if missing). - Incoming frames parsed as
<id> A <json>; insertsmessage.bid.{symbol,price,timestamp,size}intoticker_tralongsidewatchlist_id(copied from the DB row id used for the subscription). - DB filter for subscriptions and query:
ticker_type = 'Trade Republic' AND status = 'active'.
Reconnect & Rotation
- The WebSocket connection is rotated at random intervals between 10–45 minutes.
- After a close (rotation or remote), it reconnects after a random 1–60 seconds delay.
- On each reconnect, the watchlist is fetched again from the DB before subscribing.
Logging
- Control verbosity via
LOG_LEVELenv var:error,warn,info(default),debug. - At
info: logs startup, subscribe count, STORE decisions, and shutdown; skips per-tick raw frames. - At
debug: logs raw WS frames and SKIP decisions as well.