Exemple #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")
Exemple #2
0
                position = i
                break

        if (position['currentQty'] == 0):  # treba se zazihrat de ni nobenih open positionu
            # also ce program crasha to pumaga de se lepo zaprejo orderji

            offsetLong = 0
            offsetShort = 0

            deadManSwitch = client.Order.Order_cancelAllAfter(timeout=60000.0).result()  # dead man switch start
            switchCounter = 0

            kukCajta = datetime.now() - lastRenew

            if (kukCajta.seconds / 60 > 15):  # renew ws connection cause live feed lagging, renew every hour
                ws.exit()
                ws = BitMEXWebsocket(endpoint="https://www.bitmex.com/api/v1", symbol=symbol, api_key=apiKljuci['websocket']['key'], api_secret=apiKljuci['websocket']['secret'])
                lastRenew = datetime.now()

            if (ws.get_instrument()['volume'] < ws.get_instrument()['volume24h'] / 24):  # avoid pumps/dumps

                d = dateutil.parser.parse(ws.get_instrument()['fundingTimestamp'])
                d = d.replace(tzinfo=None)
                razlika = d - datetime.utcnow()
                print(razlika.seconds / 60)
                if (razlika.seconds / 60 > 10):  # check funding closing

                    result1 = client.Order.Order_new(symbol=symbol, ordType='Limit', orderQty=amount, price=ws.recent_trades()[0]['price'] - offsetLong, execInst='ParticipateDoNotInitiate').result()
                    while (True):  # check if order succesful else try again
                        if (result1[0]['ordStatus'] == 'New'):
                            print('order LONG uspesen')
Exemple #3
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")