Implement Kraken integration with REST and WebSocket clients, add market data handling, and enhance settings configuration

This commit is contained in:
2026-06-01 10:30:58 +02:00
parent 6211575db7
commit 7d3071463e
20 changed files with 977 additions and 1 deletions
+48
View File
@@ -0,0 +1,48 @@
from arbitrade.detection.graph import CurrencyGraph
def test_currency_graph_from_kraken_pairs_builds_adjacency() -> None:
asset_pairs = {
"XXBTZUSD": {"wsname": "BTC/USD"},
"XETHXXBT": {"wsname": "ETH/BTC"},
"XETHZUSD": {"wsname": "ETH/USD"},
}
graph = CurrencyGraph.from_kraken_asset_pairs(asset_pairs)
assert "USD" in graph.adjacency
assert "BTC" in graph.adjacency["USD"]
assert "ETH" in graph.adjacency["USD"]
def test_triangular_cycles_detected_once() -> None:
asset_pairs = {
"XXBTZUSD": {"wsname": "BTC/USD"},
"XETHXXBT": {"wsname": "ETH/BTC"},
"XETHZUSD": {"wsname": "ETH/USD"},
}
graph = CurrencyGraph.from_kraken_asset_pairs(asset_pairs)
cycles = graph.triangular_cycles()
assert len(cycles) == 1
cycle = cycles[0]
assert cycle.currencies == ("BTC", "ETH", "USD")
assert set(cycle.pairs) == {"BTC/USD", "ETH/BTC", "ETH/USD"}
def test_cycles_indexed_by_pair() -> None:
asset_pairs = {
"XXBTZUSD": {"wsname": "BTC/USD"},
"XETHXXBT": {"wsname": "ETH/BTC"},
"XETHZUSD": {"wsname": "ETH/USD"},
}
graph = CurrencyGraph.from_kraken_asset_pairs(asset_pairs)
cycles = graph.triangular_cycles()
index = graph.index_cycles_by_pair(cycles)
assert "BTC/USD" in index
assert "ETH/BTC" in index
assert "ETH/USD" in index
assert len(index["BTC/USD"]) == 1