From a38ec2989da5e165da14b13bd866571c52dec66f Mon Sep 17 00:00:00 2001 From: Cryptoval Trading Technologies Date: Thu, 15 May 2025 05:24:52 +0200 Subject: [PATCH] initial --- .env | 40 ++++++++ .gitignore | 2 + config/.creds | 17 ++++ config/md_recorder.cfg | 206 +++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 67 ++++++++++++++ 5 files changed, 332 insertions(+) create mode 100644 .env create mode 100644 .gitignore create mode 100644 config/.creds create mode 100644 config/md_recorder.cfg create mode 100644 docker-compose.yml diff --git a/.env b/.env new file mode 100644 index 0000000..8dcf641 --- /dev/null +++ b/.env @@ -0,0 +1,40 @@ +CVTT_USER=1001:1001 +IMAGE_VERSION=0.0.6 + +CONFIG_FILE=/config/md_recorder.cfg +CREDS_FILE=/config/.creds + +# bnbfut-cvttdata +BF28_CONTAINER_NAME=md_recorder.BNBFUT_CLOUD28 +BF28_INSTRUMENT_GROUP=BNBFUT_CLOUD28 +BF28_EXCHANGE_ACCT_NAME=BNBFUT +BF28_DB_CRED_KEY=TSDB_MD_CLOUD28 + +BF28_LOG_FILE=/logs/%T.MD_REC.${BF28_INSTRUMENT_GROUP}.log +BF28_ADD_ARGS=--compress_log + +BF28_ADMIN_PORT=7204 + +# coinbase-cvttdata +CB28_CONTAINER_NAME=md_recorder.COINBASE_CLOUD28 +CB28_INSTRUMENT_GROUP=COINBASE_CLOUD28 +CB28_EXCHANGE_ACCT_NAME=COINBASE_AT +CB28_DB_CRED_KEY=TSDB_MD_CLOUD28 + +CB28_LOG_FILE=/logs/%T.MD_REC.${CB28_INSTRUMENT_GROUP}.log +CB28_ADD_ARGS=--compress_log + +CB28_ADMIN_PORT=7206 + +# bnspot-cvttdata +BS28_CONTAINER_NAME=md_recorder.BNBSPOT_CLOUD28 +BS28_INSTRUMENT_GROUP=BNBSPOT_CLOUD28 +BS28_EXCHANGE_ACCT_NAME=BNBSPOT +BS28_DB_CRED_KEY=TSDB_MD_CLOUD28 + +BS28_LOG_FILE=/logs/%T.MD_REC.${BS28_INSTRUMENT_GROUP}.log +BS28_ADD_ARGS=--compress_log + +BS28_ADMIN_PORT=7201 + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5eb6531 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +data/ +logs/ diff --git a/config/.creds b/config/.creds new file mode 100644 index 0000000..1301a78 --- /dev/null +++ b/config/.creds @@ -0,0 +1,17 @@ +{ + "__dummy__": null + , "TSDB_MD_CLD21": { + "host": "cloud21.cvtt.vpn" + , "port": 5432 + , "user": "cvtt" + , "database": "cvtt_md" + , "password": "ICdIh0JnMM7vM7Pf" + } + , "TSDB_MD_CVTTDATA": { + "host": "cvttdata.cvtt.vpn" + , "port": 5432 + , "user": "cvtt" + , "database": "cvtt_md" + , "password": "ICdIh0JnMM7vM7Pf" + } +} diff --git a/config/md_recorder.cfg b/config/md_recorder.cfg new file mode 100644 index 0000000..ffaf314 --- /dev/null +++ b/config/md_recorder.cfg @@ -0,0 +1,206 @@ +{ + "refdata": { + "assets": @inc=http://@env{CONFIG_SERVICE}/refdata/assets + , "instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/instruments + , "exchange_instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/exchange_instruments + , "dynamic_instrument_exchanges": ["ALPACA"] + , "exchanges": { + "COINBASE_AT": { + "exchange_id": "COINBASE" + , "name": "Coinbase Advanced Trade" + , "type": "SPOT" + + , "mktdata" : { + # ****** NEW VAlUE + # "class": "cvttpy.exchanges.coinbase.spot.mkt_data.CoinbaseMultiWsFeed" + "class": "cvttpy.exchanges.coinbase.spot.mkt_data.CoinbaseMdFeed" + # ****** NEW VAlUE + + , "reconnect_secs": 2 + , "max_connections": 10 + , "price_throttle": true + + , "ws_url": ["WSS", "wss://ws-feed.exchange.coinbase.com"] + } + } + , "BNBSPOT": { + "exchange_id": "BNBSPOT" + , "name": "Binance Spot" + , "type": "SPOT" + + , "mktdata" : { + # -------- NEW VALUE + # "class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMultiWsFeed" + "class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMktDataFeed" + # -------- NEW VALUE + , "max_connections": 10 + , "reconnect_secs": 2.0 + + + , "ws_url": ["WSS", "wss://stream.binance.com/ws"] + , "REST": { + "depth_snapshot_url": ["GET", "https://api.binance.com/api/v3/depth"], + } + } + } + , "BNBFUT": { + "exchange_id": "BNBFUT" + , "name": "Binance Futures USD-M" + , "type": "FUTURES" + + , "mktdata" : { + # -------- NEW VALUE + # "class": "cvttpy.exchanges.binance.futures.mkt_data.BnbFutMultiWsFeed" + "class": "cvttpy.exchanges.binance.futures.mkt_data.BnbFutMktDataFeed" + # -------- NEW VALUE + , "max_connections": 10 + , "reconnect_secs": 2.0 + + , "ws_url": ["WSS", "wss://fstream.binance.com/ws"] + + , "REST": { + # https://fapi.binance.com/fapi/v1/depth?symbol=BNBBTC&limit=1000 + "depth_snapshot_url": ["GET", "https://fapi.binance.com/fapi/v1/depth"], + } + } + } + } + } + , "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm + + , "md_recorder": { + "instrument_groups": { + "BNBFUT_CLD21": [ + "BNBFUT:PERP-BTC-USDT" + , "BNBFUT:PERP-ETH-USDT" + ], + "BNBFUT_CLOUD28": [ + "BNBFUT:PERP-BTC-USDT" + , "BNBFUT:PERP-ETH-USDT" + ], + "BNBSPOT_CLD21": [ + "BNBSPOT:PAIR-ADA-USDT" + , "BNBSPOT:PAIR-BCH-USDT" + , "BNBSPOT:PAIR-BTC-USDT" + , "BNBSPOT:PAIR-DOT-USDT" + , "BNBSPOT:PAIR-ETH-USDT" + , "BNBSPOT:PAIR-LTC-USDT" + , "BNBSPOT:PAIR-SOL-USDT" + , "BNBSPOT:PAIR-USDC-USDT" + , "BNBSPOT:PAIR-XRP-USDT" + ], + "BNBSPOT_CLOUD28": [ + "BNBSPOT:PAIR-ADA-USDT" + , "BNBSPOT:PAIR-BCH-USDT" + , "BNBSPOT:PAIR-BTC-USDT" + , "BNBSPOT:PAIR-DOT-USDT" + , "BNBSPOT:PAIR-ETH-USDT" + , "BNBSPOT:PAIR-LTC-USDT" + , "BNBSPOT:PAIR-SOL-USDT" + , "BNBSPOT:PAIR-USDC-USDT" + , "BNBSPOT:PAIR-XRP-USDT" + ], + "COINBASE_CLD21": [ + "COINBASE:PAIR-ADA-USD" + , "COINBASE:PAIR-BCH-USD" + , "COINBASE:PAIR-BTC-USD" + , "COINBASE:PAIR-DOT-USD" + , "COINBASE:PAIR-ETH-USD" + , "COINBASE:PAIR-LTC-USD" + , "COINBASE:PAIR-SOL-USD" + , "COINBASE:PAIR-XRP-USD" + ], + "COINBASE_CLOUD28": [ + "COINBASE:PAIR-ADA-USD" + , "COINBASE:PAIR-BCH-USD" + , "COINBASE:PAIR-BTC-USD" + , "COINBASE:PAIR-DOT-USD" + , "COINBASE:PAIR-ETH-USD" + , "COINBASE:PAIR-LTC-USD" + , "COINBASE:PAIR-SOL-USD" + , "COINBASE:PAIR-XRP-USD" + ] + } + , "db": { + "class": "cvttpy.tools.db.timescale.tsdb_client.TimescaleDbClient" + } + , "flush_interval_sec": 0.5 + + , "collections": { + "__dummy__": null + , "ALPACA": { + # dynamic instruments names + "tables": { + "trades": "alpaca_iex.md_trades" + , "booktops": "alpaca_iex.md_booktops" + , "booksnaps": "alpaca_iex.md_booksnaps" + } + } + , "BNBSPOT": { + "instruments": { + "PAIR-ADA-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-BCH-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-BTC-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-DOT-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-ETH-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-LTC-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-SOL-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-USDC-USDT": ["TRADES", "BOOK_TOP"] + , "PAIR-XRP-USDT": ["TRADES", "BOOK_TOP"] + } + , "tables": { + "trades": "bnbspot.md_trades" + , "booktops": "bnbspot.md_booktops" + , "booksnaps": "bnbspot.md_booksnaps" + } + } + , "BNBFUT": { + "instruments": { + "PERP-BTC-USDT": ["TRADES", "BOOK_TOP"] + , "PERP-ETH-USDT": ["TRADES", "BOOK_TOP"] + } + , "tables": { + "trades": "bnbfut.md_trades" + , "booktops": "bnbfut.md_booktops" + , "booksnaps": "bnbfut.md_booksnaps" + } + } + , "COINBASE": { + "instruments": { + "PAIR-ADA-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-BCH-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-BTC-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-DOT-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-ETH-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-LTC-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-SOL-USD": ["TRADES", "BOOK_TOP"] + , "PAIR-XRP-USD": ["TRADES", "BOOK_TOP"] + } + , "tables": { + "trades": "coinbase.md_trades" + , "booktops": "coinbase.md_booktops" + , "booksnaps": "coinbase.md_booksnaps" + } + } + } + } + + # ---------------------------------- + , "exchanges_settings": { + "*": { + "order_entry": { + "enabled": false + , "streaming": false + }, + "mkt_data": { + "enabled": true + , "streaming": true + }, + "accounting": { + "enabled": false + , "streaming": false + } + } + } +} + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5b8ed92 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,67 @@ +# CVTT Microservices +services: + bnbfut28_md_recorder: + image: cloud21.cvtt.vpn:5500/md_recorder:${IMAGE_VERSION} + container_name: ${BF28_CONTAINER_NAME} + user: ${CVTT_USER:-1001:1001} + pull_policy: always + restart: unless-stopped + environment: + CONFIG_SERVICE: ${CONFIG_SERVICE:-cloud16.cvtt.vpn:6789} + CONFIG_FILE: ${CONFIG_FILE:-/config/md_recorder.cfg} + CREDS_FILE: ${CREDS_FILE} + EXCHANGE_ACCT_NAME: ${BF28_EXCHANGE_ACCT_NAME} + INSTRUMENT_GROUP: ${BF28_INSTRUMENT_GROUP} + DB_CRED_KEY: ${BF28_DB_CRED_KEY} + LOG_FILE: ${BF28_LOG_FILE} + ADD_ARGS: ${BF28_ADD_ARGS:-} + volumes: + - ./config:/config + - ./logs:/logs + ports: + - ${BF28_ADMIN_PORT}:7200 + + + cbspot28_md_recorder: + image: cloud21.cvtt.vpn:5500/md_recorder:${IMAGE_VERSION} + container_name: ${CB28_CONTAINER_NAME} + user: ${CVTT_USER:-1001:1001} + pull_policy: always + restart: unless-stopped + environment: + CONFIG_SERVICE: ${CONFIG_SERVICE:-cloud16.cvtt.vpn:6789} + CONFIG_FILE: ${CONFIG_FILE:-/config/md_recorder.cfg} + CREDS_FILE: ${CREDS_FILE} + EXCHANGE_ACCT_NAME: ${CB28_EXCHANGE_ACCT_NAME} + INSTRUMENT_GROUP: ${CB28_INSTRUMENT_GROUP} + DB_CRED_KEY: ${CB28_DB_CRED_KEY} + LOG_FILE: ${CB28_LOG_FILE} + ADD_ARGS: ${CB28_ADD_ARGS:-} + volumes: + - ./config:/config + - ./logs:/logs + ports: + - ${CB28_ADMIN_PORT}:7200 + + bnbspot28_md_recorder: + image: cloud21.cvtt.vpn:5500/md_recorder:${IMAGE_VERSION} + container_name: ${BS28_CONTAINER_NAME} + user: ${CVTT_USER:-1001:1001} + pull_policy: always + restart: unless-stopped + environment: + CONFIG_SERVICE: ${CONFIG_SERVICE:-cloud16.cvtt.vpn:6789} + CONFIG_FILE: ${CONFIG_FILE:-/config/md_recorder.cfg} + CREDS_FILE: ${CREDS_FILE} + EXCHANGE_ACCT_NAME: ${BS28_EXCHANGE_ACCT_NAME} + INSTRUMENT_GROUP: ${BS28_INSTRUMENT_GROUP} + DB_CRED_KEY: ${BS28_DB_CRED_KEY} + LOG_FILE: ${BS28_LOG_FILE} + ADD_ARGS: ${BS28_ADD_ARGS:-} + volumes: + - ./config:/config + - ./logs:/logs + ports: + - ${BS28_ADMIN_PORT}:7200 + +