import pytest from src.strategies.arbitrage import CrossPlatformArbitrage, IntraMarketArbitrage def test_cross_platform_arbitrage_profitable(): scanner = CrossPlatformArbitrage(min_profit_threshold=0.01) # State where Arb exists (Polymarket cheaper than Kalshi) scanner.update_state('polymarket', '0x217...', bid=0.50, bid_size=1000, ask=0.52, ask_size=1000) scanner.update_state('kalshi', 'KXUS2024', bid=0.55, bid_size=1500, ask=0.57, ask_size=500) opps = scanner.scan_opportunities() assert len(opps) == 1 opp = opps[0] assert opp.buy_platform == 'polymarket' assert opp.sell_platform == 'kalshi' assert opp.buy_price == 0.52 assert opp.sell_price == 0.55 assert opp.buy_size == 1000 # min of 1000 and 1500 assert opp.expected_profit_margin > 0.01 # Expect profit > min threshold def test_cross_platform_arbitrage_no_opportunity(): scanner = CrossPlatformArbitrage(min_profit_threshold=0.01) # Efficient market state scanner.update_state('polymarket', '0x217...', bid=0.53, bid_size=1000, ask=0.54, ask_size=1000) scanner.update_state('kalshi', 'KXUS2024', bid=0.53, bid_size=1500, ask=0.54, ask_size=500) opps = scanner.scan_opportunities() assert len(opps) == 0 def test_intra_market_arbitrage(): scanner = IntraMarketArbitrage(min_profit_threshold=0.01) # Parity violation: P(Yes) + P(No) = 0.45 + 0.45 = 0.90 < 1.0 (Margin = 0.10) margin = scanner.check_parity_violation(ask_yes=0.45, ask_no=0.45) assert margin is not None assert round(margin, 2) == 0.10 # Efficient market: P(Yes) + P(No) = 0.52 + 0.52 = 1.04 > 1.0 (No Arb) margin_eff = scanner.check_parity_violation(ask_yes=0.52, ask_no=0.52) assert margin_eff is None