BTCTrader / broker-api-docs

The documentation for BTCTrader's white label exchange platform API. Use this documentation to access the APIs of BTCTurk other BTCTrader partners.
110 stars 32 forks source link

API ILE PEPEUSDT LIMIT EMIR GÖNDEREMEME PROBLEMİ #557

Closed exchangekiller closed 7 months ago

exchangekiller commented 1 year ago

Merhaba,

python btcturk-api kütüphanesini kullanarak alım-satım işlemleri gerçekleştiren bir kodum var. Bugün PEPEUSDT çiftinde işlem yapmaya çalıştığını ancak emirlerin gerçekleşmediğini farkettim. 0.00000099 dan daha büyük fiyatlarda emirler gerçekleşiyor. Ancak daha küçük fiyatlarda aşağıdaki hatayı alıyorum. Fiyat bu seviyenin altına düşmeden önce herhangi bir sorun yaşamıyordum. Bu fiyat seviyesindeki tek işlem çifti de PEPEUSDT. Hatanın sunucu ya da kütüphane kaynaklı olduğunu düşünüyorum. Kontrol etme şansınız var mıdır? Aşağıya izole bir test bırakıyorum:

Çalışan istek unit test (b api ile alakalı gerekli obje ve veri tiplerini tutan sınıf nesnesi):

ord = b.client.submit_limit_order(quantity=50 * 1000 * 1000,
                                  price=10.1e-07,
                                  order_type='buy',
                                  pair_symbol='PEPEUSDT')

Çalışmayan istek:

 ord = b.client.submit_limit_order(quantity=50 * 1000 * 1000,
                                   price=8.1e-07,
                                   order_type='buy',
                                   pair_symbol='PEPEUSDT')

Traceback (most recent call last): File "/Users/*/Desktop/CIXIE/v3/BtcTurkApiMethods.py", line 256, in ord = b.client.submit_limit_order(quantity=50 1000 1000, File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/properties.py", line 11, in wrapper_decorator value = func(args, *kwargs) File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/client.py", line 1316, in submit_limit_order return self._submit_order(params) File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/properties.py", line 11, in wrapper_decorator value = func(args, kwargs) File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/client.py", line 1444, in _submit_order return self._post(request_url, params) File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/client.py", line 387, in _post self._handle_response(response) File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/client.py", line 336, in _handle_response raise BadRequestError(response) File "/opt/homebrew/lib/python3.9/site-packages/btcturk_api/exceptions.py", line 18, in init raise exception_class(response) btcturk_api.exceptions.InvalidRequestParameterError: Invalid Request Parameters. Error Message: INVALID_REQUEST

afproxyztr commented 7 months ago

Aynı sorunu bende yaşıyorum. Takipteyim

suleymanbyzt commented 7 months ago

Selamlar, Price alanını decimal olarak yollamanız hataya neden oluyor olabilir. Price'ı nasıl handle ettiğinizi bilmediğim için size önerim bunu string formatında api'ye iletmeniz yönünde olacaktır. Zamanında aynı problemi yaşayan bir kullanıcımız için yazmış olduğum bir kod örneği vardı. Aşağıda size ileteceğim örnekteki gibi bir istek yollamanız durumunda hata almamanızı beklerim.

Aşağıya kod örneğini bırakıyorum

import time, base64, hmac, hashlib, requests, json
import numpy as np

def format_float(num):
    return np.format_float_positional(num, trim='-')

base = "https://api.btcturk.com"
method = "/api/v1/order"
uri = base + method

apiKey = "-"
apiSecret = "-"
apiSecret = base64.b64decode(apiSecret)

stamp = str(int(time.time()) * 1000)
data = "{}{}".format(apiKey, stamp).encode("utf-8")
signature = hmac.new(apiSecret, data, hashlib.sha256).digest()
signature = base64.b64encode(signature)
headers = {"X-PCK": apiKey, "X-Stamp": stamp, "X-Signature": signature, "Content-Type": "application/json"}

params = {"quantity": 10000000, "price": 0.00003939, "stopPrice": 0, "newOrderClientId": "Test", "orderMethod": "limit",
          "orderType": "buy", "pairSymbol": "PEPE_TRY"}

params["price"] = format_float(params["price"])
params["quantity"] = format_float(params["quantity"])

json_params = json.dumps(params)
result = requests.post(url=uri, headers=headers, json=params)
result = result.json()

print(result)

Request body {'quantity': '10000000', 'price': '0.00003939', 'stopPrice': 0, 'newOrderClientId': 'Test', 'orderMethod': 'limit', 'orderType': 'buy', 'pairSymbol': 'PEPE_TRY'}

<Response [200]> {'httpStatusCode': 200, 'data': {'id': xxx, 'quantity': '10000000', 'price': '0.00003939', 'stopPrice': '0', 'newOrderClientId': 'Test', 'type': 'buy', 'method': 'limit', 'pairSymbol': 'PEPETRY', 'pairSymbolNormalized': 'PEPE_TRY', 'datetime': 1702548923527}, 'success': True, 'message': 'SUCCESS', 'code': 0}