Compare commits

...

28 Commits

Author SHA1 Message Date
Cryptoval Trading Technologies 15ef942ab0 getting out of repos to docker 2025-07-24 18:33:45 +00:00
Cryptoval Trading Technologies 34306b6eae progres 2025-07-24 18:21:00 +00:00
Cryptoval Trading Technologies 69ee78424a progress 2025-07-24 18:18:26 +00:00
Cryptoval Trading Technologies ee9d93b5ad separate folder for simulation, standardized REST and WS settings 2025-05-13 15:55:49 +00:00
Cryptoval Trading Technologies bc8c470a1a progress 2025-05-06 16:38:40 +00:00
Cryptoval Trading Technologies 65ea6f14d9 progress 2025-05-01 16:46:07 +00:00
Cryptoval Trading Technologies 0e8ee9434b progress 2025-04-12 01:26:42 +00:00
Cryptoval Trading Technologies ce477ef871 progress 2025-04-12 00:42:24 +00:00
Cryptoval Trading Technologies 6420df5158 progress 2025-03-27 21:29:25 +00:00
Cryptoval Trading Technologies 4d12329f0b progress 2025-03-17 03:22:08 +00:00
Cryptoval Trading Technologies 5796504377 progress 2025-03-13 18:46:35 +00:00
Cryptoval Trading Technologies e7f3e4c5cb progress 2025-03-02 00:41:56 +00:00
Cryptoval Trading Technologies 9feb87df5d progress 2025-02-03 20:21:01 +00:00
Cryptoval Trading Technologies bed7b838ec progress 2025-02-03 19:57:18 +00:00
Cryptoval Trading Technologies 088770e923 . 2025-02-03 05:05:16 +00:00
Cryptoval Trading Technologies b4fc81338d fix 2025-01-29 18:50:27 +00:00
Cryptoval Trading Technologies 06c01115dd progress 2025-01-24 17:28:48 +00:00
Cryptoval Trading Technologies 5e7cf812aa using env for CONFIG_SERVICE 2025-01-24 04:23:56 +00:00
Cryptoval Trading Technologies 50dee15642 progress 2025-01-22 23:09:25 +00:00
Cryptoval Trading Technologies 7cb2e5ed6b progress 2025-01-14 03:25:20 +00:00
Cryptoval Trading Technologies 8ce21f0715 progress 2024-12-30 17:29:26 +00:00
Cryptoval Trading Technologies c1c72b7f80 progress 2024-12-14 01:08:13 +00:00
Cryptoval Trading Technologies 8b109e933c progress 2024-12-03 18:58:02 +00:00
Cryptoval Trading Technologies cf62777b62 . 2024-11-28 18:59:57 +00:00
Cryptoval Trading Technologies 82bc99e00d . 2024-11-26 23:15:11 +00:00
Cryptoval Trading Technologies 8f77238d82 progress 2024-11-01 18:59:46 +00:00
Cryptoval Trading Technologies 64536e2955 hosts added 2024-10-30 19:22:32 +00:00
Cryptoval Trading Technologies d468bdfd79 moving redis to comm 2024-10-26 00:18:37 +00:00
62 changed files with 2324 additions and 900 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
{
"folders": [
{
"path": "."
"path": "../../../../works/repos/config_service"
}
]
}
+89 -95
View File
@@ -1,160 +1,154 @@
# ------- I M P O R T A N T
# -----------------------------------------------------------------
# ---- DO NOT USE JSON Booleans, jq considers "false" as missing,
# ---- So it will replace it with default value
# ---- Instead use strings (case insensitive): "false", "no", "N", "T"
# -----------------------------------------------------------------
{
"cvtt.vpn": {
// ----------- C l o u d
"cloud11": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
"docker": "true",
},
"cloud15": {
"type": "cloud",
"users": ["oleg"],
"docker": false,
"supervisor": false,
"docker": "false",
},
"cloud16": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": true,
"users": ["oleg"],
"docker": "true",
},
"cloud21": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": true,
"users": ["oleg", "cvtt", "cvttdist", "git"],
"docker": "true",
},
"cloud22": {
"type": "cloud",
"users": ["oleg"],
"docker": false,
"supervisor": false,
"docker": "false",
},
"cloud23": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
"docker": "true",
},
"cloud24": {
"cloud28": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": true,
"docker": "true",
},
"cloud29": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": "true",
},
"cloud30": {
"type": "cloud",
"users": ["oleg", "cvtt"],
"docker": "true",
},
// ----------- B a r e M e t a l
"homestore": {
"hs01": {
"type": "metal",
"users": ["oleg", "cvtt", "cvttdist", "git"],
"docker": "true",
},
"hbkp01": {
"type": "metal",
"users": ["oleg"],
"docker": true,
"supervisor": false,
"docker": "false",
},
"nsbackup": {
"type": "metal",
"users": ["oleg"],
"docker": false,
"supervisor": false,
},
"cryptoval2": {
"type": "metal",
"users": ["oleg"],
"docker": false,
"supervisor": false,
},
"cryptoval3": {
"cv05": {
"type": "metal",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
"docker": "true",
"desktop": "true",
},
"cryptoval4": {
"type": "metal",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
},
"dtvmhost": {
"cv06": {
"type": "metal",
"users": ["oleg"],
"docker": false,
"supervisor": false,
"docker": "false",
"desktop": "true",
},
"gpushnik": {
"office-oleg-02": {
"type": "metal",
"users": ["oleg"],
"docker": true,
"supervisor": false,
"docker": "false",
"desktop": "true",
},
// ----------- V i r t u a l M a c h i n e s
"cvttdata": {
"type": "vm",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
},
"cvtt-dev": {
// - GUI
"cvtt-admin": {
"type": "vm",
"users": ["oleg"],
"docker": true,
"supervisor": false,
"__eod__": null
},
"cvtt-edu": {
"type": "vm",
"users": ["oleg"],
"docker": false,
"supervisor": false,
},
"cvtt-prod-eqty-01": {
"type": "vm",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
},
"cvtt-research": {
"type": "vm",
"users": ["oleg"],
"docker": true,
"supervisor": false,
"docker": "true",
"gui": "true",
"to_check": "No",
},
# Complete the list of GUI/Desktop VMs
"desktop": {
"type": "vm",
"users": ["oleg"],
"docker": false,
"supervisor": false,
"docker": "false",
"gui": "true",
"to_check": "No",
},
"ops-server": {
"home-fin": {
"type": "vm",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
"users": ["oleg"],
"docker": "false",
"gui": "true",
"to_check": "No",
},
// -- Headless
# "cvtt-build": {
# "type": "vm",
# "users": ["oleg"],
# "docker": "true",
# "to_check": "No",
# },
"cvtt-md": {
"type": "vm",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
"docker": "true",
},
"cvttdata-testdb": {
# "cvtt-testserver": {
# "type": "vm",
# "users": ["oleg", "cvtt"],
# "docker": "true",
# "to_check": "No",
# },
# "cvtt-testdb": {
# "type": "vm",
# "users": ["oleg", "cvtt"],
# "docker": "true",
# "to_check": "false",
# "timeout_sec": 11,
# },
"ops-server": {
"type": "vm",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
"docker": "true",
},
"cvtt-testserver": {
"cvtt-dev-server": {
"type": "vm",
"users": ["oleg", "cvtt", "yasha"],
"docker": "true",
"to_check": "Yes",
},
"dev-server-02": {
"type": "vm",
"users": ["oleg", "cvtt"],
"docker": true,
"supervisor": false,
},
"cvtt-prod-03": {
"type": "vm",
"users": ["oleg"],
"docker": false,
"supervisor": true,
"docker": "true",
"to_check": "Yes",
},
},
+83
View File
@@ -0,0 +1,83 @@
{
"Mattermost": {
"to_check": "Yes",
"protocol": "https",
"host": "mattermost.cryptovaltrading.com",
"port": 443
},
"Gitea": {
"to_check": "Yes",
"protocol": "http",
"host": "gitea.cvtt.net",
"port": 443
# "host": "cloud30.cvtt.net",
# "port": 3000
},
"Docker Registry": {
"to_check": "Yes",
"protocol": "http",
"host": "cloud21.cvtt.vpn",
"port": 5500
},
"CVTT Config Service": {
"to_check": "Yes",
"protocol": "http",
"host": "cloud16.cvtt.vpn",
"port": 6789
},
"Infisical Secret Management": {
"to_check": "Yes",
"protocol": "https",
"host": "infisical.cvtt.net",
"port": 443
},
"Youtrack": {
"to_check": "Yes",
"protocol": "http",
"host": "cloud23.cvtt.vpn",
"port": 8383
},
"Trading Calendar": {
"to_check": "Yes",
"protocol": "https",
"host": "trading-calendar.cvtt.net",
"port": 443
},
"US EQTY Rel.Liquidity": {
"to_check": "Yes",
"protocol": "http",
"host": "cloud23.cvtt.vpn",
"port": 5678
},
# "PyTorch (Jupyter)": {
# "to_check": "No",
# "protocol": "http",
# "host": "gpushnik.cvtt.vpn",
# "port": 8888
# },
# "TensorFlow (Jupyter)": {
# "to_check": "No",
# "protocol": "http",
# "host": "gpushnik.cvtt.vpn",
# "port": 9999
# },
# "FastAI (Jupyter)": {
# "to_check": "No",
# "protocol": "http",
# "host": "gpushnik.cvtt.vpn",
# "port": 7777
# },
"Jenkins": {
"to_check": "No",
"protocol": "http",
"host": "cvtt-build.cvtt.vpn",
"port": 8080
},
"NetBird": {
"to_check": "Yes",
"protocol": "http",
"host": "cloud18.cryptovaltrading.com",
"port": 80
},
}
+51
View File
@@ -0,0 +1,51 @@
{
"Alpaca HBAR Loader": {
"image_name": "alpaca_hbar",
"docker_dev_path": "market_data/alpaca_hbar",
"based_on_project": "cvtt-rust"
# "additional_projects": []
# "test_script": "alpacka_hbar_test.sh"
}
, "Alpaca QAT Loader": {
"image_name": "alpaca_qat",
"docker_dev_path": "market_data/alpaca_qat",
"based_on_project": "cvtt-rust"
# "additional_projects": []
}
, "Crypto Exchange Statistics": {
"image_name": "crypto_exch_stats",
"docker_dev_path": "research/crypto_exch_stats",
"based_on_project": "cvttpy"
# "additional_projects": []
}
, "Crypto Daily MD": {
"image_name": "crypto_md_day",
"docker_dev_path": "market_data/crypto_md_day",
"based_on_project": "cvttpy"
# "additional_projects": []
}
# , "Market Data Recorder": {
# "image_name": "md_recorder",
# "docker_dev_path": "market_data/md_recorder",
# "based_on_project": "cvttpy"
# "additional_projects": ["ops"]
# }
# , "MD Rec MONITOR": {
# "image_name": "md_recorder_monitor",
# "docker_dev_path": "market_data/md_recorder_monitor",
# "based_on_project": "cvttpy"
# "additional_projects": ["ops"]
# }
, "CONFIG SERVICE": {
"image_name": "config_service",
"docker_dev_path": "config_service",
"based_on_project": "cvttpy"
"additional_projects": ["ops"]
}
, "Relative Liquidity": {
"image_name": "relative_liquidity",
"docker_dev_path": "market_data/relative_liquidity",
"based_on_project": "cvttpy"
"additional_projects": []
}
}
+41 -30
View File
@@ -2,75 +2,75 @@
"cvtt": {
"cvtt2:": {
"cvttpy": [
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/cvttpy.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/cvttpy.git" },
{"cryptova": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/cvttpy.git" },
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/oleg/cvttpy.git" },
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/oleg/cvttpy.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/cvttpy.git" },
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/cvttpy.git" },
],
"ops": [
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/ops.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/ops.git" },
{"cryptova": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/ops.git" },
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/oleg/ops.git" },
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/oleg/ops.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/ops.git" },
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/cvtt2/ops.git" },
],
"docker_dev": [
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/docker_dev.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/docker_dev.git" },
{"cryptova": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/docker_dev.git" },
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/oleg/docker_dev.git" },
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/development/docker_dev.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/docker_dev.git" },
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/docker_dev.git" },
],
"config_service": [
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/config_service.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/config_service.git" },
{"cryptova": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/config_service.git" },
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/oleg/config_service.git" },
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/oleg/config_service.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/config_service.git" },
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/cvtt2/config_service.git" },
],
"cronjobs": [
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/cronjobs.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/cronjobs.git" },
{"cryptova": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/cronjobs.git" },
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/oleg/cronjobs.git" },
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/oleg/cronjobs.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/cronjobs.git" },
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/cvtt2/cronjobs.git" },
],
"research": [
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/research.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/research.git" },
{"origin": "git@cloud21.cvtt.vpn:/opt/store/git/cvtt2/research.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/research.git" },
{"cryptova": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/research.git" },
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/oleg/research.git" },
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/oleg/research.git" },
],
"jupyter_gpu": [
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/cvtt2/jupyter_gpu.git" },
{"homestore": "git@homestore.cvtt.vpn:/opt/git/cvtt2/jupyter_gpu.git" },
{"origin": "git@cloud21.cvtt.vpn:/works/store/git/jupyter_gpu.git" },
{"hs01": "git@hs01.cvtt.vpn:/works/git/cvtt2/jupyter_gpu.git" },
],
}
}
, "allbright": {
"allbright-ops": [
{"origin": "ssh://allbrigh@allbrightacademy.com:7822/home/allbrigh/git/allbright-ops.git"},
{"homestore": "ssh://oleg@homestore.sheynin.home:/opt/git/allbright/allbright-ops.git"},
{"hs01": "ssh://oleg@hs01.sheynin.home:/works/git/allbright/allbright-ops.git"},
],
"allbright-www": [
{"origin": "ssh://allbrigh@allbrightacademy.com:7822/home/allbrigh/git/allbright.git"},
{"homestore": "ssh://oleg@homestore.sheynin.home:/opt/git/allbright/allbright.git"},
{"hs01": "ssh://oleg@hs01.sheynin.home:/works/git/allbright/allbright.git"},
]
}
, "devel-env": {
"cvtt-dev": [
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/develop_env/.vscode.cvtt-dev.git"},
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/develop_env/.vscode.cvtt-dev.git"},
]
, "cvtt-research": [
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/develop_env/.vscode.cvtt-research.git"},
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/develop_env/.vscode.cvtt-research.git"},
]
, "oleg-macpro": [
{"gitea": "ssh://git@homestore.cvtt.vpn:20022/develop_env/.vscode.oleg-macpro.git"},
{"gitea": "ssh://git@hs01.cvtt.vpn:20022/develop_env/.vscode.oleg-macpro.git"},
]
},
, "education-materials": {
"Algorithmic Trading Book": [
{"origin": "ssh://git@homestore.cvtt.vpn:20022/edu/Algorithmic_Trading_Book.git"}
{"origin": "ssh://git@hs01.cvtt.vpn:20022/edu/Algorithmic_Trading_Book.git"}
]
, "Kubernetes Cookbook": [
{"origin": "ssh://git@homestore.cvtt.vpn:20022/edu/Kubernetes_Cookbook.git"}
{"origin": "ssh://git@hs01.cvtt.vpn:20022/edu/Kubernetes_Cookbook.git"}
]
}
"personal": {
@@ -78,13 +78,24 @@
{"origin": "ssh://cryptova@cryptovaltrading.com:1588/home/cryptova/git/personal/obsidian_notes.git"}
],
"data-analysis": [
{"origin": "git@homestore.cvtt.vpn:/opt/git/data_analysis.git"}
{"origin": "git@hs01.cvtt.vpn:/works/git/data_analysis.git"}
],
"leathercraft": [
{"origin": "git@homestore.cvtt.vpn:/opt/git/leathercraft.git"}
{"origin": "git@hs01.cvtt.vpn:/works/git/leathercraft.git"}
],
"musicscore": [
{"origin": "git@homestore.cvtt.vpn:/opt/git/musicscore.git"}
{"origin": "git@hs01.cvtt.vpn:/works/git/musicscore.git"}
],
".vscode": {
"cvtt-dev": [
{"origin": "ssh://git@hs01.cvtt.vpn:20022/personal/.vscode.cvtt-dev.git"},
],
"cvtt-edu": [
{"origin": "ssh://git@hs01.cvtt.vpn:20022/personal/.vscode.cvtt-edu.git"},
],
"cvtt-research": [
{"origin": "ssh://git@hs01.cvtt.vpn:20022/personal/.vscode.cvtt-research.git"},
],
},
}
}
@@ -0,0 +1,32 @@
{
"CVTT_QST001": {
"class": "cvttpy.trading.strategies.test_strat.SeesawTestStrategy"
, "params": {
"dummy": "dummy"
}
}
, "VWAP001": {
"class": "cvttpy.trading.strategies.vwap_strat.VWAP001"
, "params": {
"vwap_interval": "1 hour"
, "hist_md_source": {
"loader_class": "cvttpy.research.time_series.loaders.tsdb_loader.TsMdLoader"
, "credentials_key": "TSDB_MD_CVTTDATA_RO"
, "interval": "2 hours"
#, "from_time" is calculated
}
}
}
, "DAILY_STOCK_001": {
"class": "cvttpy.trading.strategies.daily_stocks_strat.DailyStocksStrategy"
, "params": {
"liquidate_at": "15:45" # EDT Time
}
}
, "MAN-TPOS-BY-REDIS": {
"class": "cvttpy.trading.strategies.manual_strat.TgtPosByRedisStrategy"
, "params": {
"redis_subject": "MAN_TGT_POS"
}
}
}
@@ -3,7 +3,7 @@
"dynamic_stock_list": {
"exchange_id": "ALPACA"
, "list_source": "redis"
, "redis_settings": "cvtt-prod-eqty-01"
, "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
, "redis_key": "DAY_STOCK_LIST"
}
}
+251
View File
@@ -0,0 +1,251 @@
@var ResultPath=/tmp
{
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "comm_settings": "/comm/pubsub/redis/cloud17"
# , "cvttcomm": {
# "type": "redis"
# # , "comm_settings": "/comm/pubsub/redis/localhost"
# , "comm_settings": "/comm/pubsub/redis/cloud17"
# }
, "session_type": "PERMANENT"
, "books": {
"CVTT_BK01": {}
}
###### N E W S E C T I O N (example)
, "simulation": {
"speed_factor": 0.0,
"time_events_interval_ms": 100
}
, "market_simulator" : {
"market_data": {
"sources": [
{
"loader_class": "cvttpy.research.time_series.loaders.tsdb_loader.TimescaleTSLoader"
, "credentials_key": "TSDB_MD_CVTTDATA_RO"
# , "interval": "4 hours"
, "interval": "2 hours"
, "from_time": "2024-04-15 09:00:00"
}
# , {
# "loader_class": "cvttpy.research.time_series.loaders.sqlite_loader.SqliteMdLoader",
# "file_name": "${SourcePath}/20240424.ALPACA.QAT.db"
# }
]
}
, "accounting": {
"initial_positions": {
"COINBASE": {
"BTC": 0
, "USD": 1000.0
}
}
}
, "order_entry": {
"execution": {
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_ORDER"
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
}
}
}
###### N E W S E C T I O N - end
, "backtest": {
"exchanges_settings": {
"*": {
"mkt_data": {
"enabled": true
, "streaming": true
}
,"order_entry": {
"enabled": true
, "streaming": true
}
,"accounting": {
"enabled": true
, "streaming": false
}
}
}
, "source": {
"database": {
"class": "cvttpy.tools.db.timescale.tsdb_client.TimescaleDbClient"
, "credentials_key": "TSDB_MD_CVTTDATA_RO"
}
# , "interval": "4 hours"
, "interval": "6 hours"
, "from_time": "2024-04-01 09:00:00"
}
, "initial_positions": {
"COINBASE": {
"BTC": 0
, "USD": 1000.0
}
}
, "simulation": {
"speed_factor": 0.0
}
, "execution": {
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_ORDER"
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
}
, "result": {
"repository": "${ResultPath}/backtest_results.json"
, "db_file": "${ResultPath}/%T.backtest.db"
}
}
# --------------------------------------------------------------------
, "trader": {
"app_channel": "TRDR" active_exchanges_: str
, "is_short_allowed": false
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
"enabled": true
, "streaming": true
},
}
}
, "algos": {
"TRDALGO_001": {
"class": "cvttpy.trading.algos.simple.SimpleTradingAlgo"
, "params": {}
}
, "TRDALGO_MOOMOC_01": {
"class": "cvttpy.trading.algos.moo_moc.MooMocTradingAlgo"
, "params": {
},
}
, "TRDALGO_TWAP01": {
"class": "cvttpy.trading.algos.twap.BasicTwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min
, "max_order_usd": 100
, "passive_stage_t1": 0.4 # join BBO, the rest is aggressive
, "aggressive_stage_t2": 0.4
, "aggressivity_scale": [0.5, 1.0] # 0.5 = mid, 1.0= BBO-1 tick
, "marketable_stage_added_ticks": 0
},
}
, "TRDALGO_ICEBERG01": {
"class": "cvttpy.trading.algos.twap.BasicTwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min
, "max_order_usd": 100
, "passive_stage_t1": 0
, "aggressive_stage_t2": 0
, "aggressivity_scale": [0.5, 1.0] # 0.5 = mid, 1.0= BBO-1 tick
, "marketable_stage_added_ticks": 0
},
}
}
, "trading_pos_diff_pct_trigger": 10.0
, "trading_depth": {
"BTC": 0.001
# "BTC": 0.1
}
}
# --------------------------------------------------------------------
"executor": {
"app_channel": "EXEC"
, "exchanges_settings": {
"COINBASE_AT": {
"order_entry": {
"enabled": true
, "streaming": true
},
"mkt_data": {
"enabled": false
, "streaming": false
},
"accounting": {
"enabled": false
, "streaming": false
}
, "credentials_key": {
"read_only": "COINBASE_ADV_RO"
, "trade": "COINBASE_ADV_TRD"
}
}
}
}
# --------------------------------------------------------------------
, "quant": {
"app_channel": "QUANT"
, "strategies": @inc=http://@env{CONFIG_SERVICE}/apps/common/strategies
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
"enabled": true
, "streaming": true
},
}
}
}
# --------------------------------------------------------------------
, "risk_manager": {
"app_channel": "RMGR"
, "books": {
"CVTT_BK01": {}
}
, "db": {
"positions_table": "prod.cvtt_positions"
, "cred_key": {
"write": "TSDB_TRD_CVTTDATA"
, "read_only": "TSDB_TRD_CVTTDATA"
}
}
, "positions": {
"load_interval_sec": 10.0
, "to_store_zero_positions": false
, "to_save_unchanged_positions": false
}
, "publish_value_interval": 10.0
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
"enabled": true
, "streaming": true
},
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"trade": "COINBASE_ADV"
, "read_only": "COINBASE_ADV_RO"
}
}
}
}
, "trading_recorder": {
# "format": "CSV"
# "format": "TSDB"
"format": "SQLite"
, "csv_settings": {
"order_events_file_path": "%T.order_events.csv"
"position_events_file_path": "%T.position_events.csv"
}
, "tsdb_settings": {
"db": {
"class": "cvttpy.tools.db.timescale.tsdb_client.TimescaleDbClient"
, "cred_key": "TSDB_TRD_CVTTDATA_DB_TEST"
}
, "order_events_table": "backtest.trading_orders"
, "trade_events_table": "backtest.trading_trades"
, "trading_md_summary_table": "backtest.trading_md"
}
, "sqlite_settings": {
# "file_name": "/tmp/%T.cvtt_backtest.db"
"file_name": "/tmp/cvtt_backtest.db"
}
}
}
@@ -1,14 +1,12 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
@var ResultPath=/tmp
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "cvttcomm": {
"type": "redis"
# , "redis_settings": "localhost"
, "redis_settings": "cloud17"
}
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "comm_settings": "/comm/pubsub/redis/cloud17"
# , "cvttcomm": {
# "type": "redis"
# }
, "session_type": "PERMANENT"
, "books": {
"CVTT_BK01": {}
@@ -109,7 +107,7 @@
},
}
}
, "algos": @inc=http://${CONFIG_SERVICE}/apps/common/algos
, "algos": @inc=http://@env{CONFIG_SERVICE}/apps/common/algos
, "trading_pos_diff_pct_trigger": 10.0
, "trading_depth": {
"BTC": 0.001
@@ -144,7 +142,7 @@
, "quant": {
"app_channel": "QUANT"
, "strategies": @inc=http://${CONFIG_SERVICE}/apps/common/strategies
, "strategies": @inc=http://@env{CONFIG_SERVICE}/apps/common/strategies
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
+3 -3
View File
@@ -1,11 +1,11 @@
{
"type": "redis",
"redis_settings": "localhost"
"comm_settings": "/comm/pubsub/redis/localhost"
, "app_channels": {
"executor": "EXEC"
, "risk_manager": "RMGR"
, "risk_manager": "RMGR"
, "trader": "TRDR"
, "quant": "QUANT"
, "quant": "QUANT"
}
}
@@ -0,0 +1,57 @@
@var DatabaseHost=cryptoval1.cvtt.vpn
# @var DatabaseHost=cryptoval1.sheynin.home
{
"__DUMMY__": {}
# ----------------------------- A
, "ALPACA_PROD01": {
"exchange": "ALPACA_PROD",
"credentials_key": "ALPACA_PROD"
}
, "ALPACA_SIM": {
"exchange": "ALPACA_SIM",
"credentials_key": "ALPACA_PROD"
}
, "ALPACA_SNDBX01": {
"exchange": "ALPACA_SNDBX",
"credentials_key": "ALPACA_SANDBOX"
}
# ---------------------------- B
, "BITSTAMP_ACCT": {
"exchange": "BITSTAMP",
}
, "BNBSPOT_ACCT": {
"exchange": "BNBSPOT"
}
, "BNBFUT01": {
"exchange": "BNBFUT"
}
, "BNBFUT02": {
"exchange": "BNBFUT-2"
}
, "BNBSPOT_US01": {
"exchange": "BNBSPOT_US"
}
, "COINBASE_PROD01": {
"exchange": "COINBASE_AT"
}
, "COINBASE_SIM": {
"exchange_id": "COINBASE_SIM"
}
# ---------------------------- G
, "GEMINI01": {
"exchange": "GEMINI"
}
, "GEMINI-SNDBX01": {
"exchange": "GEMINI-SNDBX"
}
# ---------------------------- K
, "KRAKEN01": {
"exchange": "KRAKEN"
}
# ---------------------------- O
, "OKX01": {
"exchange": "OKX"
}
}
+2 -3
View File
@@ -1,7 +1,6 @@
{
"refdata": @inc=http://cloud11.cvtt.vpn:6789/refdata/refdata
, "redis": @inc=http://cloud11.cvtt.vpn:6789/apps/common/redis
, "cvttcomm": @inc=http://cloud11.cvtt.vpn:6789/apps/cvttcomm
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "exchanges_settings": {
"COINBASE_AT": {
"order_entry": {
+5
View File
@@ -0,0 +1,5 @@
{
# ----------------------------------
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
}
+1 -2
View File
@@ -1,5 +1,4 @@
@var WINDOW_SIZE_SEC=2592000 # 30 days
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"md_recorder": {
"db": {
@@ -68,7 +67,7 @@
}
# ----------------------------------
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "exchanges_settings": {
"COINBASE_AT": {
"order_entry": {
+2 -4
View File
@@ -1,9 +1,7 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "cvttcomm": @inc=http://${CONFIG_SERVICE}/apps/cvttcomm
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "quant": {
"books": {
"CVTT_BK01": {}
@@ -1,9 +1,6 @@
{
"refdata": @inc=http://cloud11.cvtt.vpn:6789/refdata/refdata
, "cvttcomm": @inc=http://cloud11.cvtt.vpn:6789/apps/cvttcomm
, "redis": @inc=http://cloud11.cvtt.vpn:6789/apps/common/redis
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "risk_manager": {
"book": "CVTT_BK01"
, "database": {
+2 -3
View File
@@ -1,7 +1,6 @@
{
"refdata": @inc=http://cloud11.cvtt.vpn:6789/refdata/refdata
, "cvttcomm": @inc=http://cloud11.cvtt.vpn:6789/apps/cvttcomm
, "redis": @inc=http://cloud11.cvtt.vpn:6789/apps/common/redis
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
+4 -5
View File
@@ -1,16 +1,15 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
@var ResultPath=/tmp
@var SourcePath=/home/oleg/develop/cvtt2/tmp
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "algos": @inc=http://${CONFIG_SERVICE}/apps/common/algos
"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
, "session_type": "CALENDAR"
, "calendar_session": {
"trading_hours_url": [
"GET"
, "http://cloud16.cvtt.vpn:8000/api/v1/markets/hours?mic=XNYS&start={start}&end={end}"
, "https://trading-calendar.cvtt.net/api/v1/markets/hours?mic=XNYS&start={start}&end={end}"
]
}
###### N E W S E C T I O N (example)
+27 -31
View File
@@ -1,35 +1,31 @@
# INTENDED TO REPLACE redis.cfg
# /comm
{
"redis": {
"localhost": {
"url": "redis://localhost"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvttdata": {
"url": "redis://cvttdata.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-testserver": {
"url": "redis://cvtt-testserver.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-eqty-01": {
"url": "redis://cvtt-prod-eqty-01.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-03": {
"url": "redis://cvtt-prod-03.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-eqty-01": {
"url": "redis://cvtt-prod-eqty-01.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
"pubsub" : {
"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
}
}
}
}
+6
View File
@@ -0,0 +1,6 @@
{
"TimescaleMktDataLoader" : {
"loader_class": "cvttpy.trading.mkt_data.time_series.loaders.tsdb_loader.TsMdLoader",
"credentials_key": "TSDB_MD_CVTTDATA_RO"
}
}
-32
View File
@@ -1,32 +0,0 @@
{
"localhost": {
"url": "redis://localhost"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvttdata": {
"url": "redis://cvttdata.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-testserver": {
"url": "redis://cvtt-testserver.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-eqty-01": {
"url": "redis://cvtt-prod-eqty-01.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-03": {
"url": "redis://cvtt-prod-03.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
, "cvtt-prod-eqty-01": {
"url": "redis://cvtt-prod-eqty-01.cvtt.vpn"
, "read_timeout" : 0.01
, "ping_timeout_secs": 2.0
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"PERMISSIVE_RISK_STRATEGY": {
"class": "cvttpy.trading.risk.permissive.PermissiveRiskStrategy"
, "params": {
"dummy": "dummy"
}
}
}
+20 -21
View File
@@ -1,32 +1,31 @@
{
"CVTT_QST001": {
"hist_md_loaders": @inc=http://@env{CONFIG_SERVICE}/apps/common/hist_md_loaders
, "CVTT_QST001": {
"class": "cvttpy.trading.strategies.test_strat.SeesawTestStrategy"
, "params": {
"dummy": "dummy"
}
, "default_params": {}
}
, "VWAP001": {
"class": "cvttpy.trading.strategies.vwap_strat.VWAP001"
, "params": {
"vwap_interval": "1 hour"
, "hist_md_source": {
"loader_class": "cvttpy.research.time_series.loaders.tsdb_loader.TsMdLoader"
, "credentials_key": "TSDB_MD_CVTTDATA_RO"
, "default_params": {
"vwap_interval": "1 hour" , "hist_md_source": {
"loader": "TimescaleMktDataLoader"
, "interval": "2 hours"
#, "from_time" is calculated
}
}
}
, "DAILY_STOCK_001": {
"class": "cvttpy.trading.strategies.daily_stocks_strat.DailyStocksStrategy"
, "params": {
"liquidate_at": "15:45" # EDT Time
}
}
, "MAN-TPOS-BY-REDIS": {
"class": "cvttpy.trading.strategies.manual_strat.TgtPosByRedisStrategy"
, "params": {
"redis_subject": "MAN_TGT_POS"
}
}
# , "DAILY_STOCK_001": {
# "class": "cvttpy.trading.strategies.daily_stocks_strat.DailyStocksStrategy"
# , "params": {
# "liquidate_at": "15:45" # EDT Time
# }
# }
# , "MAN-TPOS-BY-REDIS": {
# "class": "cvttpy.trading.strategies.manual_strat.TgtPosByRedisStrategy"
# , "params": {
# "redis_subject": "MAN_TGT_POS"
# }
# }
}
+83 -218
View File
@@ -1,251 +1,116 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
@var ResultPath=/tmp
@var COORDINATOR_PORT=23456
@var PASS_THROUGH_STRAT_PORT=12345
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "cvttcomm": {
"type": "redis"
# , "redis_settings": "localhost"
, "redis_settings": "cloud17"
}
, "session_type": "PERMANENT"
, "books": {
"CVTT_BK01": {}
}
###### N E W S E C T I O N (example)
, "simulation": {
"speed_factor": 0.0,
"time_events_interval_ms": 100
}
, "market_simulator" : {
"market_data": {
"sources": [
{
"loader_class": "cvttpy.research.time_series.loaders.tsdb_loader.TimescaleTSLoader"
, "credentials_key": "TSDB_MD_CVTTDATA_RO"
# , "interval": "4 hours"
, "interval": "2 hours"
, "from_time": "2024-04-15 09:00:00"
}
# , {
# "loader_class": "cvttpy.research.time_series.loaders.sqlite_loader.SqliteMdLoader",
# "file_name": "${SourcePath}/20240424.ALPACA.QAT.db"
# }
]
}
, "accounting": {
"initial_positions": {
"COINBASE": {
"BTC": 0
, "USD": 1000.0
}
}
}
, "order_entry": {
"execution": {
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_ORDER"
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
"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
, "comm_settings": "comm/pubsub/redis/localhost"
, "coordinator": {
"api": {
"REST": {
"port": ${COORDINATOR_PORT},
"base_url": ["POST", "http://localhost:${COORDINATOR_PORT}"]
}
}
}
###### N E W S E C T I O N - end
, "backtest": {
, "market_data_gateway": {
"exchanges_settings": {
"*": {
"mkt_data": {
"enabled": true
, "streaming": true
}
,"order_entry": {
"enabled": true
, "streaming": true
}
,"accounting": {
"enabled": true
},
"order_entry": {
"enabled": false
, "streaming": false
}
}
}
, "source": {
"database": {
"class": "cvttpy.tools.db.timescale.tsdb_client.TimescaleDbClient"
, "credentials_key": "TSDB_MD_CVTTDATA_RO"
}
# , "interval": "4 hours"
, "interval": "6 hours"
, "from_time": "2024-04-01 09:00:00"
}
, "initial_positions": {
"COINBASE": {
"BTC": 0
, "USD": 1000.0
}
}
, "simulation": {
"speed_factor": 0.0
}
, "execution": {
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_ORDER"
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
}
, "result": {
"repository": "${ResultPath}/backtest_results.json"
, "db_file": "${ResultPath}/%T.backtest.db"
},
"accounting": {
"enabled": false
, "streaming": false
},
},
}
, "channel_prefix": "MD_GW"
, "app_status_channel": "MD_GW_APP_STATUS"
, "exchanges": [
"BNBFUT"
, "COINBASE_AT"
]
}
# --------------------------------------------------------------------
, "trader": {
"app_channel": "TRDR" active_exchanges_: str
, "is_short_allowed": false
, "exchanges_settings": {
"COINBASE_AT": {
, "order_entry_gateway": {
"exchanges_settings": {
"ALPACA_SNDBX": {
"mkt_data": {
"enabled": true
, "streaming": true
"enabled": false
, "streaming": false
},
}
}
, "algos": {
"TRDALGO_001": {
"class": "cvttpy.trading.algos.simple.SimpleTradingAlgo"
, "params": {}
}
, "TRDALGO_MOOMOC_01": {
"class": "cvttpy.trading.algos.moo_moc.MooMocTradingAlgo"
, "params": {
},
}
, "TRDALGO_TWAP01": {
"class": "cvttpy.trading.algos.twap.BasicTwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min
, "max_order_usd": 100
, "passive_stage_t1": 0.4 # join BBO, the rest is aggressive
, "aggressive_stage_t2": 0.4
, "aggressivity_scale": [0.5, 1.0] # 0.5 = mid, 1.0= BBO-1 tick
, "marketable_stage_added_ticks": 0
},
}
, "TRDALGO_ICEBERG01": {
"class": "cvttpy.trading.algos.twap.BasicTwapAlgo"
, "params": {
"num_slices": 5
, "duration_sec": 1500 # 25 min
, "max_order_usd": 100
, "passive_stage_t1": 0
, "aggressive_stage_t2": 0
, "aggressivity_scale": [0.5, 1.0] # 0.5 = mid, 1.0= BBO-1 tick
, "marketable_stage_added_ticks": 0
},
}
}
, "trading_pos_diff_pct_trigger": 10.0
, "trading_depth": {
"BTC": 0.001
# "BTC": 0.1
}
}
# --------------------------------------------------------------------
"executor": {
"app_channel": "EXEC"
, "exchanges_settings": {
"COINBASE_AT": {
"order_entry": {
"enabled": true
, "streaming": true
},
"mkt_data": {
"enabled": false
, "streaming": false
},
"accounting": {
"enabled": false
, "streaming": false
}
, "credentials_key": {
"read_only": "COINBASE_ADV_RO"
, "trade": "COINBASE_ADV_TRD"
"read_only": "ALPACA_SANDBOX"
, "trade": "ALPACA_SANDBOX"
}
}
}
, "channel_prefix": "OE_GW"
, "app_status_channel": "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"
}
}
}
, "channel_prefix": "ACCT_GW"
, "app_status_channel": "ACCT_GW_APP_STATUS"
, "exchanges": [
"ALPACA_SNDBX"
]
}
# --------------------------------------------------------------------
, "quant": {
"app_channel": "QUANT"
, "strategies": @inc=http://${CONFIG_SERVICE}/apps/common/strategies
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
"enabled": true
, "streaming": true
},
"channel_prefix": "QUANT"
, "app_status_channel": "QUANT_MS_STATUS"
, "passthrough_strategy": {
"REST": {
"port": ${PASS_THROUGH_STRAT_PORT}
"base_url": ["POST", "http://localhost:${PASS_THROUGH_STRAT_PORT}"]
}
, "WS": {
"url": "ws://localhost:12346/ws"
}
}
}
# --------------------------------------------------------------------
, "risk_manager": {
"app_channel": "RMGR"
, "books": {
"CVTT_BK01": {}
}
, "db": {
"positions_table": "prod.cvtt_positions"
, "cred_key": {
"write": "TSDB_TRD_CVTTDATA"
, "read_only": "TSDB_TRD_CVTTDATA"
}
}
, "positions": {
"load_interval_sec": 10.0
, "to_store_zero_positions": false
, "to_save_unchanged_positions": false
}
, "publish_value_interval": 10.0
, "exchanges_settings": {
"COINBASE_AT": {
"mkt_data": {
"enabled": true
, "streaming": true
},
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"trade": "COINBASE_ADV"
, "read_only": "COINBASE_ADV_RO"
}
}
}
, "trader": {
"channel_prefix": "TRADER"
, "app_status_channel": "TRADER_MS_STATUS"
}
, "trading_recorder": {
# "format": "CSV"
# "format": "TSDB"
"format": "SQLite"
, "csv_settings": {
"order_events_file_path": "%T.order_events.csv"
"position_events_file_path": "%T.position_events.csv"
}
, "tsdb_settings": {
"db": {
"class": "cvttpy.tools.db.timescale.tsdb_client.TimescaleDbClient"
, "cred_key": "TSDB_TRD_CVTTDATA_DB_TEST"
}
, "order_events_table": "backtest.trading_orders"
, "trade_events_table": "backtest.trading_trades"
, "trading_md_summary_table": "backtest.trading_md"
}
, "sqlite_settings": {
# "file_name": "/tmp/%T.cvtt_backtest.db"
"file_name": "/tmp/cvtt_backtest.db"
}
}
}
}
+16 -10
View File
@@ -1,19 +1,25 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
@var ResultPath=/tmp
{ "___dummy___": null
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "active_instruments": @inc=http://${CONFIG_SERVICE}/apps/active_instruments
, "cvttcomm": {
"type": "redis"
, "redis_settings": "cvtt-prod-eqty-01"
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "active_instruments": {
"ALPACA_SNDBX": {
"dynamic_stock_list": {
"exchange_id": "ALPACA"
, "list_source": "redis"
, "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
, "redis_key": "DAY_STOCK_LIST"
}
}
}
, "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
, "session_type": "CALENDAR"
, "calendar_session": {
"trading_hours_url": [
"GET"
, "http://cloud16.cvtt.vpn:8000/api/v1/markets/hours?mic=XNYS&start={start}&end={end}"
, "https://trading-calendar.cvtt.net/api/v1/markets/hours?mic=XNYS&start={start}&end={end}"
]
}
, "books": {
@@ -45,7 +51,7 @@
},
}
}
, "algos": @inc=http://${CONFIG_SERVICE}/apps/common/algos
, "algos": @inc=http://@env{CONFIG_SERVICE}/apps/common/algos
, "trading_pos_diff_pct_trigger": 10.0
, "trading_depth": {
"USD": 1000.0,
@@ -114,7 +120,7 @@
# --------------------------------------------------------------------
, "quant": {
"app_channel": "QUANT"
, "strategies": @inc=http://${CONFIG_SERVICE}/apps/common/strategies
, "strategies": @inc=http://@env{CONFIG_SERVICE}/apps/common/strategies
, "exchanges_settings": {
"*": {
"mkt_data": {
+166
View File
@@ -0,0 +1,166 @@
@var COORDINATOR_REST_PORT=23456
# @var COORDINATOR_WS_PORT=12345
@var PRICER_REST_PORT=23457
@var PRICER_WS_PORT=12346
@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"
"cred_key": "TSDB_CVTT_TRADINNG_PROD-01-RW"
}
}
, "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"
, "api": {
"REST": {
"port": ${PRICER_REST_PORT},
"base_url": ["POST", "http://localhost:${PRICER_REST_PORT}"]
}
, "WS": {
"url": "ws://localhost:${PRICER_WS_PORT}/ws"
}
}
}
}
-7
View File
@@ -1,7 +0,0 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
# ----------------------------------
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
}
+2 -13
View File
@@ -1,17 +1,6 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
// -------------------------------------------------------------------------
// This is used only for dynamically loaded instrument lists (as for Alpaca)
, "active_instruments": @inc=http://${CONFIG_SERVICE}/apps/active_instruments
, "cvttcomm": {
"type": "redis"
, "redis_settings": "cvtt-prod-eqty-01"
}
//------------------------------------------------------------------------------
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "md_recorder": {
"instrument_groups": {
+6 -6
View File
@@ -1,6 +1,5 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
"exchanges_settings": {
"*": {
"mkt_data": {
@@ -9,9 +8,10 @@
},
}
}
, "cvttcomm": {
"type": "redis"
, "redis_settings": "localhost"
}
, "comm_settings": "/comm/pubsub/redis/localhost"
# , "cvttcomm": {
# "type": "redis"
# , "comm_settings": "/comm/pubsub/redis/localhost"
# }
}
+7 -7
View File
@@ -1,10 +1,9 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "calendar_session": {
"trading_hours_url": [
"GET"
, "http://cloud16.cvtt.vpn:8000/api/v1/markets/hours?mic=XNYS&start={start}&end={end}"
, "https://trading-calendar.cvtt.net/api/v1/markets/hours?mic=XNYS&start={start}&end={end}"
]
}
, "exchanges_settings": {
@@ -15,9 +14,10 @@
},
}
}
, "cvttcomm": {
"type": "redis"
, "redis_settings": "localhost"
}
, "comm_settings": "/comm/pubsub/redis/localhost"
# , "cvttcomm": {
# "type": "redis"
# , "comm_settings": "/comm/pubsub/redis/localhost"
# }
}
@@ -0,0 +1,49 @@
{
"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
, "exchanges_settings": {
"ALPACA_SIM": {
"mkt_data": {
"enabled": true
, "streaming": true
},
"order_entry": {
"enabled": true
, "streaming": true
},
"accounting": {
"enabled": true
, "streaming": false
},
},
# "ALPACA-MD-REST-ONLY": {
# "mkt_data": {
# "enabled": true
# , "streaming": false
# },
# },
# "COINBASE_SIM": {
# "mkt_data": {
# "enabled": true
# , "streaming": true
# },
# "order_entry": {
# "enabled": true
# , "streaming": true
# },
# "accounting": {
# "enabled": true
# , "streaming": false
# },
# },
}
, "trading": {
"book_id": "COINTEGR_BOOK_001"
,"algo": "TRDALGO_SIMPLE_BO"
, "usd_amount": 1000.0
, "price_offset_bps": 20
}
}
+18 -5
View File
@@ -1,8 +1,7 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://${CONFIG_SERVICE}/apps/common/comm
, "algos": @inc=http://${CONFIG_SERVICE}/apps/common/algos
"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
"exchanges_settings": {
"*": {
"mkt_data": {
@@ -29,7 +28,21 @@
"enabled": true
, "streaming": false
},
}
},
"ALPACA_SIM": {
"mkt_data": {
"enabled": true
, "streaming": true
},
"order_entry": {
"enabled": true
, "streaming": true
},
"accounting": {
"enabled": true
, "streaming": false
},
},
}
}
@@ -1,15 +1,14 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
@var SQLITE_DIR=/home/oleg/tmp/sqlite
@var FROM_TIME="2024-10-03 13:30:00"
@var FROM_TIME="2024-11-14 13:30:00"
@var INTERVAL="18 minutes"
# @var INTERVAL="5 minutes"
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "comm": @inc=http://${CONFIG_SERVICE}/apps/common/comm
, "redis_settings": "localhost"
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "comm_settings": "/comm/pubsub/redis/localhost"
, "simulation": {
# "speed_factor": 1.0,
"speed_factor": 0.0,
+144
View File
@@ -0,0 +1,144 @@
@var DATA_DIR=/home/coder/project/data
@var MD_WS_PORT=10180
@var OE_WS_PORT=10181
@var OE_REST_PORT=10182
@var ACCT_REST_PORT=10083
@var DATE=20241114
@var FROM_TIME=13:30
@var TO_TIME=20:00
{
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "comm_settings": "/comm/pubsub/redis/localhost"
, "simulation": {
"speed_factor": 0.0,
# "speed_factor": 1000.0,
"time_events_interval_ms": 0
}
, "market_simulator" : {
"initial_positions": {
"exchange": "ALPACA",
"assets": {
"BTC": 0.5
, "ETH": 0.0
, "USD": 10_000.0
}
}
, "market_data": {
"sources": [
{
"loader_class": "cvttpy.trading.mkt_data.time_series.loaders.sqlite_loader.SqliteMdLoader"
, "file_name": "${DATA_DIR}/eqt/${DATE}.alpaca_sim_md.db"
, "exchange_id": "ALPACA"
, "instruments": ["STOCK-COIN", "STOCK-CAN"]
, "md_types": {
"TRADES": {
"table_name": "md_trades"
, "columns": [
"tstamp"
, "tstamp_ns as tm" # required column
, "tstamp_ns as exchange_ts_ns"
, "tstamp_ns as local_time_ns"
, "exchange_id"
, "instrument_id"
, "exch as exchange_code"
, "px as price"
, "qty as quantity"
, "'' as taker_side" # get from condition (?)
, "trade_id"
, "condition"
, "tape"
]
, "time_column": "tstamp"
, "from_time": "${FROM_TIME}"
, "to_time": "${TO_TIME}"
}
, "BOOK_TOP": {
"table_name": "md_quotes"
, "columns": [
"tstamp"
, "tstamp_ns as tm" # required column
, "tstamp_ns as local_time_ns"
, "exchange_id"
, "instrument_id"
, "bid_exch as bid_exchange_code"
, "ask_exch as ask_exchange_code"
, "bid_px as bid_price"
, "bid_qty as bid_quantity"
, "ask_px as ask_price"
, "ask_qty as ask_quantity"
]
, "time_column": "tstamp"
, "from_time": "${FROM_TIME}"
, "to_time": "${TO_TIME}"
}
# , "HIST_BAR": {
# "table_name": "md_1min_bars"
# , "columns": [
# "tstamp"
# , "tstamp_ns as tm" # must have tm for DataFrame
# , "tstamp_ns as local_time_ns" # must have for simrunner
# , "exchange_id"
# , "instrument_id"
# , "open"
# , "high"
# , "low"
# , "close"
# , "volume"
# , "vwap"
# , "num_trades"
# ]
# , "time_column": "tstamp"
# }
}
}
]
, "api": {
"web_socket": {
"url": "ws://localhost:${MD_WS_PORT}/ws"
}
}
}
, "order_entry": {
"execution": {
"execute_on": ["BOOK_TOP", "TRADES"]
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_TRADE"
, "short_sale_allowed": false
, "fee_schedule": { # ALPACA -
"taker_fee_rate": 0.0
"maker_fee_rate": 0.0
}
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
}
, "api": {
"web_socket": {
"url": "ws://localhost:${OE_WS_PORT}/ws"
}
, "REST": {
"port": ${OE_REST_PORT}
"new_order_url": ["POST", "http://localhost:${OE_REST_PORT}/order"]
, "cancel_order_url": ["POST", "http://localhost:${OE_REST_PORT}/cancel"]
, "cancel_all_url": ["POST", "http://localhost:${OE_REST_PORT}/cancel_all"]
, "open_orders_url": ["GET", "http://localhost:${OE_REST_PORT}/open_orders"]
, "order_status_url": ["GET", "http://localhost:${OE_REST_PORT}/order_status"]
}
}
}
, "accounting": {
"api": {
"REST": {
"port": ${ACCT_REST_PORT}
, "positions_url": ["GET", "http://localhost:${ACCT_REST_PORT}/positions"]
, "trades_url": ["GET", "http://localhost:${ACCT_REST_PORT}/trades"]
}
}
}
}
}
+349
View File
@@ -0,0 +1,349 @@
@var COORDINATOR_HOST=localhost
@var COORDINATOR_REST_PORT=28001
@var COORDINATOR_WS_PORT=28002
@var GLOBAL_CHANNEL_PREFIX=CVTT_MU_SIM
@var SIM_HOST=localhost
@var SIM_DATA_DIR=/home/oleg/develop/simulation/data
@var SIM_MD_WS_PORT=28080
@var SIM_OE_WS_PORT=28081
@var SIM_OE_REST_PORT=28082
@var SIM_AC_REST_PORT=28083
{
# ---------------------------------------
"__dummy__": null
# ---------------------------------------
# Overwriting "exchanges" part in "refdata"
# "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
"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": {
"SIM_COINBASE": {
"exchange_id": "COINBASE",
"name": "Coinbase Advanced Trade (Simulation)",
"type": "SPOT",
"mktdata" : {
"class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
"api": @pathptr=simulation/market_simulator/market_data/api
},
"order_entry": {
"class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
"api": @ptrpath=simulation/market_simulator/order_entry/api
},
"accounting": {
"class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
"api": @ptrpath=simulation/market_simulator/accounting/api
},
},
"SIM_ALPACA": {
"exchange_id": "ALPACA",
"name": "Alpaca Trading",
"type": "EQUITY",
"mktdata" : {
"class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
"config_key": "simulation/market_simulator/market_data/api"
},
"order_entry": {
"class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
"config_key": "simulation/market_simulator/order_entry/api"
},
"accounting": {
"class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
"config_key": "simulation/market_simulator/accounting/api"
}
},
}
},
"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}",
"simulation": {
# "speed_factor": 1.0,
"speed_factor": 0.0
, "time_events_interval_ms": 0
, "simtime_file": "${SIM_DATA_DIR}/simtime.bin"
, "expected_consumers": [
"md_gateway",
"mkt_gateway_tester"
"coordinator",
# "oe_gateway",
# "acct_gateway",
# "quant",
# "trader",
# "bookkeeper",
# "risk_manager",
# "pricer"
]
, "consumer_timeout_sec": 30.0
, "market_simulator" : {
"initial_positions": {
"exchange": "COINBASE",
"assets": {
"BTC": 0.5
, "ETH": 0.0
, "USD": 10_000.0
}
}
, "market_data": {
"sources": [
{
"loader_class": "cvttpy.trading.mkt_data.time_series.loaders.sqlite_loader.SqliteMdLoader"
, "file_name": "${SIM_DATA_DIR}/20250422.CNBS.BTC_USD.db"
, "table_name": "md_trades"
, "columns": [
"tstamp"
, "tstamp_ns as tm" # must have tm for DataFrame
, "tstamp_ns as local_time_ns" # must have for simrunner
, "exchange_id"
, "instrument_id"
, "px as price"
, "qty as quantity"
, "trade_id"
, "condition as aggressor_side"
, "condition as taker_side"
]
, "time_column": "tstamp"
, "exchange_id": "COINBASE"
, "instruments": ["PAIR-BTC-USD"]
, "md_type": "TRADES"
}
# , {
# "loader_class": "cvttpy.trading.mkt_data.time_series.loaders.tsdb_loader.TimescaleTSLoader"
# , "credentials_key": "TSDB_MD_CVTTDATA_RO"
# , "interval": ${INTERVAL}
# , "from_time": ${FROM_TIME} #"2024-10-03 09:00:00"
# , "exchange_id": "COINBASE"
# , "instruments": ["PAIR-BTC-USD"]
# , "md_type": "BOOK_TOP"
# , "table_name": "coinbase.md_booktops"
# , "columns": [
# "time",
# "local_time_ns",
# "exchange_id",
# "instrument_id",
# "bid_price",
# "bid_quantity",
# "ask_price",
# "ask_quantity",
# "'BT' as type",
# ]
# , "time_column": "time"
# }
]
, "api": {
"web_socket": {
"url": "ws://${SIM_HOST}:${SIM_MD_WS_PORT}/ws"
}
}
}
, "order_entry": {
"execution": {
"execute_on": ["BOOK_TOP", "TRADES"]
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_TRADE"
, "short_sale_allowed": false
, "fee_schedule": {
"taker_fee_rate": 0.006
"maker_fee_rate": 0.004
}
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
}
, "api": {
"web_socket": {
"url": "ws://${SIM_HOST}:${SIM_OE_WS_PORT}/ws"
}
, "REST": {
"port": ${SIM_OE_REST_PORT},
"base_url": "http://${SIM_HOST}:${SIM_OE_REST_PORT}",
"endpoints": {
"new_order": ["POST", "/order"],
"cancel_order": ["POST", "/cancel"],
"cancel_all": ["POST", "/cancel_all"],
"open_orders": ["GET", "/open_orders"],
"order_status": ["GET", "/order_status"]
}
}
}
}
, "accounting": {
"api": {
"REST": {
"port": ${SIM_AC_REST_PORT},
"base_url": "http://${SIM_HOST}:${SIM_AC_REST_PORT}",
"endpoints": {
"positions": ["GET", "/positions"]
"trades": ["GET", "/trades"]
}
}
}
}
}
, "external_participants": [
{
"class": "cvttpy.apps.trading_simulator.participants.external_strategy.ExternalStrategySim"
"params": {
"reader": {
"source": "file://${SIM_DATA_DIR}/trading_instructions.json"
}
"listener": {
"book_id": "TESTBK_COINBS_01",
"strategy_id": "DUMMY_STRATEGY"
}
}
}
]
}
, "coordinator": {
"api": {
"REST": {
"port": ${COORDINATOR_REST_PORT},
"base_url": ["POST", "http://${COORDINATOR_HOST}:${COORDINATOR_REST_PORT}"],
}
, "WS": {
"url": "ws://${COORDINATOR_HOST}:${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": [
"SIM_COINBASE"
],
"presubscribe": [
"COINBASE:PAIR-BTC-USD"
]
}
, "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": [
"SIM_COINBASE"
]
}
, "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": [
"SIM_COINBASE"
]
}
, "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"
}
}
@@ -0,0 +1,349 @@
@var COORDINATOR_HOST=localhost
@var COORDINATOR_REST_PORT=28001
@var COORDINATOR_WS_PORT=28002
@var GLOBAL_CHANNEL_PREFIX=CVTT_MU_SIM
@var SIM_HOST=localhost
@var SIM_DATA_DIR=/home/oleg/develop/simulation/data
@var SIM_MD_WS_PORT=28080
@var SIM_OE_WS_PORT=28081
@var SIM_OE_REST_PORT=28082
@var SIM_AC_REST_PORT=28083
{
# ---------------------------------------
"__dummy__": null
# ---------------------------------------
# Overwriting "exchanges" part in "refdata"
# "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
"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": {
"SIM_COINBASE": {
"exchange_id": "COINBASE",
"name": "Coinbase Advanced Trade (Simulation)",
"type": "SPOT",
"mktdata" : {
"class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
"api": @pathptr=simulation/market_simulator/market_data/api
},
"order_entry": {
"class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
"api": @ptrpath=simulation/market_simulator/order_entry/api
},
"accounting": {
"class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
"api": @ptrpath=simulation/market_simulator/accounting/api
},
},
"SIM_ALPACA": {
"exchange_id": "ALPACA",
"name": "Alpaca Trading",
"type": "EQUITY",
"mktdata" : {
"class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
"config_key": "simulation/market_simulator/market_data/api"
},
"order_entry": {
"class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
"config_key": "simulation/market_simulator/order_entry/api"
},
"accounting": {
"class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
"config_key": "simulation/market_simulator/accounting/api"
}
},
}
},
"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}",
"simulation": {
# "speed_factor": 1.0,
"speed_factor": 0.0
, "time_events_interval_ms": 0
, "simtime_file": "${SIM_DATA_DIR}/simtime.bin"
, "expected_consumers": [
"md_gateway",
"mkt_gateway_tester"
"coordinator",
# "oe_gateway",
# "acct_gateway",
# "quant",
# "trader",
# "bookkeeper",
# "risk_manager",
# "pricer"
]
, "consumer_timeout_sec": 30.0
, "market_simulator" : {
"initial_positions": {
"exchange": "COINBASE",
"assets": {
"BTC": 0.5
, "ETH": 0.0
, "USD": 10_000.0
}
}
, "market_data": {
"sources": [
{
"loader_class": "cvttpy.trading.mkt_data.time_series.loaders.sqlite_loader.SqliteMdLoader"
, "file_name": "${SIM_DATA_DIR}/20250422.CNBS.BTC_USD.db"
, "table_name": "md_trades"
, "columns": [
"tstamp"
, "tstamp_ns as tm" # must have tm for DataFrame
, "tstamp_ns as local_time_ns" # must have for simrunner
, "exchange_id"
, "instrument_id"
, "px as price"
, "qty as quantity"
, "trade_id"
, "condition as aggressor_side"
, "condition as taker_side"
]
, "time_column": "tstamp"
, "exchange_id": "COINBASE"
, "instruments": ["PAIR-BTC-USD"]
, "md_type": "TRADES"
}
# , {
# "loader_class": "cvttpy.trading.mkt_data.time_series.loaders.tsdb_loader.TimescaleTSLoader"
# , "credentials_key": "TSDB_MD_CVTTDATA_RO"
# , "interval": ${INTERVAL}
# , "from_time": ${FROM_TIME} #"2024-10-03 09:00:00"
# , "exchange_id": "COINBASE"
# , "instruments": ["PAIR-BTC-USD"]
# , "md_type": "BOOK_TOP"
# , "table_name": "coinbase.md_booktops"
# , "columns": [
# "time",
# "local_time_ns",
# "exchange_id",
# "instrument_id",
# "bid_price",
# "bid_quantity",
# "ask_price",
# "ask_quantity",
# "'BT' as type",
# ]
# , "time_column": "time"
# }
]
, "api": {
"web_socket": {
"url": "ws://${SIM_HOST}:${SIM_MD_WS_PORT}/ws"
}
}
}
, "order_entry": {
"execution": {
"execute_on": ["BOOK_TOP", "TRADES"]
"top_only": true
,"min_order_age_sec": 0.1
, "pricing_method": "BY_MKT_TRD_PRICE_BY_TRADE"
, "short_sale_allowed": false
, "fee_schedule": {
"taker_fee_rate": 0.006
"maker_fee_rate": 0.004
}
# , "presubscribe_md_types": ["BOOK_TOP", "TRADES"]
}
, "api": {
"web_socket": {
"url": "ws://${SIM_HOST}:${SIM_OE_WS_PORT}/ws"
}
, "REST": {
"port": ${SIM_OE_REST_PORT},
"base_url": "http://${SIM_HOST}:${SIM_OE_REST_PORT}",
"endpoints": {
"new_order": ["POST", "/order"],
"cancel_order": ["POST", "/cancel"],
"cancel_all": ["POST", "/cancel_all"],
"open_orders": ["GET", "/open_orders"],
"order_status": ["GET", "/order_status"]
}
}
}
}
, "accounting": {
"api": {
"REST": {
"port": ${SIM_AC_REST_PORT},
"base_url": "http://${SIM_HOST}:${SIM_AC_REST_PORT}",
"endpoints": {
"positions": ["GET", "/positions"]
"trades": ["GET", "/trades"]
}
}
}
}
}
, "external_participants": [
{
"class": "cvttpy.apps.trading_simulator.participants.external_strategy.ExternalStrategySim"
"params": {
"reader": {
"source": "file://${SIM_DATA_DIR}/trading_instructions.json"
}
"listener": {
"book_id": "TESTBK_COINBS_01",
"strategy_id": "DUMMY_STRATEGY"
}
}
}
]
}
, "coordinator": {
"api": {
"REST": {
"port": ${COORDINATOR_REST_PORT},
"base_url": ["POST", "http://${COORDINATOR_HOST}:${COORDINATOR_REST_PORT}"],
}
, "WS": {
"url": "ws://${COORDINATOR_HOST}:${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": [
"SIM_COINBASE"
],
"presubscribe": [
"COINBASE:PAIR-BTC-USD"
]
}
, "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": [
"SIM_COINBASE"
]
}
, "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": [
"SIM_COINBASE"
]
}
, "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"
}
}
+1 -3
View File
@@ -1,5 +1,3 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"__DUMMY__": null
@@ -24,6 +22,6 @@
}
}
}
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
}
+1 -3
View File
@@ -1,5 +1,3 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"__DUMMY__": null
@@ -24,6 +22,6 @@
}
}
}
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
}
+1 -3
View File
@@ -1,5 +1,3 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"__DUMMY__": null
@@ -29,6 +27,6 @@
}
}
}
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
}
+12 -3
View File
@@ -1,8 +1,8 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"__DUMMY__": null
, "exchanges_settings": {
"COINBASE_AT": {
"accounting": {
"enabled": true
@@ -21,6 +21,15 @@
"read_only": "ALPACA_SANDBOX"
}
}
, "ALPACA_PROD": {
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"read_only": "ALPACA_PROD"
}
}
, "GEMINI-SNDBX": {
"accounting": {
"enabled": true
@@ -31,7 +40,7 @@
}
}
}
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
}
+10 -3
View File
@@ -1,4 +1,3 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"__DUMMY__": null
@@ -21,8 +20,16 @@
"read_only": "ALPACA_SANDBOX"
}
}
, "ALPACA_PROD": {
"accounting": {
"enabled": true
, "streaming": false
}
, "credentials_key": {
"read_only": "ALPACA_PROD"
}
}
}
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
}
+13 -5
View File
@@ -1,8 +1,16 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "active_instruments": @inc=http://${CONFIG_SERVICE}/apps/active_instruments
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "active_instruments": {
"ALPACA_SNDBX": {
"dynamic_stock_list": {
"exchange_id": "ALPACA"
, "list_source": "redis"
, "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
, "redis_key": "DAY_STOCK_LIST"
}
}
}
"exchanges_settings": {
"*": {
"mkt_data": {
@@ -19,7 +27,7 @@
}
# , "cvttcomm": {
# "type": "redis"
# , "redis_settings": "localhost"
# , "comm_settings": "/comm/pubsub/redis/localhost"
# }
}
+17 -8
View File
@@ -1,8 +1,16 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
, "active_instruments": @inc=http://${CONFIG_SERVICE}/apps/active_instruments
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "active_instruments": {
"ALPACA_SNDBX": {
"dynamic_stock_list": {
"exchange_id": "ALPACA"
, "list_source": "redis"
, "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
, "redis_key": "DAY_STOCK_LIST"
}
}
}
, "exchanges_settings": {
"*": {
"mkt_data": {
@@ -11,10 +19,11 @@
},
}
}
, "cvttcomm": {
"type": "redis"
, "redis_settings": "cvtt-prod-eqty-01"
}
, "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
# , "cvttcomm": {
# "type": "redis"
# , "comm_settings": "/comm/pubsub/redis/cvtt-prod-eqty-01"
# }
, "md_portal": {
"app_channel": "MD_PORTAL"
}
+1 -3
View File
@@ -1,5 +1,3 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"__DUMMY__": null
@@ -23,6 +21,6 @@
}
}
}
, "refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
}
+8 -8
View File
@@ -1,13 +1,13 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"refdata": @inc=http://${CONFIG_SERVICE}/refdata/refdata
, "redis": @inc=http://${CONFIG_SERVICE}/apps/common/redis
"refdata": @inc=http://@env{CONFIG_SERVICE}/refdata/refdata
, "comm": @inc=http://@env{CONFIG_SERVICE}/apps/common/comm
, "cvttcomm": {
"type": "redis"
# , "redis_settings": "localhost"
, "redis_settings": "cvtt-prod"
}
, "comm_settings": "/comm/pubsub/redis/cvtt-prod"
# , "cvttcomm": {
# "type": "redis"
# # , "comm_settings": "/comm/pubsub/redis/localhost"
# , "comm_settings": "/comm/pubsub/redis/cvtt-prod"
# }
, "executor": {
"app_channel": "EXEC"
}
+4 -1
View File
@@ -3,5 +3,8 @@
{
"path": ".."
}
]
],
"settings": {
"workbench.colorTheme": "Tomorrow Night Blue"
}
}
+2 -1
View File
@@ -435,7 +435,8 @@
, "quantity_precision": "0.00001"
}
}
} , "OKX": {
}
, "OKX": {
"instruments": {
# --- PAIRs
"PAIR-BTC-USDT": {
+347 -261
View File
@@ -3,17 +3,104 @@
{
"__DUMMY__": {}
# ----------------------------- A
, "ALPACA_SNDBX": {
, "ALPACA_PROD": {
# https://docs.alpaca.markets/reference/
"exchange_id": "ALPACA"
, "name": "Alpaca Trading"
, "type": "EQUITY"
, "cred_key": "ALPACA_PROD"
, "order_entry": {
"class": "cvttpy.exchanges.alpaca.oe_client.AlpacaOrderEntryClient"
# D E P R E C A T E D
, "REST": {
"submit_order_url": ["POST", "https://api.alpaca.markets/v2/orders"]
, "orders_url": ["GET", "https://api.alpaca.markets/v2/orders"]
, "order_status": ["GET", "https://api.alpaca.markets/v2/orders/{order_id}"]
, "cancel_order_url": ["DELETE", "https://api.alpaca.markets/v2/orders/{order_id}"]
, "cancel_all_url": ["DELETE", "https://api.alpaca.markets/v2/orders"]
}
, "ws_url": ["WSS", "wss://api.alpaca.markets/stream"]
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://api.alpaca.markets/stream"
}
, "REST": {
"submit_order_url": ["POST", "https://api.alpaca.markets/v2/orders"]
, "orders_url": ["GET", "https://api.alpaca.markets/v2/orders"]
, "order_status": ["GET", "https://api.alpaca.markets/v2/orders/{order_id}"]
, "cancel_order_url": ["DELETE", "https://api.alpaca.markets/v2/orders/{order_id}"]
, "cancel_all_url": ["DELETE", "https://api.alpaca.markets/v2/orders"]
}
}
}
, "mktdata" : {
"class": "cvttpy.exchanges.alpaca.mkt_data.AlpacaStockFeed"
, "reconnect_secs": 2.0
# D E P R E C A T E D
, "ws_url": ["WSS", "wss://stream.data.alpaca.markets/v2/iex"]
, "REST": {
"hist_md_bars": ["GET", "https://data.alpaca.markets/v2/stocks/bars"]
, "hist_md_quotes": ["GET", "https://data.alpaca.markets/v2/stocks/quotes"]
, "hist_md_trades": ["GET", "https://data.alpaca.markets/v2/stocks/trades"]
, "latest_trade": ["GET", "https://data.alpaca.markets/v2/stocks/{symbol}/trades/latest"]
, "assets": ["GET", "https://api.alpaca.markets/v2/assets"]
# , "assets": ["GET", "https://data.alpaca.markets/v2/assets"]
}
# D E P R E C A T E D
, "api": {
"web_socket": {
# "wss://stream.data.alpaca.markets/v2/sip"
"url": "wss://stream.data.alpaca.markets/v2/iex"
}
, "REST": {
"hist_md_bars": ["GET", "https://data.alpaca.markets/v2/stocks/bars"]
, "hist_md_quotes": ["GET", "https://data.alpaca.markets/v2/stocks/quotes"]
, "hist_md_trades": ["GET", "https://data.alpaca.markets/v2/stocks/trades"]
, "latest_trade": ["GET", "https://data.alpaca.markets/v2/stocks/{symbol}/trades/latest"]
, "assets": ["GET", "https://api.alpaca.markets/v2/assets"]
# , "assets": ["GET", "https://data.alpaca.markets/v2/assets"]
}
}
}
, "accounting": {
"class": "cvttpy.exchanges.alpaca.acct_client.AlpacaAccounting"
# D E P R E C A T E D
, "REST": {
"balances_url": ["GET", "https://api.alpaca.markets/v2/positions"]
, "account_info_url": ["GET", "https://api.alpaca.markets/v2/account"]
, "trades_url": ["GET", "https://api.alpaca.markets/v2/account/activities/FILL"]
}
# D E P R E C A T E D
, "api": {
"REST": {
"balances_url": ["GET", "https://api.alpaca.markets/v2/positions"]
, "account_info_url": ["GET", "https://api.alpaca.markets/v2/account"]
, "trades_url": ["GET", "https://api.alpaca.markets/v2/account/activities/FILL"]
}
}
}
}
, "ALPACA_SNDBX": {
# 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"
# D E P R E C A T E D
, "REST": {
"submit_order_url": ["POST", "https://paper-api.alpaca.markets/v2/orders"]
, "orders_url": ["GET", "https://paper-api.alpaca.markets/v2/orders"]
@@ -22,11 +109,26 @@
, "cancel_all_url": ["DELETE", "https://paper-api.alpaca.markets/v2/orders"]
}
, "ws_url": ["WSS", "wss://paper-api.alpaca.markets/stream"]
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://paper-api.alpaca.markets/stream"
}
, "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"]
}
}
}
, "mktdata" : {
"class": "cvttpy.exchanges.alpaca.mkt_data.AlpacaStockFeed"
"class": "cvttpy.exchanges.alpaca.mkt_data.AlpacaMdFeed"
, "reconnect_secs": 2.0
# D E P R E C A T E D
# , "ws_url": ["WSS", "wss://stream.data.alpaca.markets/v2/sip"]
, "ws_url": ["WSS", "wss://stream.data.alpaca.markets/v2/iex"]
, "REST": {
@@ -37,120 +139,38 @@
, "assets": ["GET", "https://paper-api.alpaca.markets/v2/assets"]
# , "assets": ["GET", "https://data.alpaca.markets/v2/assets"]
}
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://stream.data.alpaca.markets/v2/iex"
}
, "REST": {
"hist_md_bars": ["GET", "https://data.alpaca.markets/v2/stocks/bars"]
, "hist_md_quotes": ["GET", "https://data.alpaca.markets/v2/stocks/quotes"]
, "hist_md_trades": ["GET", "https://data.alpaca.markets/v2/stocks/trades"]
, "latest_trade": ["GET", "https://data.alpaca.markets/v2/stocks/{symbol}/trades/latest"]
, "assets": ["GET", "https://paper-api.alpaca.markets/v2/assets"]
}
}
}
, "accounting": {
"class": "cvttpy.exchanges.alpaca.account.AlpacaAccounting"
"class": "cvttpy.exchanges.alpaca.acct_client.AlpacaAccounting"
# D E P R E C A T E D
, "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_SNDBX-MDPORTAL": {
# https://docs.alpaca.markets/reference/
"exchange_id": "ALPACA"
, "name": "Alpaca Trading"
, "type": "EQUITY"
# D E P R E C A T E D
, "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"]
, "api": {
"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"]
}
}
}
}
@@ -167,24 +187,14 @@
"class": "cvttpy.exchanges.bitstamp.mkt_data.BitstampMdFeed"
, "reconnect_secs": 2
# D E P R E C A T E D
, "ws_url": ["WSS", "wss://ws.bitstamp.net"]
}
}
, "BNBSPOT": {
"exchange_id": "BNBSPOT"
, "name": "Binance Spot"
, "type": "SPOT"
# D E P R E C A T E D
, "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"],
, "api": {
"web_socket": {
"url": "wss://ws.bitstamp.net"
}
}
}
}
@@ -194,41 +204,59 @@
, "type": "FUTURES"
, "mktdata" : {
"class": "cvttpy.exchanges.binance.futures.mkt_data.BnbFutMultiWsFeed"
"class": "cvttpy.exchanges.binance.futures.mkt_data.BnbFutMktDataFeed"
, "max_connections": 10
, "reconnect_secs": 2.0
# D E P R E C A T E D
, "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"],
}
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "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"],
}
}
}
}
, "BNBFUT-2": {
"exchange_id": "BNBFUT"
, "name": "Binance Futures USD-M"
, "type": "FUTURES"
, "BNBSPOT": {
"exchange_id": "BNBSPOT"
, "name": "Binance Spot"
, "type": "SPOT"
, "mktdata" : {
"class": "cvttpy.exchanges.binance.futures.mkt_data.BinanceFuturesFeedWs2"
"class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMktDataFeed"
, "max_connections": 10
, "reconnect_secs": 2.0
, "ws_timeout_secs": 0.0001
, "ws_url": ["WSS", "wss://fstream.binance.com/ws"]
}
}
, "BNBFUT-BT-FEED": {
"exchange_id": "BNBFUT"
, "name": "Binance Futures USD-M"
, "type": "FUTURES"
# D E P R E C A T E D
, "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"],
}
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "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"],
}
}
, "mktdata" : {
"class": "cvttpy.exchanges.book_top_feed.mkt_data.BookTopFeedClient"
, "mmap_file": "/tmp/BNBFUT.MD.dat"
}
}
, "BNBSPOT_US": {
@@ -237,15 +265,26 @@
, "type": "SPOT"
, "mktdata" : {
"class": "cvttpy.exchanges.binance.spot.mkt_data.BinanceSpotFeed"
"class": "cvttpy.exchanges.binance.spot.mkt_data.BnbSpotMktDataFeed"
, "reconnect_secs": 10
# D E P R E C A T E D
, "ws_url": ["WSS", "wss://stream.binance.us:9443/ws"]
, "REST": {
# https://api.binance.com/api/v3/depth?symbol=BNBBTC&limit=1000
"depth_snapshot_url": ["GET", "https://api.binance.com/api/v3/depth"],
}
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://stream.binance.us:9443/ws"
}
, "REST": {
# https://api.binance.com/api/v3/depth?symbol=BNBBTC&limit=1000
"depth_snapshot_url": ["GET", "https://api.binance.com/api/v3/depth"],
}
}
}
}
, "COINBASE_AT": {
@@ -256,94 +295,65 @@
, "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"]
# D E P R E C A T E D
# , "ws_url": ["WSS", "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"]
# }
# D E P R E C A T E D
, "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"]
}
}
, "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"]
# D E P R E C A T E D
# , "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"]
# }
# D E P R E C A T E D
, "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.exchanges.coinbase.spot.mkt_data.CoinbaseMultiWsFeed"
"class": "cvttpy.exchanges.coinbase.spot.mkt_data.CoinbaseMdFeed"
, "reconnect_secs": 2
, "max_connections": 10
, "price_throttle": true
, "ws_url": ["WSS", "wss://ws-feed.exchange.coinbase.com"]
}
}
, "COINBASE_AT-MDPORTAL": {
"exchange_id": "COINBASE"
, "name": "Coinbase Advanced Trade"
, "type": "SPOT"
# D E P R E C A T E D
# , "ws_url": ["WSS", "wss://ws-feed.exchange.coinbase.com"]
# D E P R E C A T E D
, "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"
}
}
, "COINBASE_SIM": {
"exchange_id": "COINBASE"
, "name": "Coinbase Advanced Trade (Simulation)"
, "type": "SPOT"
, "mktdata" : {
"class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
"ws_url": ["WS", "ws://localhost:8080/ws"]
}
, "order_entry": {
"class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
, "REST": {
"new_order_url": ["POST", "http://localhost:8181/order"]
, "cancel_order_url": ["POST", "http://localhost:8181/cancel"]
, "cancel_all_url": ["POST", "http://localhost:8181/cancel_all"]
, "open_orders_url": ["GET", "http://localhost:8181/open_orders"]
, "order_status_url": ["GET", "http://localhost:8181/order_status"]
},
"ws_url": ["WSS", "ws://localhost:8180/ws"]
}
, "accounting": {
"class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
, "REST": {
"positions_url": ["GET", "http://localhost:8182/positions"]
, "trades_url": ["GET", "http://localhost:8182/trades"]
, "api": {
"REST": {
"products_url": "https://api.exchange.coinbase.com/products"
},
"web_socket": {
"url": "wss://ws-feed.exchange.coinbase.com"
}
}
}
}
@@ -361,20 +371,18 @@
"class": "cvttpy.exchanges.gemini.mkt_data.GeminiMdFeed"
, "reconnect_secs": 1
# D E P R E C A T E D
, "ws_url": ["WSS" , "wss://api.gemini.com/v2/marketdata"]
}
# D E P R E C A T E D
# , "REST": {
# "open_orders_url": ["POST", "https://api.gemini.com/v1/orders"]
# , "order_status_url": ["POST", "https://api.gemini.com/v1/order/status"]
# , "cancel_all_url": ["POST", "https://api.gemini.com/v1/order/cancel/all"]
# , "balances_url": ["POST", "https://api.gemini.com/v1/balances"]
# , "positions_url": ["POST", "https://api.gemini.com/v1/positions"]
# , "trades_url": ["POST", "https://api.gemini.com/v1/mytrades"]
# , "symbol_url": ["GET", "https://api.gemini.com/v1/symbols/details"]
# , "margin_url": ["POST", "https://api.gemini.com/v1/margin"]
# }
, "api": {
"web_socket": {
"url": "wss://api.gemini.com/v2/marketdata"
}
}
}
}
, "GEMINI-SNDBX": {
# https://docs.gemini.com/rest-api
"exchange_id": "GEMINI"
@@ -388,18 +396,34 @@
"class": "cvttpy.exchanges.gemini.mkt_data.GeminiMdFeed"
, "reconnect_secs": 1
# D E P R E C A T E D
, "ws_url": ["WSS" , "wss://api.sandbox.gemini.com/v2/marketdata"]
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://api.sandbox.gemini.com/v2/marketdata"
}
}
}
, "order_entry": {
# D E P R E C A T E D
"REST": {
"order_status_url": ["POST", "https://api.sandbox.gemini.com/v1/order/status"]
, "cancel_all_url": ["POST", "https://api.sandbox.gemini.com/v1/order/cancel/all"]
}
# D E P R E C A T E D
, "api": {
"REST": {
"order_status_url": ["POST", "https://api.sandbox.gemini.com/v1/order/status"]
, "cancel_all_url": ["POST", "https://api.sandbox.gemini.com/v1/order/cancel/all"]
}
}
}
, "accounting": {
"class": "cvttpy.exchanges.gemini.account.GeminiExchAccounting"
# D E P R E C A T E D
, "REST": {
"open_orders_url": ["POST", "https://api.sandbox.gemini.com/v1/orders"]
, "order_status_url": ["POST", "https://api.sandbox.gemini.com/v1/order/status"]
@@ -409,6 +433,19 @@
, "symbol_url": ["GET", "https://api.sandbox.gemini.com/v1/symbols/details"]
, "margin_url": ["POST", "https://api.sandbox.gemini.com/v1/margin"]
}
# D E P R E C A T E D
, "api": {
"REST": {
"open_orders_url": ["POST", "https://api.sandbox.gemini.com/v1/orders"]
, "order_status_url": ["POST", "https://api.sandbox.gemini.com/v1/order/status"]
, "balances_url": ["POST", "https://api.sandbox.gemini.com/v1/balances"]
, "positions_url": ["POST", "https://api.sandbox.gemini.com/v1/positions"]
, "trades_url": ["POST", "https://api.sandbox.gemini.com/v1/mytrades"]
, "symbol_url": ["GET", "https://api.sandbox.gemini.com/v1/symbols/details"]
, "margin_url": ["POST", "https://api.sandbox.gemini.com/v1/margin"]
}
}
}
}
# ---------------------------- K
@@ -423,43 +460,19 @@
, "reconnect_secs": 2.0
# D E P R E C A T E D
, "ws_url": ["WSS", "wss://ws.kraken.com/v2"]
, "REST": {}
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://ws.kraken.com/v2"
}
, "REST": {}
}
}
}
# ---------------------------- 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"
, "redis_settings": "cvtt-prod-eqty-01"
, "channel_prefix": "MD_ALPACA_SNDBX"
}
}
, "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"
, "redis_settings": "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"]
# }
# }
# ---------------------------- O
, "OKX": {
"exchange_id": "OKX"
@@ -467,14 +480,87 @@
, "type": "SPOT"
, "mktdata" : {
"class": "cvttpy.exchanges.okx.mkt_data.OkxMultiWsFeed"
"class": "cvttpy.exchanges.okx.mkt_data.OkxMdFeed"
, "max_connections": 10
, "reconnect_secs": 2.0
# D E P R E C A T E D
, "ws_url": ["WSS", "wss://ws.okx.com:8443/ws/v5/public"]
, "REST": {}
# D E P R E C A T E D
, "api": {
"web_socket": {
"url": "wss://ws.okx.com:8443/ws/v5/public"
}
, "REST": {}
}
}
}
}
# , "ALPACA_SIM": {
# # https://docs.alpaca.markets/reference/
# "exchange_id": "ALPACA"
# , "name": "Alpaca Trading"
# , "type": "EQUITY"
# , "mktdata" : {
# "class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
# "ws_url": ["WS", "ws://localhost:10180/ws"]
# }
# , "order_entry": {
# "class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
# , "REST": {
# "new_order_url": ["POST", "http://localhost:10182/order"]
# , "cancel_order_url": ["POST", "http://localhost:10182/cancel"]
# , "cancel_all_url": ["POST", "http://localhost:10182/cancel_all"]
# , "open_orders_url": ["GET", "http://localhost:10182/open_orders"]
# , "order_status_url": ["GET", "http://localhost:10182/order_status"]
# },
# "ws_url": ["WSS", "ws://localhost:10181/ws"]
# }
# , "accounting": {
# "class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
# , "REST": {
# "positions_url": ["GET", "http://localhost:10083/positions"]
# , "trades_url": ["GET", "http://localhost:10083/trades"]
# }
# }
# }
# , "COINBASE_SIM": {
# "exchange_id": "COINBASE"
# , "name": "Coinbase Advanced Trade (Simulation)"
# , "type": "SPOT"
# , "mktdata" : {
# "class": "cvttpy.exchanges.mkt_simulator.md_client.MktSimMdClientFeed"
# "ws_url": ["WS", "ws://localhost:8080/ws"]
# }
# , "order_entry": {
# "class": "cvttpy.exchanges.mkt_simulator.oe_client.MarketSimulatorOEClient"
# , "REST": {
# "new_order_url": ["POST", "http://localhost:8181/order"]
# , "cancel_order_url": ["POST", "http://localhost:8181/cancel"]
# , "cancel_all_url": ["POST", "http://localhost:8181/cancel_all"]
# , "open_orders_url": ["GET", "http://localhost:8181/open_orders"]
# , "order_status_url": ["GET", "http://localhost:8181/order_status"]
# },
# "ws_url": ["WSS", "ws://localhost:8180/ws"]
# }
# , "accounting": {
# "class": "cvttpy.exchanges.mkt_simulator.acct_client.MktSimAccounting"
# , "REST": {
# "positions_url": ["GET", "http://localhost:8182/positions"]
# , "trades_url": ["GET", "http://localhost:8182/trades"]
# }
# }
# }
+4 -5
View File
@@ -1,8 +1,7 @@
@var CONFIG_SERVICE=cloud23.cvtt.vpn:6789
{
"assets": @inc=http://${CONFIG_SERVICE}/refdata/assets
, "instruments": @inc=http://${CONFIG_SERVICE}/refdata/instruments
, "exchanges": @inc=http://${CONFIG_SERVICE}/refdata/exchanges
, "exchange_instruments": @inc=http://${CONFIG_SERVICE}/refdata/exchange_instruments
"assets": @inc=http://@env{CONFIG_SERVICE}/refdata/assets
, "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
, "dynamic_instrument_exchanges": ["ALPACA"]
}
+13
View File
@@ -0,0 +1,13 @@
services:
config_service:
image: cloud21.cvtt.vpn:5500/config_service:latest
container_name: cvtt_config_service
user: 1001:1001
restart: always
#network_mode: host
volumes:
- /works/docker/config_service/data:/app/data
- /works/logs:/logs
ports:
- 6789:6789
-13
View File
@@ -1,13 +0,0 @@
version: "3.8"
#==================================================
services:
config_service:
image: cloud21.cvtt.vpn:5500/config_service:latest
container_name: cvtt_config_service
restart: unless-stopped
volumes:
- /home/cvtt/prod/config_service/data:/app/data
- /home/cvtt/prod/logs:/logs
ports:
- 6789:6789
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose down
docker compose up -d --pull=always
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose up -d --pull=always
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose down
-13
View File
@@ -1,13 +0,0 @@
version: "3.8"
#==================================================
services:
relative_liquidity:
image: cloud21.cvtt.vpn:5500/relative_liquidity:latest
container_name: relative_liquidity_svc
restart: unless-stopped
volumes:
- /home/cvtt/prod/data:/app/data
- /home/cvtt/prod/logs:/logs
ports:
- 5678:5678
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose down
docker compose up -d --pull=always
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose up -d --pull=always
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose down
-10
View File
@@ -1,10 +0,0 @@
version: "3.8"
#==================================================
services:
trading_calendar:
image: apptasticsoftware/trading-calendar
container_name: trading-calendar
restart: unless-stopped
ports:
- 8000:80
-5
View File
@@ -1,5 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose down
docker compose up -d --pull=always
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose up -d --pull=always
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
cd $(dirname ${0})
docker compose down