Implement Kraken integration with REST and WebSocket clients, add market data handling, and enhance settings configuration
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user