Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

is it possible to open position on Perpetual Futures with VST token? #26

Open
smartkid2024 opened this issue Feb 14, 2024 · 7 comments
Open

Comments

@smartkid2024
Copy link

smartkid2024 commented Feb 14, 2024

Hi, I want to open a position to test a bot on a demo account using VST token on Perpetual Futures market. is it possible to that with API?
Something like this:

def demo():
    payload = {}
    path = '/openApi/swap/v2/trade/order'
    method = "POST"
    paramsMap = {
    "symbol": "BTC-VST",
    "side": "BUY",
    "positionSide": "LONG",
    "type": "MARKET",
    "quantity": 0.5
}
    paramsStr = praseParam(paramsMap)
    return send_request(method, path, paramsStr, payload)

def get_sign(api_secret, payload):
    signature = hmac.new(api_secret.encode("utf-8"), payload.encode("utf-8"), digestmod=sha256).hexdigest()
    print("sign=" + signature)
    return signature


def send_request(method, path, urlpa, payload):
    url = "%s%s?%s&signature=%s" % (APIURL, path, urlpa, get_sign(SECRETKEY, urlpa))
    print(url)
    headers = {
        'X-BX-APIKEY': APIKEY,
    }
    response = requests.request(method, url, headers=headers, data=payload)
    return response.text

def praseParam(paramsMap):
    sortedKeys = sorted(paramsMap)
    paramsStr = "&".join(["%s=%s" % (x, paramsMap[x]) for x in sortedKeys])
    return paramsStr+"&timestamp="+str(int(time.time() * 1000))


if __name__ == '__main__':
    demo=demo()
    print("demo:",demo )
@bingx-support
Copy link

bingx-support commented Feb 15, 2024 via email

@smartkid2024
Copy link
Author

Hi I did it i tried this code as you said:

APIURL = "http://open-api-vst.bingx.com"
def demo():
    payload = {}
    path = '/openApi/swap/v2/trade/order'
    method = "POST"
    paramsMap = {
    "symbol": "BTC-USDT",
    "side": "BUY",
    "positionSide": "LONG",
    "type": "MARKET",
    "quantity": 0.5,
}
    paramsStr = praseParam(paramsMap)
    return send_request(method, path, paramsStr, payload)

def get_sign(api_secret, payload):
    signature = hmac.new(api_secret.encode("utf-8"), payload.encode("utf-8"), digestmod=sha256).hexdigest()
    print("sign=" + signature)
    return signature

def send_request(method, path, urlpa, payload):
    url = "%s%s?%s&signature=%s" % (APIURL, path, urlpa, get_sign(SECRETKEY, urlpa))
    print(url)
    headers = {
        'X-BX-APIKEY': APIKEY,
    }
    response = requests.request(method, url, headers=headers, data=payload)
    return response.text

def praseParam(paramsMap):
    sortedKeys = sorted(paramsMap)
    paramsStr = "&".join(["%s=%s" % (x, paramsMap[x]) for x in sortedKeys])
    return paramsStr+"&timestamp="+str(int(time.time() * 1000))

if __name__ == '__main__':
    demo=demo()
    print("demo:",demo )

And I get this error:

demo: {"code":80014,"msg":"Invalid parameters, err: Cannot have both orderId and clientOrderID fields empty,one must be filled in","data":{}}

Maybe it's better to update documents because I copy paste example code from there so I changed demo() method to below and append clientOrderID with real unique id:

def demo():
    payload = {}
    path = '/openApi/swap/v2/trade/order'
    method = "POST"
    paramsMap = {
    "symbol": "BTC-USDT",
    "side": "BUY",
    "positionSide": "LONG",
    "type": "MARKET",
    "quantity": 0.5,
    "clientOrderID": str(uuid.uuid4())
}

So my code changed to this:

APIURL = "http://open-api-vst.bingx.com"
def demo():
    payload = {}
    path = '/openApi/swap/v2/trade/order'
    method = "POST"
    paramsMap = {
    "symbol": "BTC-USDT",
    "side": "BUY",
    "positionSide": "LONG",
    "type": "MARKET",
    "quantity": 0.5,
    "clientOrderID": str(uuid.uuid4())
}
    paramsStr = praseParam(paramsMap)
    return send_request(method, path, paramsStr, payload)

def get_sign(api_secret, payload):
    signature = hmac.new(api_secret.encode("utf-8"), payload.encode("utf-8"), digestmod=sha256).hexdigest()
    print("sign=" + signature)
    return signature

def send_request(method, path, urlpa, payload):
    url = "%s%s?%s&signature=%s" % (APIURL, path, urlpa, get_sign(SECRETKEY, urlpa))
    print(url)
    headers = {
        'X-BX-APIKEY': APIKEY,
    }
    response = requests.request(method, url, headers=headers, data=payload)
    return response.text

def praseParam(paramsMap):
    sortedKeys = sorted(paramsMap)
    paramsStr = "&".join(["%s=%s" % (x, paramsMap[x]) for x in sortedKeys])
    return paramsStr+"&timestamp="+str(int(time.time() * 1000))

if __name__ == '__main__':
    demo=demo()
    print("demo:",demo )

But I got this error:

demo: {"code":80016,"msg":"order not exist","data":{}}

@bingx-support
Copy link

bingx-support commented Feb 16, 2024 via email

@smartkid2024
Copy link
Author

18257026

@smartkid2024
Copy link
Author

Any update?

@bingx-support
Copy link

bingx-support commented Feb 18, 2024 via email

@smartkid2024
Copy link
Author

I just run the example code and the code you give it to me as you can see in my code the method is POST

APIURL = "http://open-api-vst.bingx.com"
def demo():
    payload = {}
    path = '/openApi/swap/v2/trade/order'
    method = "POST"     # HEEEEERREEEEE 
          paramsMap = {
          "symbol": "BTC-USDT",
          "side": "BUY",
          "positionSide": "LONG",
          "type": "MARKET",
          "quantity": 0.5,
          "clientOrderID": str(uuid.uuid4())
          }
    paramsStr = praseParam(paramsMap)
    return send_request(method, path, paramsStr, payload)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants