{"id":50721962,"url":"https://github.com/globophobe/go-quant-tick","last_synced_at":"2026-06-10T01:01:15.680Z","repository":{"id":45084910,"uuid":"357352955","full_name":"globophobe/go-quant-tick","owner":"globophobe","description":"🔌 Aggregate high frequency tick data from WebSockets","archived":false,"fork":false,"pushed_at":"2026-05-12T07:33:29.000Z","size":664,"stargazers_count":30,"open_issues_count":0,"forks_count":9,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-12T09:33:59.302Z","etag":null,"topics":["binance","bitfinex","bitmex","coinbase","cryptocurrency","hyperliquid","quant","tick-data","trading","trading-strategies"],"latest_commit_sha":null,"homepage":"","language":"Go","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/globophobe.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":"2021-04-12T22:12:15.000Z","updated_at":"2026-05-12T07:33:32.000Z","dependencies_parsed_at":"2024-03-17T09:22:29.835Z","dependency_job_id":"6f117098-0412-40d4-95f2-3a6cb6e189d2","html_url":"https://github.com/globophobe/go-quant-tick","commit_stats":{"total_commits":26,"total_committers":1,"mean_commits":26.0,"dds":0.0,"last_synced_commit":"5537b6dfa230dcfff1f9f588708a4406057b3c29"},"previous_names":["globophobe/cryptofeed-experiments","globophobe/cryptofeed-werks","globophobe/go-quant-tick"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/globophobe/go-quant-tick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globophobe%2Fgo-quant-tick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globophobe%2Fgo-quant-tick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globophobe%2Fgo-quant-tick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globophobe%2Fgo-quant-tick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/globophobe","download_url":"https://codeload.github.com/globophobe/go-quant-tick/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globophobe%2Fgo-quant-tick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34132030,"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-09T02:00:06.510Z","response_time":63,"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":["binance","bitfinex","bitmex","coinbase","cryptocurrency","hyperliquid","quant","tick-data","trading","trading-strategies"],"created_at":"2026-06-10T01:01:14.848Z","updated_at":"2026-06-10T01:01:15.674Z","avatar_url":"https://github.com/globophobe.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# What?\n\nGo Quant Tick aggregates high frequency tick data from WebSockets.\n\n# How?\n\nSequences of trades that have equal symbol, timestamp, and tick rule are aggregated. Aggregating trades in this way can increase information, as they are either orders of size or stop loss cascades.\n\nAs well, the number of messages can be reduced by 30-50%\n\nBy filtering aggregated messages, for example only emitting a message when an aggregated trade is greater than or equal to a `SIGNIFICANT_TRADE_FILTER`, the number of messages can be reduced more.\n\nExample\n-------\nThe following are two sequential aggregated trades by timestamp, nanoseconds, and tick rule.\n\nAs it was aggregated from 4 raw trades, the second trade has ticks 4.\n\n```json\n[\n    {\n        \"timestamp\": 1620000915.31424,\n        \"price\": \"57064.01\",\n        \"volume\": \"566.6479018604\",\n        \"notional\": \"0.00993004\",\n        \"tickRule\": -1,\n        \"ticks\": 1\n    },\n    {\n        \"timestamp\": 1620000915.885381,\n        \"price\": \"57071.2\",\n        \"volume\": \"9376.6869202914\",\n        \"notional\": \"0.16429813\",\n        \"tickRule\": 1,\n        \"ticks\": 4\n    }\n]\n```\n\nAn example filtered message, emitted because `SIGNIFICANT_TRADE_FILTER` is `1000`.\n\nInformation related to the first trade is aggregated with the second.\n\n```json\n[\n    {\n        \"timestamp\": 1620000915.885381,\n        \"price\": \"57071.2\",\n        \"volume\": \"9376.6869202914\",\n        \"notional\": \"0.16429813\",\n        \"tickRule\": 1,\n        \"ticks\": 4,\n        \"high\": \"57071.2\",\n        \"low\": \"57064.01\",\n        \"totalBuyVolume\": \"9376.6869202914\",\n        \"totalVolume\": \"9943.3348221518\",\n        \"totalBuyNotional\": \"0.16429813\",\n        \"totalNotional\": \"0.17422817\",\n        \"totalBuyTicks\": 4,\n        \"totalTicks\": 5\n    }\n]\n```\n\nIf no significant trade occurs in a minute window, a context tick is emitted with `volume`, `notional`, `tickRule`, and `ticks` omitted.\n\nSettings\n--------\n\nFor local JSON-lines output:\n\n```shell\ngo run ./cmd/quanttick -publisher=stdout\n```\n\nEnvironment variables:\n\n```shell\nBINANCE_SYMBOLS=BTCUSDT=10000\nBINANCE_FUTURES_SYMBOLS=BTCUSDT\nBITFINEX_SYMBOLS=tBTCF0:USTF0\nBITMEX_SYMBOLS=XBTUSD\nCOINBASE_SYMBOLS=BTC-USD\nHYPERLIQUID_SYMBOLS=BTC\nWEBSOCKET_DATA_STREAMS=significant-trades\nSIGNIFICANT_TRADE_FILTER=1000\n```\n\nSymbol lists are comma-separated. A symbol can include an optional significant trade threshold as `SYMBOL=THRESHOLD`; symbols without an override use `SIGNIFICANT_TRADE_FILTER`.\n\n`WEBSOCKET_DATA_STREAMS` accepts:\n\n```text\nraw-trades,aggregated-trades,significant-trades\n```\n\n\nExample scripts\n---------------\n\nEach example prints significant-trade JSON lines until interrupted:\n\n```shell\ngo run ./examples/binance\ngo run ./examples/binance-futures\ngo run ./examples/coinbase\ngo run ./examples/bitfinex\ngo run ./examples/bitmex\ngo run ./examples/hyperliquid\n```\n\nExample with a `BTCUSDT` threshold of `10000`:\n\n```shell\nBINANCE_SYMBOLS=BTCUSDT=10000 go run ./examples/binance\n```\n\nSupported exchanges\n-------------------\n\n✅ Binance\n\n✅ Bitfinex\n\n✅ BitMEX\n\n✅ Coinbase\n\n✅ Hyperliquid\n\nTests\n-----\n\nRun tests with:\n\n```shell\ngo test ./...\ngo test -race ./...\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglobophobe%2Fgo-quant-tick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglobophobe%2Fgo-quant-tick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglobophobe%2Fgo-quant-tick/lists"}