| import pytest | |
| from src.models.bayesian import BayesianFairValue | |
| def test_bayesian_fair_value_initialization(): | |
| model = BayesianFairValue(prior_prob=0.5, prior_confidence=10.0) | |
| assert model.get_fair_value() == 0.5 | |
| assert model.alpha == 5.0 | |
| assert model.beta == 5.0 | |
| def test_bayesian_update(): | |
| model = BayesianFairValue(prior_prob=0.5, prior_confidence=10.0) | |
| # We observe a lot of volume trading at 0.70 implied probability | |
| model.update(market_implied_prob=0.70, trade_volume=100.0, noise_factor=0.1) | |
| # FV should shift towards 0.70 | |
| fv = model.get_fair_value() | |
| assert fv > 0.5 | |
| assert fv < 0.70 | |
| def test_evaluate_opportunity(): | |
| model = BayesianFairValue(prior_prob=0.6, prior_confidence=100.0) # Highly confident at 0.6 | |
| # Market asks are way below FV (Underpriced) | |
| opp_buy = model.evaluate_opportunity(current_ask=0.40, current_bid=0.38) | |
| assert opp_buy is not None | |
| assert opp_buy["action"] == "BUY_YES" | |
| assert opp_buy["edge"] > 0.15 # 0.60 - 0.40 = 0.20ish edge | |
| # Market bids are way above FV (Overpriced) | |
| opp_sell = model.evaluate_opportunity(current_ask=0.82, current_bid=0.80) | |
| assert opp_sell is not None | |
| assert opp_sell["action"] == "SELL_YES" | |
| assert opp_sell["edge"] > 0.15 # 0.80 - 0.60 = 0.20ish edge | |