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_order_limit(self):
self.assertEqual(self.order_package.order_limit(OrderPackageType.PLACE), 200)
self.assertEqual(self.order_package.order_limit(OrderPackageType.CANCEL), 60)
self.assertEqual(self.order_package.order_limit(OrderPackageType.UPDATE), 60)
self.assertEqual(self.order_package.order_limit(OrderPackageType.REPLACE), 60)
def order_limit(cls, package_type: OrderPackageType) -> int:
if package_type == OrderPackageType.PLACE:
return order_limits["placeOrders"]
elif package_type == OrderPackageType.CANCEL:
return order_limits["cancelOrders"]
elif package_type == OrderPackageType.UPDATE:
return order_limits["updateOrders"]
elif package_type == OrderPackageType.REPLACE:
return order_limits["replaceOrders"]
def handler(self, order_package: BaseOrderPackage) -> None:
""" Only uses _thread_pool if paper_trade
"""
if order_package.package_type == OrderPackageType.PLACE:
func = self.execute_place
elif order_package.package_type == OrderPackageType.CANCEL:
func = self.execute_cancel
elif order_package.package_type == OrderPackageType.UPDATE:
func = self.execute_update
elif order_package.package_type == OrderPackageType.REPLACE:
func = self.execute_replace
else:
raise NotImplementedError()
if order_package.client.paper_trade:
self._thread_pool.submit(func, order_package, None)
else:
func(order_package, http_session=None)
def handler(self, order_package: BaseOrderPackage):
""" Handles order_package, capable of place, cancel,
replace and update.
"""
http_session = self._get_http_session()
if order_package.package_type == OrderPackageType.PLACE:
func = self.execute_place
elif order_package.package_type == OrderPackageType.CANCEL:
func = self.execute_cancel
elif order_package.package_type == OrderPackageType.UPDATE:
func = self.execute_update
elif order_package.package_type == OrderPackageType.REPLACE:
func = self.execute_replace
else:
raise NotImplementedError()
self._thread_pool.submit(func, order_package, http_session)
def execute_place(
self, order_package: BaseOrderPackage, http_session: requests.Session
) -> None:
response = self._execution_helper(self.place, order_package, http_session)
if response:
for (order, instruction_report) in zip(
order_package, response.place_instruction_reports
):
with order.trade:
self._order_logger(
order, instruction_report, OrderPackageType.PLACE
)
if instruction_report.status == "SUCCESS":
order.executable()
elif instruction_report.status == "FAILURE":
order.lapsed() # todo correct?
elif instruction_report.status == "TIMEOUT":
# https://docs.developer.betfair.com/display/1smk3cen4v3lu3yomq5qye0ni/Betting+Enums#BettingEnums-ExecutionReportStatus
pass
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
def _validate(self, order_package) -> None:
self._check_hour()
self.total += 1
if order_package.package_type == OrderPackageType.PLACE:
self._check_transaction_count(len(order_package))
self.place_requests += len(order_package)
if not self.safe: # and order.flumine_order_type == "initial"
for order in order_package:
self._on_error(
order,
"Max Order Count has been reached ({0}) for current hour".format(
self.transaction_count
),
)
elif order_package.package_type == OrderPackageType.CANCEL:
self.cancel_requests += len(order_package)
elif order_package.package_type == OrderPackageType.UPDATE:
self.update_requests += len(order_package)
elif order_package.package_type == OrderPackageType.REPLACE:
self.replace_requests += len(order_package)
def process_orders(self, client) -> list:
packages = []
if self.pending_place:
packages += self._create_packages(
client, self.pending_place, OrderPackageType.PLACE
)
if self.pending_cancel:
packages += self._create_packages(
client, self.pending_cancel, OrderPackageType.CANCEL
)
if self.pending_update:
packages += self._create_packages(
client, self.pending_update, OrderPackageType.UPDATE
)
if self.pending_replace:
packages += self._create_packages(
client, self.pending_replace, OrderPackageType.REPLACE
)
if packages:
logger.info(
"%s order packages created" % len(packages),