Compare commits

..

No commits in common. "42491d050cbc2e40d8f731d3bf09e71de78075a5" and "76cb915702ad515aad75ff5c10c94f743611f2db" have entirely different histories.

8 changed files with 154 additions and 294 deletions

View File

@ -52,11 +52,6 @@
"users": ["oleg", "cvtt"],
"docker": "true",
},
"cloud31": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": "true",
},
// ----------- B a r e M e t a l
"hs01": {

View File

@ -1,18 +1,18 @@
{
"DIRECT_ORDER_ALGO": {
"class": "cvttpy_trading.trading.algos.common.trading_algo.DirOrdTradingAlgo"
"TRDALGO_001": {
"class": "cvttpy.trading.algos.simple.SimpleTradingAlgo"
, "params": {}
}
, "TRDALGO_SIMPLE_BO": {
"class": "cvttpy_trading.trading.algos.bid_and_offer.SimpleBidAndOfferTradingAlgo"
"class": "cvttpy.trading.algos.bid_and_offer.SimpleBidAndOfferTradingAlgo"
, "params": {}
}
, "TRDALGO_MOOMOC_01": {
"class": "cvttpy_trading.trading.algos.moo_moc.MooMocTradingAlgo"
"class": "cvttpy.trading.algos.moo_moc.MooMocTradingAlgo"
, "params": {}
}
, "TRDALGO_TWAP01": {
"class": "cvttpy_trading.trading.algos.twap.TwapAlgo"
"class": "cvttpy.trading.algos.twap.TwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min
@ -24,7 +24,7 @@
},
}
, "TRDALGO_ICEBERG01_COINBS": {
"class": "cvttpy_trading.trading.algos.twap.TwapAlgo"
"class": "cvttpy.trading.algos.twap.TwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min #overloaded by --duration
@ -37,7 +37,7 @@
},
}
, "TRDALGO_ICEBERG01_ALPACA": {
"class": "cvttpy_trading.trading.algos.twap.TwapAlgo"
"class": "cvttpy.trading.algos.twap.TwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min

View File

@ -1,63 +1,31 @@
# /comm
{
"pubsub" : {
"REDIS_DCKR_COMPOSE": { # docker compose used
"type": "redis"
, "url": "redis://redis:6379"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
, "verbose": false
"redis": {
"docker_microservices": {
"url": "redis://redis:6379"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "localhost": {
"url": "redis://localhost"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "localhost-2-docker": {
"url": "redis://localhost:16379"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cloud29": {
"url": "redis://cloud29.cvtt.vpn:6379"
, "type": "redis"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
}
, "REDIS_LCLHOST": {
"type": "redis"
, "url": "redis://localhost"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
, "verbose": false
}
, "REDIS_LCLHOST_2_DCKR_COMPOSE": {
"type": "redis"
, "url": "redis://localhost:16379"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
, "verbose": false
}
, "REDIS_tester-01_2_DCKR_COMPOSE": { # to use docker compose service from outside
"type": "redis"
, "url": "redis://cvtt-tester-01.cvtt.vpn:16379"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
, "verbose": false
}
# , "redis": {
# "docker_microservices": { # docker compose used
# "url": "redis://redis:6379"
# , "type": "redis"
# , "read_timeout" : 0.01
# , "ping_timeout_secs": 2.0
# , "verbose": false
# }
# , "localhost": {
# "url": "redis://localhost"
# , "type": "redis"
# , "read_timeout" : 0.01
# , "ping_timeout_secs": 2.0
# , "verbose": false
# }
# , "localhost-2-docker": {
# "url": "redis://localhost:16379"
# , "type": "redis"
# , "read_timeout" : 0.01
# , "ping_timeout_secs": 2.0
# , "verbose": false
# }
# , "tester-01": { # to use docker compose service from outside
# "url": "redis://cvtt-tester-01.cvtt.vpn:16379"
# , "type": "redis"
# , "read_timeout" : 0.01
# , "ping_timeout_secs": 2.0
# , "verbose": false
# }
# }
}
}

View File

@ -1,4 +1,6 @@
@var COORDINATOR_REST_PORT=23456
# @var COORDINATOR_WS_PORT=12345
@var PRICER_REST_PORT=23457
@var PRICER_WS_PORT=12346
@ -14,6 +16,74 @@
, "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": {
@ -58,112 +128,39 @@
"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_CVTT_TESTER_01_DIRECT"
# "cred_key": "TSDB_CVTT_TRADINNG_PROD-01-RW"
# "cred_key": "TSDB_TRADING_CVTT_TESTDB"
"cred_key": "TSDB_CVTT_TRADINNG_PROD-01-RW"
}
}
, "coordinator": {
"api": {
"REST": {
"port": @env{COORDINATOR_REST_PORT},
"base_url": ["POST", "http://localhost:@env{COORDINATOR_REST_PORT}"]
}
}
}
, "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"
, "COINBASE_FUT"
# , "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"
]
}
, "pricer": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.PXER"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.PXER_MUSVC_STATUS"
, "api": {
"REST": {
"port": @env{PRICER_REST_PORT},
"base_url": ["POST", "http://localhost:@env{PRICER_REST_PORT}"]
}
, "WS": {
"url": "ws://localhost:@env{PRICER_WS_PORT}/ws"
}
}
}
, "quant": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.QUANT"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.QUANT_MUSVC_STATUS"
}
, "risk_manager": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.RMGR"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.RMGR_MUSVC_STATUS"
, "revalue_interval_sec": 10.5
}
, "trader": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.TRADER"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.TRADER_MUSVC_STATUS"
, "pos_diff_pct_trigger": 10.0
, "trading_depth": {
"BTC": 0.001
# "BTC": 0.1
, "pricer": {
"channel_prefix": "${GLOBAL_CHANNEL_PREFIX}.PXER"
, "app_status_channel": "${GLOBAL_CHANNEL_PREFIX}.PXER_MUSVC_STATUS"
, "api": {
"REST": {
"port": ${PRICER_REST_PORT},
"base_url": ["POST", "http://localhost:${PRICER_REST_PORT}"]
}
, "WS": {
"url": "ws://localhost:${PRICER_WS_PORT}/ws"
}
}
}
}

