Exemplo n.º 1
0
    def get(self, apikey):
        acc = User.query.filter_by(api_public=apikey).first()
        if not acc:
            return create_error_response(
                404, "Account does not exist",
                "Account with api-key '{}' does not exist.".format(apikey))
        if not authorize(acc, request):
            return create_error_response(401, "Unauthorized",
                                         "No API-key or wrong API-key")

        try:
            ws = BitMEXWebsocket(endpoint="https://testnet.bitmex.com/api/v1",
                                 symbol="",
                                 api_key=apikey,
                                 api_secret=request.headers["api_secret"])

            positions = []
            parsed_positions = []
            positions = ws.positions()
            ws.exit()
            if positions:
                for position in positions:

                    parsed_position_symbol = position["symbol"]
                    parsed_position_size = position["currentQty"]
                    if position["crossMargin"] == True:
                        parsed_position_leverage = 0
                    else:
                        parsed_position_leverage = position["leverage"]
                    parsed_position_entyprice = position["avgEntryPrice"]
                    parsed_position_liquidationPrice = position[
                        "liquidationPrice"]

                    parsed_position = MasonControls(
                        symbol=parsed_position_symbol,
                        size=parsed_position_size,
                        leverage=parsed_position_leverage,
                        avgEntryPrice=parsed_position_entyprice,
                        liquidationPrice=parsed_position_liquidationPrice)
                    parsed_position.add_control(
                        "self",
                        href=api.url_for(Position,
                                         apikey=apikey,
                                         symbol=parsed_position_symbol))
                    if not position["currentQty"] == 0:
                        parsed_positions.append(parsed_position)

            body = MasonControls(items=parsed_positions)
            body.add_control_account(apikey)
            body.add_control("self", api.url_for(Positions, apikey=apikey))
            return Response(json.dumps(body), status=200, mimetype=MASON)

        except TypeError:
            return create_error_response(400, "Query Error",
                                         "Query Parameter doesn't exist")
Exemplo n.º 2
0
    def get(self, apikey, symbol):
        """ Gets a single active position from the BitMEX testnet """
        acc = User.query.filter_by(api_public=apikey).first()
        if not acc:
            return create_error_response(
                404, "Account does not exist",
                "Account with api-key '{}' does not exist.".format(apikey))
        if not authorize(acc, request):
            return create_error_response(401, "Unauthorized",
                                         "No API-key or wrong API-key")

        try:
            ws = BitMEXWebsocket(endpoint="https://testnet.bitmex.com/api/v1",
                                 symbol=symbol,
                                 api_key=apikey,
                                 api_secret=request.headers["api_secret"])

            positions = []
            parsed_positions = []
            positions = ws.positions()
            ws.exit()
            if positions:
                for position in positions:
                    parsed_position_symbol = position["symbol"]
                    parsed_position_size = position["currentQty"]
                    if position["crossMargin"] == True:
                        parsed_position_leverage = 0
                    else:
                        parsed_position_leverage = position["leverage"]
                    parsed_position_entyprice = position["avgEntryPrice"]
                    parsed_position_liquidationPrice = position[
                        "liquidationPrice"]

                    parsed_position = MasonControls(
                        symbol=parsed_position_symbol,
                        size=parsed_position_size,
                        leverage=parsed_position_leverage,
                        avgEntryPrice=parsed_position_entyprice,
                        liquidationPrice=parsed_position_liquidationPrice)

                    parsed_position.add_control(
                        "self",
                        href=api.url_for(Position,
                                         apikey=apikey,
                                         symbol=parsed_position_symbol))
                    parsed_position.add_control(
                        "edit",
                        href=api.url_for(Position,
                                         apikey=apikey,
                                         symbol=parsed_position_symbol),
                        method="PATCH",
                        encoding="json",
                        title="Change position leverage",
                        schema=parsed_position.position_schema())

                    parsed_position.add_control_positions(apikey)
                    parsed_positions.append(parsed_position)

            if len(parsed_positions) == 1:
                body = parsed_positions[0]

                return Response(json.dumps(body), status=200, mimetype=MASON)
            else:
                return Response(json.dumps(parsed_positions),
                                status=200,
                                mimetype=MASON)
        except TypeError:
            return create_error_response(400, "Query Error",
                                         "Query Parameter doesn't exist")