Esempio n. 1
0
 def test_get_size(self):
     self.assertEqual(
         utils.get_size([{
             "price": 12,
             "size": 12
         }, {
             "price": 34,
             "size": 34
         }], 0),
         12,
     )
     self.assertEqual(
         utils.get_size([{
             "price": 12,
             "size": 12
         }, {
             "price": 34,
             "size": 34
         }], 1),
         34,
     )
     self.assertIsNone(
         utils.get_size([{
             "price": 12,
             "size": 12
         }, {
             "price": 34,
             "size": 34
         }], 3))
     self.assertIsNone(utils.get_size([], 3))
Esempio n. 2
0
 def process_market_book(self, market, market_book):
     seconds_since_start = (market_book.publish_time_epoch -
                            market.context["start_time"]) / 1e3
     # get price dict from market context
     if "price" not in market.context:
         market.context["price"] = defaultdict(list)
     price_dict = market.context["price"]
     for runner in market_book.runners:
         # store latest prices/sizes
         back_price = get_price(runner.ex.available_to_back, 0)
         back_size = get_size(runner.ex.available_to_back, 0)
         if back_price:
             price_dict[runner.selection_id].append(
                 (market_book.publish_time_epoch, back_price, back_size))
         # check trigger
         if trigger(price_dict[runner.selection_id]):
             runner_context = self.get_runner_context(
                 market.market_id, runner.selection_id, runner.handicap)
             if runner_context.live_trade_count == 0:
                 # back at current best back price
                 back = get_price(runner.ex.available_to_back, 0)
                 if back is None:
                     continue
                 # create trade
                 trade = Trade(
                     market_book.market_id,
                     runner.selection_id,
                     runner.handicap,
                     self,
                 )
                 # create order
                 order = trade.create_order(
                     side="BACK",
                     order_type=LimitOrder(back, self.context["stake"]),
                     notes=OrderedDict(
                         seconds_since_start=round(seconds_since_start, 2),
                         back_size=back_size,
                     ),
                 )
                 # place order for execution
                 market.place_order(order)