def replace_orders(self, request): logging.info('replace_orders %s' % request) now = datetime.datetime.now() replaceOrders = [] marketId = request['params']['marketId'] status = self.market_data[marketId]['status'] if status != 'OPEN': synResponse = {"jsonrpc": "2.0", "result": {'status': 'FAILURE', 'reason': 'MARKET_SUSPENDED'}, "id": 1} return synResponse for replaceInstructions in request['params']['instructions']: betId = replaceInstructions['betId'] newPrice = replaceInstructions['newPrice'] if marketId in self.order_holder and betId in self.order_holder[marketId]: size = self.order_holder[marketId][betId]['size'] sizeMatchedOld = self.order_holder[marketId][betId]['sizeMatched'] sizeRemaining = self.order_holder[marketId][betId]['sizeRemaining'] sizeCancelled = self.order_holder[marketId][betId]['sizeCancelled'] selectionId = self.order_holder[marketId][betId]['selectionId'] side = self.order_holder[marketId][betId]['side'] persistenceType = self.order_holder[marketId][betId]['persistenceType'] orderType = self.order_holder[marketId][betId]['orderType'] statusFlag = self.order_holder[marketId][betId]['statusFlag'] if statusFlag == 'PENDING': self.order_holder[marketId][betId]['sizeCancelled'] = sizeRemaining self.order_holder[marketId][betId]['sizeRemaining'] = 0.0 self.order_holder[marketId][betId]['statusFlag'] = 'MATCHED' self.order_holder[marketId][betId]['onTop'] = 0.0 self.transaction_bet_id = str(int(self.transaction_bet_id) + 1) newBetId = self.transaction_bet_id self.order_holder[marketId][newBetId] = orderPlaceHolder.copy() self.order_holder[marketId][newBetId]['selectionId'] = selectionId self.order_holder[marketId][newBetId]['price'] = float(newPrice) self.order_holder[marketId][newBetId]['size'] = float(sizeRemaining) self.order_holder[marketId][newBetId]['side'] = side self.order_holder[marketId][newBetId]['sizeRemaining'] = float(sizeRemaining) self.order_holder[marketId][newBetId]['persistenceType'] = persistenceType self.order_holder[marketId][newBetId]['orderType'] = orderType self.order_holder[marketId][newBetId]['placedDate'] = now self.order_holder[marketId][newBetId]['dateCreated'] = now self.order_holder[marketId][newBetId]['dateUpdated'] = now self.initial_match(marketId) averagePriceMatched = self.order_holder[marketId][newBetId]['averagePriceMatched'] sizeMatched = self.order_holder[marketId][newBetId]['sizeMatched'] t = {"status": "SUCCESS", "cancelInstructionReport": {"status": "SUCCESS", "instruction": {"betId": betId}, "sizeCancelled": round(sizeRemaining, 2)}, "placeInstructionReport": {"status": "SUCCESS", "instruction": {"selectionId": selectionId, "limitOrder": {"size": round(sizeRemaining, 2), "price": newPrice, "persistenceType": "LAPSE"}, "orderType": "LIMIT", "side": side}, "betId": newBetId, "placedDate": str(now), "averagePriceMatched": averagePriceMatched, "sizeMatched": round(sizeMatched, 2)}} if sizeMatchedOld == 0.0: del self.order_holder[marketId][betId] else: t = {'status': 'FAILURE', 'reason': 'BET_TAKEN_OR_LAPSED'} else: t = {'status': 'FAILURE', 'reason': 'INVALID_BET_ID'} replaceOrders.append(t) synResponse = {'result': {'marketId': marketId, 'instructionReports': replaceOrders, 'status': 'SUCCESS'}, 'jsonrpc': '2.0', 'id': 1} logging.info('replace_orders %s' % synResponse) return synResponse
def place_orders(self, request): logging.info('placeOrders Req %s %s' % (self.prices.virtual_countdown, request)) synResponse = [] betIds = [] marketId = request['params']['marketId'] status = self.market_data[marketId]['status'] if status != 'OPEN': synResponse = {"jsonrpc": "2.0", "result": {'status': 'FAILURE', 'reason': 'MARKET_SUSPENDED'}, "id": 1} return synResponse now = datetime.datetime.now() try: self.order_holder[marketId] except KeyError: self.order_holder[marketId] = {} for order in request['params']['instructions']: try: self.order_holder[marketId] except KeyError: self.order_holder[marketId] = {} self.transaction_bet_id = str(int(self.transaction_bet_id) + 1) betId = self.transaction_bet_id self.order_holder[marketId][betId] = orderPlaceHolder.copy() self.order_holder[marketId][betId]['selectionId'] = order['selectionId'] self.order_holder[marketId][betId]['price'] = float(order['limitOrder']['price']) self.order_holder[marketId][betId]['size'] = float(order['limitOrder']['size']) self.order_holder[marketId][betId]['side'] = order['side'] self.order_holder[marketId][betId]['sizeRemaining'] = float(order['limitOrder']['size']) self.order_holder[marketId][betId]['persistenceType'] = order['limitOrder']['persistenceType'] self.order_holder[marketId][betId]['orderType'] = order['orderType'] self.order_holder[marketId][betId]['placedDate'] = now self.order_holder[marketId][betId]['dateCreated'] = now self.order_holder[marketId][betId]['statusFlag'] = 'INITIAL' self.order_holder[marketId][betId]['dateUpdated'] = now betIds.append(betId) # todo, check: market, selection, price, side, persistanceType, orderType self.initial_match(marketId) # calculate onTop for betId in betIds: # createResponse re = {"status": "SUCCESS", "instruction": {"selectionId": int(self.order_holder[marketId][betId]['selectionId']), "handicap": 0.0, "limitOrder": {"size": self.order_holder[marketId][betId]['size'], "price": self.order_holder[marketId][betId]['price'], "persistenceType": self.order_holder[marketId][betId]['persistenceType']}, "orderType": self.order_holder[marketId][betId]['orderType'], "side": self.order_holder[marketId][betId]['side']}, "betId": betId, "placedDate": str(self.order_holder[marketId][betId]['placedDate']), "averagePriceMatched": self.order_holder[marketId][betId]['averagePriceMatched'], "sizeMatched": self.order_holder[marketId][betId]['sizeMatched']} synResponse.append(re) synResponse = {"jsonrpc": "2.0", "result": {"status": "SUCCESS", "marketId": marketId, "instructionReports": synResponse}, "id": 1} logging.info('place_orders Resp %s' % synResponse) return synResponse