Esempio n. 1
0
    def test__process_runner_removal_sp_place_inplay(self):
        order_type = MarketOnCloseOrder(liability=200)
        mock_order = mock.Mock(
            selection_id=1234,
            handicap=0,
            order_type=order_type,
            info={},
            side="LAY",
            current_order=mock.Mock(size_matched=0),
            average_price_matched=10.0,
        )

        mock_market_book = mock.Mock()
        mock_market_book.runners = [
            mock.Mock(selection_id=1234, handicap=0, adjustment_factor=20)
        ]
        mock_market = mock.Mock(market_type="PLACE",
                                blotter=[mock_order],
                                market_book=mock_market_book)
        self.middleware._process_runner_removal(mock_market, 12345, 0, 50)

        # The liability of £200 is reduced by the non runner's adjustment factor of 50%
        self.assertEqual(mock_order.order_type.liability, 100)
        # Size matched should be 100 / (10.0-1.0) \approx 11.11
        self.assertEqual(11.11, mock_order.current_order.size_matched)
Esempio n. 2
0
    def test__process_runner_removal_sp_win_inplay(self):
        order_type = MarketOnCloseOrder(liability=200)
        mock_order = mock.Mock(
            selection_id=1234,
            handicap=0,
            order_type=order_type,
            info={},
            side="LAY",
            current_order=mock.Mock(size_matched=0),
            average_price_matched=10,
        )

        mock_market_book = mock.Mock()
        mock_market_book.runners = [
            mock.Mock(selection_id=1234, handicap=0, adjustment_factor=20)
        ]
        mock_market = mock.Mock(market_type="WIN",
                                blotter=[mock_order],
                                market_book=mock_market_book)
        self.middleware._process_runner_removal(mock_market, 12345, 0, 50)

        # The liability of £200 is adjusted by the multiplier of 37.5%, which s
        # defined in the example here: https://github.com/betcode-org/flumine/issues/454
        self.assertEqual(mock_order.order_type.liability, 75)
        # Size matched should be 75 / (10.0-1.0) \approx 8.33
        self.assertEqual(8.33, mock_order.current_order.size_matched)
Esempio n. 3
0
 def test_selection_exposure_from_market_on_close_lay(self):
     mock_strategy = mock.Mock()
     mock_trade = mock.Mock(strategy=mock_strategy)
     mock_order = mock.Mock(
         trade=mock_trade,
         lookup=(self.blotter.market_id, 123, 0),
         side="LAY",
         order_type=MarketOnCloseOrder(liability=10.0),
     )
     self.blotter["12345"] = mock_order
     self.assertEqual(
         self.blotter.selection_exposure(mock_strategy, mock_order.lookup),
         10.0,
     )
Esempio n. 4
0
 def process_market_book(self, market, market_book):
     for runner in market_book.runners:
         runner_context = self.get_runner_context(
             market.market_id, runner.selection_id
         )
         if runner_context.trade_count == 0:
             trade = Trade(
                 market_book.market_id,
                 runner.selection_id,
                 runner.handicap,
                 self,
             )
             order = trade.create_order(
                 side="LAY", order_type=MarketOnCloseOrder(100.00),
             )
             self.place_order(market, order)
Esempio n. 5
0
class MarketOnCloseOrderTest(unittest.TestCase):
    def setUp(self) -> None:
        self.order_type = MarketOnCloseOrder(128)

    def test_init(self):
        self.assertEqual(self.order_type.EXCHANGE, ExchangeType.BETFAIR)
        self.assertEqual(self.order_type.ORDER_TYPE,
                         OrderTypes.MARKET_ON_CLOSE)
        self.assertEqual(self.order_type.liability, 128)

    def test_place_instruction(self):
        self.assertEqual(self.order_type.place_instruction(),
                         {"liability": 128})

    def test_info(self):
        self.assertEqual(self.order_type.info, {
            "liability": 128,
            "order_type": "Market on close"
        })
Esempio n. 6
0
 def test_get_exposures_from_market_on_close_lay(self):
     mock_strategy = mock.Mock()
     mock_trade = mock.Mock(strategy=mock_strategy)
     mock_order = mock.Mock(
         trade=mock_trade,
         lookup=(self.blotter.market_id, 123, 0),
         side="LAY",
         order_type=MarketOnCloseOrder(liability=10.0),
     )
     self.blotter["12345"] = mock_order
     self.assertEqual(
         self.blotter.get_exposures(mock_strategy, mock_order.lookup),
         {
             "matched_profit_if_lose": 0.0,
             "matched_profit_if_win": 0.0,
             "worst_possible_profit_on_lose": 0.0,
             "worst_possible_profit_on_win": -10.0,
             "worst_potential_unmatched_profit_if_lose": 0.0,
             "worst_potential_unmatched_profit_if_win": 0.0,
         },
     )
Esempio n. 7
0
 def setUp(self) -> None:
     self.order_type = MarketOnCloseOrder(128)