Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
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)
actual_sp = runner.sp.actual_sp
if actual_sp:
self._bsp_reconciled = True
_order_type = self.order.order_type
if _order_type.ORDER_TYPE == OrderTypes.LIMIT:
size = self.size_remaining
elif _order_type.ORDER_TYPE == OrderTypes.LIMIT_ON_CLOSE:
if self.side == "BACK":
if actual_sp < _order_type.price:
return
size = _order_type.liability
else:
if actual_sp > _order_type.price:
return
size = round(_order_type.liability / (actual_sp - 1), 2)
elif _order_type.ORDER_TYPE == OrderTypes.MARKET_ON_CLOSE:
if self.side == "BACK":
size = _order_type.liability
else:
size = round(_order_type.liability / (actual_sp - 1), 2)
else:
raise NotImplementedError()
self._update_matched((publish_time, actual_sp, size))
def test_cancel_else(self):
self.simulated.order.order_type.ORDER_TYPE = OrderTypes.MARKET_ON_CLOSE
resp = self.simulated.cancel()
self.assertEqual(resp.status, "FAILURE")
self.assertEqual(resp.error_code, "BET_ACTION_ERROR")
def _validate(self, order_package):
if order_package.package_type in (
OrderPackageType.PLACE,
OrderPackageType.REPLACE, # todo potential bug?
):
for order in order_package:
strategy = order.trade.strategy
if order.order_type.ORDER_TYPE == OrderTypes.LIMIT:
if order.side == "BACK":
exposure = order.order_type.size
else:
exposure = (order.order_type.price - 1) * order.order_type.size
elif order.order_type.ORDER_TYPE == OrderTypes.LIMIT_ON_CLOSE:
exposure = order.order_type.liability # todo correct?
elif order.order_type.ORDER_TYPE == OrderTypes.MARKET_ON_CLOSE:
exposure = order.order_type.liability
else:
continue
# per order
if exposure > strategy.max_order_exposure:
self._on_error(
order,
"Order exposure ({0}) is greater than strategy.max_order_strategy ({1})".format(
exposure, strategy.max_order_exposure
),
)
continue
# per selection
market = self.flumine.markets.markets[order_package.market_id]
def place_instruction(self) -> dict:
return limit_on_close_order(liability=self.liability, price=self.price)
@property
def info(self):
return {
"order_type": self.ORDER_TYPE.value,
"liability": self.liability,
"price": self.price,
}
class MarketOnCloseOrder(BaseOrderType):
EXCHANGE = ExchangeType.BETFAIR
ORDER_TYPE = OrderTypes.MARKET_ON_CLOSE
def __init__(self, liability: float):
self.liability = liability
def place_instruction(self) -> dict:
return market_on_close_order(liability=self.liability)
@property
def info(self):
return {
"order_type": self.ORDER_TYPE.value,
"liability": self.liability,
}
selection_id=self.selection_id,
side=self.side,
order_type=self.order_type.ORDER_TYPE.name,
limit_order=self.order_type.place_instruction(),
handicap=self.handicap,
)
elif self.order_type.ORDER_TYPE == OrderTypes.LIMIT_ON_CLOSE:
return filters.place_instruction(
customer_order_ref=self.customer_order_ref,
selection_id=self.selection_id,
side=self.side,
order_type=self.order_type.ORDER_TYPE.name,
limit_on_close_order=self.order_type.place_instruction(),
handicap=self.handicap,
)
elif self.order_type.ORDER_TYPE == OrderTypes.MARKET_ON_CLOSE:
return filters.place_instruction(
customer_order_ref=self.customer_order_ref,
selection_id=self.selection_id,
side=self.side,
order_type=self.order_type.ORDER_TYPE.name,
market_on_close_order=self.order_type.place_instruction(),
handicap=self.handicap,
)
def _validate_betfair_order(self, order):
if order.order_type.ORDER_TYPE == OrderTypes.LIMIT:
self._validate_betfair_size(order)
self._validate_betfair_price(order)
self._validate_betfair_min_size(order, OrderTypes.LIMIT)
elif order.order_type.ORDER_TYPE == OrderTypes.LIMIT_ON_CLOSE:
self._validate_betfair_price(order)
self._validate_betfair_liability(order)
self._validate_betfair_min_size(order, OrderTypes.LIMIT_ON_CLOSE)
elif order.order_type.ORDER_TYPE == OrderTypes.MARKET_ON_CLOSE:
self._validate_betfair_liability(order)
self._validate_betfair_min_size(order, OrderTypes.MARKET_ON_CLOSE)
else:
self._on_error(order, "Unknown orderType")
def _validate_betfair_order(self, order):
if order.order_type.ORDER_TYPE == OrderTypes.LIMIT:
self._validate_betfair_size(order)
self._validate_betfair_price(order)
self._validate_betfair_min_size(order, OrderTypes.LIMIT)
elif order.order_type.ORDER_TYPE == OrderTypes.LIMIT_ON_CLOSE:
self._validate_betfair_price(order)
self._validate_betfair_liability(order)
self._validate_betfair_min_size(order, OrderTypes.LIMIT_ON_CLOSE)
elif order.order_type.ORDER_TYPE == OrderTypes.MARKET_ON_CLOSE:
self._validate_betfair_liability(order)
self._validate_betfair_min_size(order, OrderTypes.MARKET_ON_CLOSE)
else:
self._on_error(order, "Unknown orderType")