def mock_http_calls(requests_mock): ig_request_login(requests_mock) ig_request_set_account(requests_mock) ig_request_account_details(requests_mock) ig_request_open_positions(requests_mock) ig_request_market_info(requests_mock) ig_request_search_market(requests_mock) ig_request_prices(requests_mock) ig_request_trade(requests_mock) ig_request_confirm_trade(requests_mock) ig_request_navigate_market(requests_mock) ig_request_navigate_market(requests_mock, args="668394", data="mock_navigate_markets_markets.json") ig_request_navigate_market(requests_mock, args="77976799", data="mock_navigate_markets_markets.json") ig_request_navigate_market(requests_mock, args="89291253", data="mock_navigate_markets_markets.json") ig_request_watchlist(requests_mock) ig_request_watchlist(requests_mock, args="12345678", data="mock_watchlist.json") av_request_prices(requests_mock) av_request_macd_ext(requests_mock)
def test_find_trade_signal(config, credentials, requests_mock): ig_request_login(requests_mock) ig_request_set_account(requests_mock) ig_request_market_info(requests_mock) ig_request_prices(requests_mock) ig_request_trade(requests_mock) ig_request_confirm_trade(requests_mock) services = { "ig_index": IGInterface(config, credentials), "alpha_vantage": AVInterface(credentials["av_api_key"], config), } broker = Broker(config, services) broker.use_av_api = False strategy = WeightedAvgPeak(config, broker) # Need to use a mock enum as the requests_mock expect "mock" as interval prices = broker.get_prices("mock", "mock", Mock_Interval.MOCK, "mock") market = create_mock_market(broker) tradeDir, limit, stop = strategy.find_trade_signal(market, prices) assert tradeDir is not None assert limit is None assert stop is None assert tradeDir == TradeDirection.NONE
def test_get_prices(ig, requests_mock): ig_request_market_info(requests_mock) ig_request_prices(requests_mock) p = ig.get_prices(ig.get_market_info("mock"), Interval.HOUR, 10) assert p is not None assert isinstance(p, MarketHistory) assert len(p.dataframe) > 0
def requests(requests_mock): ig_request_login(requests_mock) ig_request_set_account(requests_mock) ig_request_market_info(requests_mock) ig_request_search_market(requests_mock) ig_request_watchlist(requests_mock, data="mock_watchlist_list.json") ig_request_watchlist(requests_mock, args="12345678", data="mock_watchlist.json")
def test_get_market_info(ig, requests_mock): ig_request_market_info(requests_mock) info = ig.get_market_info("mock") assert info is not None assert "instrument" in info assert "snapshot" in info assert "dealingRules" in info
def broker(requests_mock, config): ig_request_login(requests_mock) ig_request_set_account(requests_mock) ig_request_market_info(requests_mock) ig_request_search_market(requests_mock) ig_request_watchlist(requests_mock, data="mock_watchlist_list.json") ig_request_watchlist(requests_mock, args="12345678", data="mock_watchlist.json") return Broker(BrokerFactory(config))
def test_search_market(ig, requests_mock): ig_request_market_info(requests_mock) ig_request_search_market(requests_mock) markets = ig.search_market("mock") assert markets is not None assert isinstance(markets, list) assert len(markets) == 8 assert isinstance(markets[0], Market)
def create_mock_market(broker, requests_mock): ig_request_market_info(requests_mock) data = broker.get_market_info("mock") market = Market() market.epic = data["epic"] market.id = data["market_id"] market.name = data["name"] market.bid = data["bid"] market.offer = data["offer"] market.high = data["high"] market.low = data["low"] market.stop_distance_min = data["stop_distance_min"] return market
def test_find_trade_signal(config, broker, requests_mock): ig_request_login(requests_mock) ig_request_set_account(requests_mock) ig_request_prices(requests_mock) ig_request_trade(requests_mock) ig_request_confirm_trade(requests_mock) ig_request_market_info(requests_mock) strategy = WeightedAvgPeak(config, broker) # Need to use a mock enum as the requests_mock expect "mock" as interval market = broker.get_market_info("mock") prices = strategy.fetch_datapoints(market) tradeDir, limit, stop = strategy.find_trade_signal(market, prices) assert tradeDir is not None assert limit is None assert stop is None assert tradeDir == TradeDirection.NONE
def test_get_watchlist_markets(ig, requests_mock): ig_request_market_info(requests_mock) ig_request_watchlist(requests_mock, data="mock_watchlist_list.json") ig_request_watchlist(requests_mock, args="12345678", data="mock_watchlist.json") data = ig.get_markets_from_watchlist("My Watchlist") assert isinstance(data, list) assert len(data) == 3 assert isinstance(data[0], Market) data = ig.get_markets_from_watchlist("wrong_name") assert len(data) == 0 ig_request_watchlist(requests_mock, args="12345678", data="mock_watchlist.json", fail=True) data = ig.get_markets_from_watchlist("wrong_name") assert len(data) == 0
def test_get_prices_fail(ig, requests_mock): ig_request_market_info(requests_mock) ig_request_prices(requests_mock, fail=True) with pytest.raises(RuntimeError) as e: p = ig.get_prices(ig.get_market_info("mock"), Interval.HOUR, 10)
def test_get_market_info_fail(ig, requests_mock): ig_request_market_info(requests_mock, fail=True) with pytest.raises(RuntimeError) as e: info = ig.get_market_info("mock")
def test_get_market_info(ig, requests_mock): ig_request_market_info(requests_mock) info = ig.get_market_info("mock") assert info is not None assert isinstance(info, Market)
def test_get_market_info_fail(ig, requests_mock): ig_request_market_info(requests_mock, fail=True) info = ig.get_market_info("mock") assert info is None