diff --git a/betfairutil/__init__.py b/betfairutil/__init__.py index ce0a1c6..d5a35e6 100644 --- a/betfairutil/__init__.py +++ b/betfairutil/__init__.py @@ -1827,6 +1827,15 @@ def get_best_price_size( return next(iter(runner.get("ex", {}).get(side.ex_key, [])), None) +def get_mid_price( + runner: Union[Dict[str, Any], RunnerBook] +) -> Optional[Union[int, float]]: + best_back = get_best_price(runner, Side.BACK) + best_lay = get_best_price(runner, Side.LAY) + if best_back is not None and best_lay is not None: + return (best_back + best_lay) / 2 + + def get_best_price( runner: Union[Dict[str, Any], RunnerBook], side: Side ) -> Optional[Union[int, float]]: diff --git a/tests/test_non_prices.py b/tests/test_non_prices.py index 690b7af..77e48ad 100644 --- a/tests/test_non_prices.py +++ b/tests/test_non_prices.py @@ -39,6 +39,7 @@ from betfairutil import get_market_books_from_prices_file from betfairutil import get_market_id_from_string from betfairutil import get_market_time_as_datetime +from betfairutil import get_mid_price from betfairutil import get_minimum_book_percentage_market_books_from_prices_file from betfairutil import get_number_of_jumps_remaining from betfairutil import get_pre_event_volume_traded_from_prices_file @@ -1232,3 +1233,11 @@ def test_get_number_of_jumps_remaining(race_change: Dict[str, Any]): race_change["rpc"]["J"] = [{"L": 1000}] number_of_jumps_remaining = get_number_of_jumps_remaining(race_change) assert number_of_jumps_remaining == 1 + + +def test_get_mid_price(market_book: Dict[str, Any]): + runner_book = get_runner_book_from_market_book(market_book, selection_id=123) + assert get_mid_price(runner_book) is None + + runner_book["ex"]["availableToLay"].append({"price": 1.99, "size": 1}) + assert get_mid_price(runner_book) == pytest.approx(1.985)