View File

@ -1,20 +0,0 @@
{
"__DUMMY__": null
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
# , "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "exchanges_settings": {
"COINBASE_AT": {
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"read_only": "COINBASE_ADV_RO"
}
}
}
}

View File

@ -301,25 +301,6 @@
},
}
}
, "COINBASE-FUT": {
"instruments": {}
, "dynamic_instruments": {
# dynamically created instruments (futures)
"credentials_key": "COINBASE_ADV_RO"
"class": "cvttpy_trading.exchanges.coinbase.futures.market.InstrumentLoader"
, "api": {
"REST": {
"products_method": "GET"
, "products_url": "https://api.coinbase.com/api/v3/brokerage/products"
, "futures_params": {
"product_type": "FUTURE"
, "contract_expiry_type": "EXPIRING"
, "expiring_contract_status": "STATUS_UNEXPIRED"
}
}
}
}
}
, "GEMINI": {
"instruments": {
# --- PAIRs

View File

@ -290,9 +290,37 @@
, "name": "Coinbase Advanced Trade"
, "type": "SPOT"
, "order_entry": {
"credentials_key": "COINBASE_ADV_TRD"
"class": "cvttpy_trading.exchanges.coinbase.spot.oe_client.CoinbaseSpotOEClient"
, "api": {
"web_socket": {
"url": "wss://advanced-trade-ws.coinbase.com"
}
, "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"]
}
}
}
, "accounting": {
"credentials_key": "COINBASE_ADV_RO"
"class": "cvttpy_trading.exchanges.coinbase.spot.account.CoinbaseSpotAccounting"
, "api": {
"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_trading.exchanges.coinbase.spot.mkt_data.CoinbaseSpotMdFeed"
# "class": "cvttpy_trading.exchanges.coinbase.spot.mkt_data.CoinbaseMdFeed"
"class": "cvttpy_trading.exchanges.coinbase.spot.mkt_data.CoinbaseMdFeed"
, "reconnect_secs": 2
, "max_connections": 10
@ -307,95 +335,6 @@
}
}
}
, "order_entry": {
"credentials_key": "COINBASE_ADV_TRD"
"class": "cvttpy_trading.exchanges.coinbase.spot.oe_client.CoinbaseSpotOEClient"
, "api": {
"web_socket": {
"url": "wss://advanced-trade-ws.coinbase.com"
}
, "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"]
}
}
}
, "accounting": {
"credentials_key": "COINBASE_ADV_RO"
"class": "cvttpy_trading.exchanges.coinbase.spot.account.CoinbaseSpotAccounting"
, "api": {
"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"]
}
}
}
}
, "COINBASE_FUT": {
"exchange_id": "COINBASE-FUT"
, "name": "Coinbase Advanced Trade Futures"
, "type": "FUTURES"
, "mktdata" : {
"credentials_key": "COINBASE_ADV_TRD"
"class": "cvttpy_trading.exchanges.coinbase.futures.mkt_data.CoinbaseFutMdFeed"
, "reconnect_secs": 2
, "max_connections": 10
, "price_throttle": true
, "api": {
"REST": {
"products": {
"method": "GET"
, "url": "https://api.coinbase.com/api/v3/brokerage/products"
, "params": {
"product_type": "FUTURE"
, "contract_expiry_type": "EXPIRING"
, "expiring_contract_status": "STATUS_UNEXPIRED"
}
}
},
"web_socket": {
"url": "wss://advanced-trade-ws.coinbase.com"
}
}
}
, "order_entry": {
"credentials_key": "COINBASE_ADV_TRD"
"class": "cvttpy_trading.exchanges.coinbase.spot.oe_client.CoinbaseSpotOEClient"
, "api": {
"web_socket": {
"url": "wss://advanced-trade-ws.coinbase.com"
}
, "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"]
}
}
}
, "accounting": {
"credentials_key": "COINBASE_ADV_RO"
"class": "cvttpy_trading.exchanges.coinbase.spot.account.CoinbaseSpotAccounting"
, "api": {
"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"]
}
}
}
}
# ---------------------------- G
, "GEMINI": {

View File

@ -3,5 +3,5 @@
, "instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/instruments
, "exchanges": @inc=http://@env{CONFIG_SERVICE}/refdata/exchanges
, "exchange_instruments": @inc=http://@env{CONFIG_SERVICE}/refdata/exchange_instruments
, "instant_exch_inst_ids": ["ALPACA"]
, "dynamic_instrument_exchanges": ["ALPACA"]
}