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))
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)