This commit is contained in:
Cryptoval Trading Technologies 2025-04-12 00:42:24 +00:00
parent 6420df5158
commit ce477ef871
6 changed files with 182 additions and 256 deletions

View File

@ -24,12 +24,12 @@
"based_on_project": "cvttpy" "based_on_project": "cvttpy"
# "additional_projects": [] # "additional_projects": []
} }
, "Market Data Recorder": { # , "Market Data Recorder": {
"image_name": "md_recorder", # "image_name": "md_recorder",
"docker_dev_path": "market_data/md_recorder", # "docker_dev_path": "market_data/md_recorder",
"based_on_project": "cvttpy" # "based_on_project": "cvttpy"
"additional_projects": ["ops"] # "additional_projects": ["ops"]
} # }
, "MD Rec MONITOR": { , "MD Rec MONITOR": {
"image_name": "md_recorder_monitor", "image_name": "md_recorder_monitor",
"docker_dev_path": "market_data/md_recorder_monitor", "docker_dev_path": "market_data/md_recorder_monitor",

View File

@ -20,32 +20,8 @@
, "read_timeout" : 0.01 , "read_timeout" : 0.01
, "ping_timeout_secs": 2.0 , "ping_timeout_secs": 2.0
} }
, "cvttdata": { , "cvtt-prod-01": {
"url": "redis://cvttdata.cvtt.vpn" "url": "redis://cvtt-prod-01.cvtt.vpn:16379"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-testserver": {
"url": "redis://cvtt-testserver.cvtt.vpn"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-eqty-01": {
"url": "redis://cvtt-prod-eqty-01.cvtt.vpn"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-03": {
"url": "redis://cvtt-prod-03.cvtt.vpn"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-eqty-01": {
"url": "redis://cvtt-prod-eqty-01.cvtt.vpn"
, "type": "redis" , "type": "redis"
, "read_timeout" : 0.01 , "read_timeout" : 0.01
, "ping_timeout_secs": 2.0 , "ping_timeout_secs": 2.0

153
data/apps/cvtt_musvc.cfg Normal file
View File

@ -0,0 +1,153 @@
@var COORDINATOR_REST_PORT=23456
@var COORDINATOR_WS_PORT=12345
@var GLOBAL_CHANNEL_PREFIX=CVTT_MU
{
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "algos": @inc=http://@env{CONFIG_SERVICE}/apps/common/algos
, "strategies": @inc=http://@env{CONFIG_SERVICE}/apps/common/strategies
, "risk_strategies": @inc=http://@env{CONFIG_SERVICE}/apps/common/risk_strategies
, "comm_settings": @env{CONFIG_COMM_SETTINGS}
, "global_channel_prefix": ${GLOBAL_CHANNEL_PREFIX}
, "coordinator": {
"api": {
"REST": {
"port": ${COORDINATOR_REST_PORT},
"base_url": ["POST", "http://localhost:${COORDINATOR_REST_PORT}"]
}
, "WS": {
"url": "ws://localhost:${COORDINATOR_WS_PORT}/ws"
}
}
}
, "market_data_gateway": {
"exchanges_settings": {
"*": {
"mkt_data": {
"enabled": true
, "streaming": true
},
"order_entry": {
"enabled": false
, "streaming": false
},
"accounting": {
"enabled": false
, "streaming": false
},
},
}
, "channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.MD_GW"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.MD_GW_APP_STATUS"
, "exchanges": [
"COINBASE_AT"
, "BNBSPOT"
, "BNBFUT"
, "KRAKEN"
, "BITSTAMP"
, "OKX"
, "GEMINI"
, "ALPACA_SNDBX"
]
}
, "order_entry_gateway": {
"exchanges_settings": {
"ALPACA_SNDBX": {
"mkt_data": {
"enabled": false
, "streaming": false
},
"order_entry": {
"enabled": true
, "streaming": true
},
"accounting": {
"enabled": false
, "streaming": false
}
, "credentials_key": {
"read_only": "ALPACA_SANDBOX"
, "trade": "ALPACA_SANDBOX"
}
}
}
, "channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.OE_GW"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.OE_GW_APP_STATUS"
, "exchanges": [
"ALPACA_SNDBX"
]
}
, "accounting_gateway": {
"exchanges_settings": {
"ALPACA_SNDBX": {
"mkt_data": {
"enabled": false
, "streaming": false
},
"order_entry": {
"enabled": false
, "streaming": false
},
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"read_only": "ALPACA_SANDBOX"
, "trade": "ALPACA_SANDBOX"
}
},
"COINBASE_AT": {
"mkt_data": {
"enabled": false
, "streaming": false
},
"order_entry": {
"enabled": false
, "streaming": false
},
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"read_only": "COINBASE_ADV_RO"
}
}
}
, "channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.ACCT_GW"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.ACCT_GW_APP_STATUS"
, "exchanges": [
"ALPACA_SNDBX", "COINBASE_AT"
]
}
, "quant": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.QUANT"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.QUANT_MUSVC_STATUS"
}
, "trader": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.TRADER"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.TRADER_MUSVC_STATUS"
}
, "bookkeeper": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.BKPR"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.BKPR_MUSVC_STATUS"
, "db": {
"server_type": "timescale",
"cred_key": "TSDB_TRADING_CVTT_TESTDB"
}
}
, "risk_manager": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.RMGR"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.RMGR_MUSVC_STATUS"
, "revalue_interval_sec": 10.5
}
, "pricer": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.PXER"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.PXER_MUSVC_STATUS"
}
}

