Example #1
0
    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
Example #2
0
    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