View File

@ -435,7 +435,8 @@
, "quantity_precision": "0.00001" , "quantity_precision": "0.00001"
} }
} }
} , "OKX": { }
, "OKX": {
"instruments": { "instruments": {
# --- PAIRs # --- PAIRs
"PAIR-BTC-USDT": { "PAIR-BTC-USDT": {

View File

@ -83,7 +83,7 @@
, "ALPACA_SNDBX": { , "ALPACA_SNDBX": {
# https://docs.alpaca.markets/reference/ # https://docs.alpaca.markets/reference/
"exchange_id": "ALPACA" "exchange_id": "ALPACA"
, "name": "Alpaca Trading" , "name": "Alpaca Trading"
, "type": "EQUITY" , "type": "EQUITY"
, "cred_key": "ALPACA_SANDBOX" , "cred_key": "ALPACA_SANDBOX"
@ -101,7 +101,7 @@
, "ws_url": ["WSS", "wss://paper-api.alpaca.markets/stream"] , "ws_url": ["WSS", "wss://paper-api.alpaca.markets/stream"]
} }
, "mktdata" : { , "mktdata" : {
"class": "cvttpy.exchanges.alpaca.mkt_data.AlpacaStockFeed" "class": "cvttpy.exchanges.alpaca.mkt_data.AlpacaMdFeed"
, "reconnect_secs": 2.0 , "reconnect_secs": 2.0
# , "ws_url": ["WSS", "wss://stream.data.alpaca.markets/v2/sip"] # , "ws_url": ["WSS", "wss://stream.data.alpaca.markets/v2/sip"]
@ -141,31 +141,13 @@
, "ws_url": ["WSS", "wss://ws.bitstamp.net"] , "ws_url": ["WSS", "wss://ws.bitstamp.net"]
} }
} }
, "BNBSPOT": {
"exchange_id": "BNBSPOT"
, "name": "Binance Spot"
, "type": "SPOT"
, "mktdata" : {
"class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMultiWsFeed"
, "max_connections": 10
, "reconnect_secs": 2.0
, "ws_url": ["WSS", "wss://stream.binance.com/ws"]
, "REST": {
# https://api.binance.com/api/v3/depth?symbol=BNBBTC&limit=1000
"depth_snapshot_url": ["GET", "https://api.binance.com/api/v3/depth"],
}
}
}
, "BNBFUT": { , "BNBFUT": {
"exchange_id": "BNBFUT" "exchange_id": "BNBFUT"
, "name": "Binance Futures USD-M" , "name": "Binance Futures USD-M"
, "type": "FUTURES" , "type": "FUTURES"
, "mktdata" : { , "mktdata" : {
"class": "cvttpy.exchanges.binance.futures.mkt_data.BnbFutMultiWsFeed" "class": "cvttpy.exchanges.binance.futures.mkt_data.BnbFutMktDataFeed"
, "max_connections": 10 , "max_connections": 10
, "reconnect_secs": 2.0 , "reconnect_secs": 2.0
@ -177,28 +159,32 @@
} }
} }
} }
, "BNBFUT-2": {
"exchange_id": "BNBFUT" , "BNBSPOT": {
, "name": "Binance Futures USD-M" "exchange_id": "BNBSPOT"
, "type": "FUTURES" , "name": "Binance Spot"
, "type": "SPOT"
, "mktdata" : { , "mktdata" : {
"class": "cvttpy.exchanges.binance.futures.mkt_data.BinanceFuturesFeedWs2" "class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMktDataFeed"
, "max_connections": 10 , "max_connections": 10
, "reconnect_secs": 2.0 , "reconnect_secs": 2.0
, "ws_timeout_secs": 0.0001
, "ws_url": ["WSS", "wss://fstream.binance.com/ws"]
, "ws_url": ["WSS", "wss://stream.binance.com/ws"]
, "REST": {
# https://api.binance.com/api/v3/depth?symbol=BNBBTC&limit=1000
"depth_snapshot_url": ["GET", "https://api.binance.com/api/v3/depth"],
}
} }
} }
, "BNBSPOT_US": { , "BNBSPOT_US": {
"exchange_id": "BNBSPOT_US" "exchange_id": "BNBSPOT_US"
, "name": "Binance.US" , "name": "Binance.US"
, "type": "SPOT" , "type": "SPOT"
, "mktdata" : { , "mktdata" : {
"class": "cvttpy.exchanges.binance.spot.mkt_data.BinanceSpotFeed" "class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMktDataFeed"
, "reconnect_secs": 10 , "reconnect_secs": 10
, "ws_url": ["WSS", "wss://stream.binance.us:9443/ws"] , "ws_url": ["WSS", "wss://stream.binance.us:9443/ws"]
@ -236,7 +222,7 @@
} }
, "mktdata" : { , "mktdata" : {
"class": "cvttpy.exchanges.coinbase.spot.mkt_data.CoinbaseMultiWsFeed" "class": "cvttpy.exchanges.coinbase.spot.mkt_data.CoinbaseMdFeed"
, "reconnect_secs": 2 , "reconnect_secs": 2
, "max_connections": 10 , "max_connections": 10
@ -292,7 +278,6 @@
, "ws_url": ["WSS" , "wss://api.gemini.com/v2/marketdata"] , "ws_url": ["WSS" , "wss://api.gemini.com/v2/marketdata"]
} }
# , "REST": { # , "REST": {
# "open_orders_url": ["POST", "https://api.gemini.com/v1/orders"] # "open_orders_url": ["POST", "https://api.gemini.com/v1/orders"]
# , "order_status_url": ["POST", "https://api.gemini.com/v1/order/status"] # , "order_status_url": ["POST", "https://api.gemini.com/v1/order/status"]
@ -304,6 +289,7 @@
# , "margin_url": ["POST", "https://api.gemini.com/v1/margin"] # , "margin_url": ["POST", "https://api.gemini.com/v1/margin"]
# } # }
} }
, "GEMINI-SNDBX": { , "GEMINI-SNDBX": {
# https://docs.gemini.com/rest-api # https://docs.gemini.com/rest-api
"exchange_id": "GEMINI" "exchange_id": "GEMINI"
@ -363,7 +349,7 @@
, "type": "SPOT" , "type": "SPOT"
, "mktdata" : { , "mktdata" : {
"class": "cvttpy.exchanges.okx.mkt_data.OkxMultiWsFeed" "class": "cvttpy.exchanges.okx.mkt_data.OkxMdFeed"
, "max_connections": 10 , "max_connections": 10
, "reconnect_secs": 2.0 , "reconnect_secs": 2.0
@ -373,193 +359,3 @@
} }
} }
} }
# , "BNBFUT-BT-FEED": {
# "exchange_id": "BNBFUT"
# , "name": "Binance Futures USD-M"
# , "type": "FUTURES"
# , "mktdata" : {
# "class": "cvttpy.exchanges.book_top_feed.mkt_data.BookTopFeedClient"
# , "mmap_file": "/tmp/BNBFUT.MD.dat"
# }
# }
# , "COINBASE_AT-MDPORTAL": {
# "exchange_id": "COINBASE"
# , "name": "Coinbase Advanced Trade"
# , "type": "SPOT"
# , "order_entry": {
# "class": "cvttpy.exchanges.coinbase.spot.oe_client.CoinbaseSpotOEClient"
# , "REST": {
# "open_orders_url": ["GET", "https://api.coinbase.com/api/v3/brokerage/orders/historical/batch"]
# , "submit_order_url": ["POST", "https://api.coinbase.com/api/v3/brokerage/orders"]
# , "cancel_order_url": ["POST", "https://api.coinbase.com/api/v3/brokerage/orders/batch_cancel"]
# },
# "ws_url": ["WSS", "wss://advanced-trade-ws.coinbase.com"]
# }
# , "accounting": {
# "class": "cvttpy.exchanges.coinbase.spot.account.CoinbaseSpotAccounting"
# , "REST": {
# "balances_url": ["GET", "https://api.coinbase.com/api/v3/brokerage/accounts"]
# , "get_trades_url": ["GET", "https://api.coinbase.com/api/v3/brokerage/orders/historical/fills"]
# , "get_transactions_url": ["GET", "https://api.coinbase.com/api/v3/brokerage/transaction_summary"]
# }
# }
# , "mktdata" : {
# "class": "cvttpy.exchanges.proxies.md_portal_clnt.mkt_data.MktDataPortalFeed"
# , "portal_name": "MD_PORTAL_COINBS_01"
# }
# }
# , "ALPACA_SNDBX-MDPORTAL": {
# # https://docs.alpaca.markets/reference/
# "exchange_id": "ALPACA"
# , "name": "Alpaca Trading"
# , "type": "EQUITY"
# , "cred_key": "ALPACA_SANDBOX"
# , "order_entry": {
# "class": "cvttpy.exchanges.alpaca.oe_client.AlpacaOrderEntryClient"
# , "REST": {
# "submit_order_url": ["POST", "https://paper-api.alpaca.markets/v2/orders"]
# , "orders_url": ["GET", "https://paper-api.alpaca.markets/v2/orders"]
# , "order_status": ["GET", "https://paper-api.alpaca.markets/v2/orders/{order_id}"]
# , "cancel_order_url": ["DELETE", "https://paper-api.alpaca.markets/v2/orders/{order_id}"]
# , "cancel_all_url": ["DELETE", "https://paper-api.alpaca.markets/v2/orders"]
# }
# , "ws_url": ["WSS", "wss://paper-api.alpaca.markets/stream"]
# }
# , "mktdata" : {
# "class": "cvttpy.exchanges.proxies.md_portal_clnt.mkt_data.MktDataPortalFeed"
# , "portal_name": "MD_PORTAL_ALPACA_SNDBX"
# # allow direct REST requests
# , "REST": {
# "hist_md_bars": ["GET", "https://data.alpaca.markets/v2/stocks/bars"]
# , "latest_trade": ["GET", "https://data.alpaca.markets/v2/stocks/{symbol}/trades/latest"]
# , "hist_md_quotes": ["GET", "https://data.alpaca.markets/v2/stocks/quotes"]
# , "hist_md_trades": ["GET", "https://data.alpaca.markets/v2/stocks/trades"]
# }
# }
# , "accounting": {
# "class": "cvttpy.exchanges.alpaca.account.AlpacaAccounting"
# , "REST": {
# "balances_url": ["GET", "https://paper-api.alpaca.markets/v2/positions"]
# , "account_info_url": ["GET", "https://paper-api.alpaca.markets/v2/account"]
# , "trades_url": ["GET", "https://paper-api.alpaca.markets/v2/account/activities/FILL"]
# }
# }
# }
# , "ALPACA-MD-REST-ONLY": {
# # https://docs.alpaca.markets/reference/
# "exchange_id": "ALPACA"
# , "name": "Alpaca Trading"
# , "type": "EQUITY"
# , "cred_key": "ALPACA_SANDBOX"
# , "order_entry": {
# }
# , "mktdata" : {
# "class": "cvttpy.exchanges.alpaca.mkt_data.AlpacaStockFeed"
# , "REST": {
# "hist_md_bars": ["GET", "https://data.alpaca.markets/v2/stocks/bars"]
# , "latest_trade": ["GET", "https://data.alpaca.markets/v2/stocks/{symbol}/trades/latest"]
# , "hist_md_quotes": ["GET", "https://data.alpaca.markets/v2/stocks/quotes"]
# , "hist_md_trades": ["GET", "https://data.alpaca.markets/v2/stocks/trades"]
# }
# }
# , "accounting": {
# }
# }
# , "ALPACA_SNDBX-MDP-03": {
# # https://docs.alpaca.markets/reference/
# "exchange_id": "ALPACA"
# , "name": "Alpaca Trading"
# , "type": "EQUITY"
# , "cred_key": "ALPACA_SANDBOX"
# , "order_entry": {
# "class": "cvttpy.exchanges.alpaca.oe_client.AlpacaOrderEntryClient"
# , "REST": {
# "submit_order_url": ["POST", "https://paper-api.alpaca.markets/v2/orders"]
# , "orders_url": ["GET", "https://paper-api.alpaca.markets/v2/orders"]
# , "order_status": ["GET", "https://paper-api.alpaca.markets/v2/orders/{order_id}"]
# , "cancel_order_url": ["DELETE", "https://paper-api.alpaca.markets/v2/orders/{order_id}"]
# , "cancel_all_url": ["DELETE", "https://paper-api.alpaca.markets/v2/orders"]
# }
# , "ws_url": ["WSS", "wss://paper-api.alpaca.markets/stream"]
# }
# , "mktdata" : {
# "class": "cvttpy.exchanges.proxies.md_portal_clnt.mkt_data.MktDataPortalFeed"
# , "portal_name": "MD_PORTAL_ALPACA_03"
# , "REST": {
# "hist_md_bars": ["GET", "https://data.alpaca.markets/v2/stocks/bars"]
# , "latest_trade": ["GET", "https://data.alpaca.markets/v2/stocks/{symbol}/trades/latest"]
# , "hist_md_quotes": ["GET", "https://data.alpaca.markets/v2/stocks/quotes"]
# , "hist_md_trades": ["GET", "https://data.alpaca.markets/v2/stocks/trades"]
# }
# }
# , "accounting": {
# "class": "cvttpy.exchanges.alpaca.account.AlpacaAccounting"
# , "REST": {
# "balances_url": ["GET", "https://paper-api.alpaca.markets/v2/positions"]
# , "account_info_url": ["GET", "https://paper-api.alpaca.markets/v2/account"]
# , "trades_url": ["GET", "https://paper-api.alpaca.markets/v2/account/activities/FILL"]
# }
# }
# }
# ---------------------------- M
# , "MD_PORTAL_ALPACA_SNDBX": {
# "exchange_id": "MD_PORTAL"
# , "name": "MD Portal (proxy)"
# , "type": "PROXY"
# , "mktdata" : {
# "class": "cvttpy.exchanges.proxies.md_portal_clnt.mkt_data.MktDataPortalFeed"
# , "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
# , "channel_prefix": "MD_ALPACA_SNDBX"
# }
# }
# , "MD_GATEWAY": {
# "exchange_id": "MD_GATEWAY"
# , "name": "MD Portal (proxy)"
# , "type": "PROXY"
# , "mktdata" : {
# "class": "cvttpy.exchanges.proxies.md_gateway_clnt.mkt_data.MktDataGatewayFeed"
# }
# }
# , "MD_PORTAL_ALPACA_03": {
# "exchange_id": "MD_PORTAL"
# , "name": "MD Portal (proxy)"
# , "type": "PROXY"
# , "mktdata" : {
# "class": "cvttpy.exchanges.proxies.md_portal_clnt.mkt_data.MktDataPortalFeed"
# , "comm_settings": "/comm/pubsub/redis/cvtt-prod-03"
# , "channel_prefix": "MD_ALPACA_03"
# }
# }
# , "MARKET_SIMULATOR": {
# "exchange_id": "MARKET_SIMULATOR"
# , "name": "Market Simulator"
# , "type": "SIM"
# , "mktdata" : {
# "class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
# "ws_url": ["WS", "ws://localhost:8080/ws"]
# }
# }