Ccxt: fetchOrder (bitstamp) لا يعمل بعد الآن -> "nonce غير صالح"

تم إنشاؤها على ١٤ فبراير ٢٠١٨  ·  52تعليقات  ·  مصدر: ccxt/ccxt

  • نظام التشغيل: Win 7 64
  • إصدار لغة البرمجة: python 3.6
  • إصدار CCXT: 10.1104.0
  • التبادل: bitstamp
  • الطريقة: fetchOrder

الطريقة المستخدمة في العمل ، والآن لم تعد كذلك.
"رفع ExchangeError (self.id + '' + self.json (استجابة))
ccxt.base.errors.ExchangeError: bitstamp {"status": "error"، "reason": "Invalid nonce"، "code": "API0004"} "

لقد أصدرت مفتاح API جديدًا تمامًا من bitstamp -> نفس المشكلة. لا تزال جميع طرق API الخاصة الأخرى تعمل (يمكنني تقديم الطلب ، وما إلى ذلك ، ولكن جلب الطلب بناءً على معرف الطلب يؤدي إلى إنشاء الخطأ.
اي فكرة لماذا؟
شكرا
أورس

ال 52 كومينتر

Traceback (most recent call last):
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\ccxt\base\exchange.py", line 364, in fetch
    response.raise_for_status()
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\requests\models.py", line 935, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Authentication Failed for url: https://www.bitstamp.net/api/v2/open_orders/all/

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "\\DARTH3-V03\RedirectedFolders\us\My Documents\python\crypto\bitstamp-004.py", line 712, in <module>
    observeOpeningOrderPlaced(exchange,symbol)
  File "\\DARTH3-V03\RedirectedFolders\us\My Documents\python\crypto\bitstamp-004.py", line 528, in observeOpeningOrderPlaced
    orderInfo=exchange.fetchOrder(exchange.openOpeningOrders[symbol][side][0]) #fetchorder by orderid
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\ccxt\bitstamp.py", line 425, in fetch_order
    orders = self.privatePostOpenOrdersAll()
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\ccxt\base\exchange.py", line 311, in request
    return self.fetch2(path, api, method, params, headers, body)
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\ccxt\base\exchange.py", line 308, in fetch2
    return self.fetch(request['url'], request['method'], request['headers'], request['body'])
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\ccxt\base\exchange.py", line 376, in fetch
    self.handle_errors(response.status_code, response.reason, url, method, self.last_response_headers, self.last_http_response)
  File "C:\Users\us\.thonny\BundledPython36\lib\site-packages\ccxt\bitstamp.py", line 504, in handle_errors
    raise ExchangeError(self.id + ' ' + self.json(response))
ccxt.base.errors.ExchangeError: bitstamp {"status":"error","reason":"Invalid nonce","code":"API0004"}
>>> 

stabilus ، هل يمكنك من فضلك إظهار مقتطف صغير (أقصر وقت ممكن ، لكن كامل) من التعليمات البرمجية لإعادة إظهار المشكلة؟

سيؤدي هذا إلى إنشاء الخطأ:

def instantiateExchanges():
    # instantiate exchange(s)

    #***bitstamp****
    global bitstamp_ccxt
    global g_minProfit
    bitstamp_ccxt = ccxt.bitstamp()
    bitstamp_ccxt.uid='xxxx'
    bitstamp_ccxt.password='xxxx'
    bitstamp_ccxt.apiKey='xxxx'
    bitstamp_ccxt.secret='xxxx'
    bitstamp_ccxt.loadMarkets()

instantiateExchanges()
exchange=bitstamp_ccxt
symbol='BTC/USD'

time.sleep(1)
result=exchange.createLimitBuyOrder(symbol,0.01,4100)
orderID=result['id']
print (orderID)

time.sleep(1)
print(exchange.fetchOrder(orderID))

حسنًا ، هل يمكنك من فضلك إضافة الوضع المطول ولصق الإخراج المطول الكامل (بدون المفتاح)؟

# ...
exchange.verbose = True # add this before the last line
print(exchange.fetchOrder(orderID))

الوقوف لمزيد من المعلومات منك. شكرا!

هذا هو الإخراج المطول ، متبوعًا برسائل الخطأ:

960016270
انشر https://www.bitstamp.net/api/v2/order_status/
الطلب: {'Content-Type': 'application / x-www-form-urlencoded'، 'User-Agent': 'python-applications / 2.18.4'، 'Accept-Encoding': 'gzip، deflate'}
key = XXXX & signature = XXXXXX & nonce = 1518644639 & id = 960016270
انشر https://www.bitstamp.net/api/v2/order_status/ 200
الاستجابة: {'Access-Control-Allow-Headers': 'x-required-with، Content-Type، origin، Accept، cache-control'، 'Access-Control-Allow-Methods': 'POST، GET'، ' Access-Control-Allow-Origin ':' * '،' Cache-Control ':' max-age = 0 '،' Content-Language ':' en '،' Content-Type ':' application / json '،' التاريخ ':' الأربعاء ، 14 فبراير 2018 21:44:00 GMT '،' Expires ':' Wed، 14 Feb 2018 21:44:00 GMT '،' Last-Modified ':' الأربعاء، 14 فبراير 2018 21:44 : 00 GMT '،' Server ':' Apache '،' Strict-Transport-Security ':' max-age = 63072000؛ includeSubDomains '،' Vary ':' Accept-Language '،' X-Frame-Options ':' SAMEORIGIN '،' ترميز النقل ':' chunked '،' Connection ':' keep-live '،' Set-Cookie ' : 'visid_incap_99025 = 50kIyr46SE + B0q2suQdttp + thFoAAAAAQUIPAAAAAAACzzKMVkcPqA // eGaSaraPq ؛ تنتهي الصلاحية = الخميس ، 14 فبراير 2019 15:06:31 GMT ؛ المسار = / ؛ المجال = .bitstamp.net، incap_ses_189_99025 = iEgUBEAfJAXWb / IC3XifAp + thFoAAAAAnMkVCwDaOsce3XpHpKGNjQ == ؛ المسار = / ؛ المجال = .bitstamp.net '،' X-Iinfo ': '10 -2657481-2657575 SNNN RT (1518644636526 2533) q (0 0 0 -1) r (0 0) U6'، 'X-CDN': 'Incapsula '، ترميز المحتوى': 'gzip'}
{"الحالة": "فتح" ، "المعرف": 960016270 ، "المعاملات": []}
انشر https://www.bitstamp.net/api/v2/open_orders/all/
الطلب: {'Content-Type': 'application / x-www-form-urlencoded'، 'User-Agent': 'python-applications / 2.18.4'، 'Accept-Encoding': 'gzip، deflate'}
المفتاح = 6pgmGQJtGcUaZulmSYmVxP9HT9b7XYLD & signature = XXXX & nonce = 1518644639
Traceback (آخر مكالمة أخيرة):
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbaseexchange.py" ، السطر 364 ، قيد الجلب
response.raise_for_status ()
ملف "C: Usersus.thonnyBundledPython36libsite-packagesrequestsmodels.py" ، السطر 935 ، في lift_for_status
رفع HTTPError (http_error_msg، response = self)
request.exceptions.HTTPError: 403 Client Error: فشلت المصادقة لعنوان url: https://www.bitstamp.net/api/v2/open_orders/all/

أثناء معالجة الاستثناء أعلاه ، حدث استثناء آخر:

Traceback (آخر مكالمة أخيرة):
ملف "\ DARTH3-V03RedirectedFoldersusMy Documentspythoncryptobitstamp-004-t1.py" ، السطر 35 ، في
طباعة (exchange.fetchOrder (معرف الطلب))
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbitstamp.py" ، السطر 425 ، في fetch_order
الطلبات = self.privatePostOpenOrdersAll ()
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbaseexchange.py" ، السطر 311 ، في الطلب
إرجاع self.fetch2 (مسار ، واجهة برمجة تطبيقات ، طريقة ، معلمات ، رؤوس ، جسم)
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbaseexchange.py" ، السطر 308 ، في fetch2
return self.fetch (طلب ['url'] ، طلب ['طريقة'] ، اطلب ['headers'] ، اطلب ['body'])
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbaseexchange.py" ، السطر 376 ، قيد الجلب
self.handle_errors (response.status_code، response.reason، url، method، self.last_response_headers، self.last_http_response)
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbitstamp.py" ، السطر 504 ، في handle_errors
رفع ExchangeError (self.id + '' + self.json (استجابة))
ccxt.base.errors.ExchangeError: bitstamp {"status": "error"، "reason": "Invalid nonce"، "code": "API0004"}

مرحبًا كرويتور
هل لديك كل المعلومات التي تحتاجها مني للنظر في هذا؟ ما أجده غريباً هو أن الطريقة المستخدمة للعمل بشكل جيد ثم بدأت فجأة في إلقاء هذا الخطأ غير الرسمي.

كان على وشك نشر نفس الشيء.

مشكلتان:

fetchOrder on bitstamp عبارة عن مكالمتين: أولاً نتحقق من حالة الطلب (مفتوحة أو مغلقة) ، ثم نستقصي نقطة النهاية وفقًا لحالة الطلب. (أو يجب أن يكون الأمر كذلك ، في الوقت الحالي نتحقق من الحالة ثم نقوم باستقصاء نقطة النهاية "المفتوحة" على أي حال ، ولكن هذا حل سهل)

على أي حال ، المكالمة الأولى تسير على أكمل وجه ، المكالمة الثانية تعطي خطأ nonce.
عند الاتصال بهم بشكل منفصل ، كل شيء يسير على ما يرام.

في الإخراج المطول ، يمكننا أن نرى إعادة استخدام nonce ، وأعتقد أن هذا يسبب المشكلة.

fetch:
 bitstamp POST https://www.bitstamp.net/api/v2/order_status/
Request:
 { 'Content-Type': 'application/x-www-form-urlencoded' }
 key=xxx&signature=xxx&nonce=1518686391&id=962455719

handleRestResponse:
 bitstamp POST https://www.bitstamp.net/api/v2/order_status/ 200 OK
Response:
 { 'access-control-allow-headers': 'x-requested-with, Content-Type, origin, accept, cache-control',
  'access-control-allow-methods': 'POST, GET',
  'access-control-allow-origin': '*',
  'cache-control': 'max-age=0',
  'content-language': 'en',
  'content-type': 'application/json',
  date: 'Thu, 15 Feb 2018 09:19:51 GMT',
  expires: 'Thu, 15 Feb 2018 09:19:51 GMT',
  'last-modified': 'Thu, 15 Feb 2018 09:19:51 GMT',
  server: 'Apache',
  'strict-transport-security': 'max-age=63072000; includeSubDomains',
  vary: 'Accept-Language',
  'x-frame-options': 'SAMEORIGIN',
  'transfer-encoding': 'chunked',
  connection: 'Close',
  'set-cookie': 'incap_ses_767_99025=0QFGaFjglGiWXciQp+6kCrZQhVoAAAAAxIrWQDe9KAbjpI79FozUVQ==; path=
/; Domain=.bitstamp.net',
  'x-iinfo': '12-9910999-9911000 NNNN CT(17 17 0) RT(1518686390399 13) q(0 0 0 -1) r(0 0) U6',
  'x-cdn': 'Incapsula',
  'content-encoding': 'gzip' }
 {"status": "Finished", "id": 962455719, "transactions": [{"fee": "1.18", "price": "187.99000000", "
datetime": "2018-02-15 06:50:34.427688", "ltc": "2.50625000", "tid": 54805885, "type": 2, "eur": "47
1.1499375000000000"}]}

fetch:
 bitstamp POST https://www.bitstamp.net/api/v2/open_orders/all/
Request:
 { 'Content-Type': 'application/x-www-form-urlencoded' }
 key=xxx&signature=xxx&nonce=1518686391

handleRestResponse:
 bitstamp POST https://www.bitstamp.net/api/v2/open_orders/all/ 403 Authentication Failed
Response:
 { 'access-control-allow-headers': 'x-requested-with, Content-Type, origin, accept, cache-control',
  'access-control-allow-methods': 'POST, GET',
  'access-control-allow-origin': '*',
  'content-language': 'en',
  'content-type': 'application/json',
  date: 'Thu, 15 Feb 2018 09:19:51 GMT',
  server: 'Apache',
  'strict-transport-security': 'max-age=63072000; includeSubDomains',
  vary: 'Accept-Language',
  'x-frame-options': 'SAMEORIGIN',
  'transfer-encoding': 'chunked',
  connection: 'Close',
  'set-cookie': 'incap_ses_767_99025=PfW/HILr8gmiXciQp+6kCrZQhVoAAAAAFEUdOmQ1qzRZv0WUKrhIBg==; path=
/; Domain=.bitstamp.net',
  'x-iinfo': '14-16391799-16391801 NNNN CT(17 18 0) RT(1518686390551 19) q(0 0 1 -1) r(1 1) U6',
  'x-cdn': 'Incapsula',
  'content-encoding': 'gzip' }
 {"status": "error", "reason": "Invalid nonce", "code": "API0004"}

(node:6004) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error:
bitstamp {"status":"error","reason":"Invalid nonce","code":"API0004"}
(node:6004) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future
, promise rejections that are not handled will terminate the Node.js process with a non-zero exit co
de.

fetchOrder على bitstamp هو مكالمتان

هذه هي المشكلة الرئيسية ، يجب حذف المكالمة الثانية من هناك.

ومع ذلك ، في حالتك الخاصة ، سيكون الحل البديل هو تمكين تحديد المعدل (قم بتعيين "enableRateLimit": صحيح في المثيل الخاص بك).

سنقوم بإزالة fetchOrder لـ bitstamp إلى الجزء الذي تمت محاكاته ، حيث أن التطبيق الحالي معيب (يتطلب مكالمتين بدلاً من مكالمتين فقط). Bitstamp ليس لديها طريقة لجلب طلب واحد على الإطلاق ، لديهم فقط أوامر مفتوحة. وسنقوم بمحاكاة طرق أخرى باستخدام ذاكرة التخزين المؤقت.

لا يهم هذا:

أولاً نتحقق من حالة الطلب (مفتوحة أو مغلقة) ، ثم نستقصي نقطة النهاية وفقًا لحالة الطلب. (أو يجب أن يكون الأمر كذلك ، في الوقت الحالي نتحقق من الحالة ثم نقوم باستقصاء نقطة النهاية "المفتوحة" على أي حال ، ولكن هذا حل سهل)

جميع المعلومات الخاصة بالأوامر المغلقة موجودة في مكالمة "الحالة".
سأقوم بعمل طلب مؤقت سيبقى مفتوحًا ، ومعرفة ما إذا كان بإمكاني الحصول على ذلك في مكالمة الحالة أيضًا.
ينبغي أن يجعل من الممكن الذهاب إلى مكالمة واحدة.

لم يعد هناك طلب للحصول على bitstamp بعد الآن ، فهناك فقط أوامر fetchOpenOpen الآن. سنضيف محاكاة fetchOrder قريبًا.

سأقوم بعمل طلب مؤقت سيبقى مفتوحًا ، ومعرفة ما إذا كان بإمكاني الحصول على ذلك في مكالمة الحالة أيضًا.
ينبغي أن يجعل من الممكن الذهاب إلى مكالمة واحدة.

حتى الآن ، لم يتم تنفيذ جلب الأوامر المفتوحة والأوامر المغلقة في ccxt. إذا قمت بتنفيذ ذلك ، فسيكون ذلك بالفعل ميزة رائعة للعمل معها
آسف ، لا يمكنني المساعدة النشطة في البرمجة من جانبك - أنا مبتدئ في لغة الثعبان ...

وفقًا لطوابع البت ، يتم تخزين الطلبات المفتوحة مؤقتًا لمدة 10 ثوانٍ بينما لا توجد ذاكرة تخزين مؤقت لحالة الطلب. من أجل الاستجابة بسرعة لتغييرات حالة الطلب ، قد يكون من المستحسن الاستمرار في استخدام استدعاءات حالة الطلب عند تنفيذ طريقة fetchOrder على جانب ccxt.

تضمين التغريدة

قد يكون من المستحسن الاستمرار في استخدام استدعاءات حالة الطلب عند تنفيذ طريقة fetchOrder على جانب ccxt

إذا تطلب الأمر مكالمتين ، فهذا أمر محبط للغاية. بدلاً من ذلك ، نقترح استخدام fetchOrderStatus الموجود مع fetchOpenOrders وترك ترتيب المكالمات المتسلسلة للمستخدم (لن يقرر ترتيب المكالمات المتسلسلة في المكتبة).

إخراج الحالة لأمر مغلق:

{ status: 'Finished',
  id: 962455719,
  transactions:
   [ { fee: '1.18',
       price: '187.99000000',
       datetime: '2018-02-15 06:50:34.427688',
       ltc: '2.50625000',
       tid: 54805885,
       type: 2,
       eur: '471.1499375000000000' } ] }

للطلب المفتوح:
{ status: 'Open', id: 963180354, transactions: [] }

هل يمكننا أن نجعل fetchOrder هذه المكالمة الفردية فقط؟
إنها ليست مثالية لأنها لا تُرجع الكثير من المعلومات للأوامر المفتوحة ، لكنها أفضل من حذف fetchOrder تمامًا.

في احسن الاحوال! هذا كل ما نحتاجه! أود أن أساهم في جهدك العظيم. يرجى ذكر عنوان BTC الخاص بك للحصول على تبرع صغير!

غير منتسب ، مجرد "عميل" سعيد مثلك.
للتبرعات لفريق CCXT: https://opencollective.com/ccxt/donate

404 ...؟

هل يمكننا أن نجعل fetchOrder هذه المكالمة الفردية فقط؟

نعم ، سنعيد تنفيذه باستخدام ذاكرة التخزين المؤقت للأوامر. في الوقت الحالي ، نقدم fetchOrderStatus + fetchOpenOrders (وهو فعليًا نفس تطبيق fetchOrder السابق).

إنها ليست مثالية لأنها لا تُرجع الكثير من المعلومات للأوامر المفتوحة ، لكنها أفضل من حذف fetchOrder تمامًا.

نحن لا نحذفها إلى الأبد ، فقط نجعل المكالمات صريحة ، وسنضيف طبقة تخزين مؤقت إلى bitstamp قريبًا أيضًا.

https://opencollective.com/ccxt)

يرجى ذكر عنوان BTC الخاص بك للحصول على تبرع صغير!

https://github.com/ccxt/ccxt#crypto) Thx)

ETH 0xa7c2b18b7c8b86984560cad3b1bc3224b388ded0
BTC 33RmVRfhK2WZVQR1R83h2e9yXoqRNDvJva
BCH 1GN9p233TvNcNQFthCgfiHUnj5JRKEc2Ze
LTC LbT8mkAqQBphc4yxLXEDgYDfEax74et3bP

أرسلها إلى opencollective بواسطة BTC. شكرا!

في الوقت الحالي ، نقدم fetchOrderStatus + fetchOpenOrders (وهو فعليًا نفس تطبيق fetchOrder السابق).

مع الاحترام ، الأمر ليس كذلك.
يؤدي fetchOrderStatus إلى إرجاع "مغلق" أو "مفتوح" فقط.
يقوم fetchOpenOrders بإرجاع الأوامر المفتوحة فقط.
مع التحديث الأحدث ، ليس لدينا طريقة للتحقق من الطلبات المغلقة.

أحتاج إلى تفاصيل حول الطلبات المغلقة ، والمعلومات متاحة بسهولة في نفس المكالمة المستخدمة في حالة fetchOrderStatus. الإخراج الخام:

{ status: 'Finished',
  id: 962455719,
  transactions:
   [ { fee: '1.18',
       price: '187.99000000',
       datetime: '2018-02-15 06:50:34.427688',
       ltc: '2.50625000',
       tid: 54805885,
       type: 2,
       eur: '471.1499375000000000' } ] }

يمكنني إجراء fetchOrder () من هذه المكالمة (مكالمة واحدة الآن ، وليس مضاعفة كما كانت) ، والعيب الوحيد هو أن معلومات الطلبات المفتوحة ستكون محدودة للغاية.

عندما يكون لدينا تنفيذ للتخزين المؤقت ، يمكننا بالطبع استخدامه بدلاً من ذلك.

تضمين التغريدة

أرسلها إلى opencollective بواسطة BTC. شكرا!

شكرا! ومع ذلك ، فإن opencollective لا تقبل BTC٪)) إنهم يقبلون المدفوعات الورقية ... إذا كنت ترغب في المساهمة في العملات المشفرة ، فإن مساهماتك مرحب بها ، وعناوين التشفير هي:

ETH 0xa7c2b18b7c8b86984560cad3b1bc3224b388ded0
BTC 33RmVRfhK2WZVQR1R83h2e9yXoqRNDvJva
BCH 1GN9p233TvNcNQFthCgfiHUnj5JRKEc2Ze
LTC LbT8mkAqQBphc4yxLXEDgYDfEax74et3bP

ثكس مرة أخرى)

wannesdemaeght لقد استعدت ما يلي لـ fetchOrder (في الوقت الحالي):

    async fetchOrder (id, symbol = undefined, params = {}) {
        await this.loadMarkets ();
        let market = undefined;
        if (typeof symbol !== 'undefined')
            market = this.market (symbol);
        let response = await this.privatePostOrderStatus ({ 'id': id });
        return this.parseOrder (response, market);
    }

هذا يبدو مثل ما تحتاجه ، أليس كذلك؟ )

آسف ، أنا أعرج وراء ...
.orderStatus الآن ترجع فقط "فتح" أو "مغلق" ولكن لا شيء من المعلومات التجارية. كيف يمكنك الآن الحصول على الجزء المتبقي أو الجزء المملوء على التوالي - دون الحاجة إلى استدعاء openOrders (الذي يتم تخزينه مؤقتًا لمدة 10 ثوانٍ)؟
.parseOrder (معرّف الطلب) يُرجع خطأ:

Traceback (آخر مكالمة أخيرة):
ملف ""، السطر 1 ، في
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbitstamp.py" ، السطر 378 ، في parse_order
datetimeString = self.safe_string (الترتيب ، "التاريخ والوقت")
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbaseexchange.py" ، السطر 447 ، في safe_string
return str (القاموس [مفتاح]) إذا لم يكن المفتاح بلا و (المفتاح في القاموس) والقاموس [المفتاح] ليس شيئًا آخر default_value
TypeError: وسيطة من النوع 'int' غير قابلة للتكرار

تضمين التغريدة

  1. قم بتحديث ccxt إلى الإصدار 1.10.1113
  2. استدعاء fetchOrder (معرف) كما فعلت من قبل (استخدم الكود الأولي الخاص بك دون تغيير أي شيء فيه)

أنا في 1.10.1113.
exchange.fetchOrder (963439610)
Traceback (آخر مكالمة أخيرة):
ملف ""، السطر 1 ، في
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbitstamp.py" ، السطر 362 ، في fetch_order
إرجاع self.parse_order (استجابة ، السوق)
ملف "C: Usersus.thonnyBundledPython36libsite-packagesccxtbitstamp.py" ، السطر 402 ، في parse_order
مملوء + = تداول ["المبلغ"]
TypeError: نوع (أنواع) المعامل غير المدعوم لـ + =: 'int' و 'NoneType'

stabilus حسنًا ، هناك إصلاح آخر قادم ... انتظر

wannesdemaeght لقد استعدت ما يلي لـ fetchOrder (في الوقت الحالي):

async fetchOrder (id, symbol = undefined, params = {}) {
    await this.loadMarkets ();
    let market = undefined;
    if (typeof symbol !== 'undefined')
        market = this.market (symbol);
    let response = await this.privatePostOrderStatus ({ 'id': id });
    return this.parseOrder (response, market);
}

هذا يبدو مثل ما تحتاجه ، أليس كذلك؟ )

عظيم شكرا.
توجد الآن بعض المشكلات الأساسية المتعلقة بتحليل هذه الاستجابة:

RangeError: قيمة وقت غير صالحة

هذا له علاقة بترميز وفك تشفير اختبار البيانات.
عندما أعلق على هذه الأشياء للاختبار ، أحصل على هذا كرد:

{ id: '962455719',
  timestamp: undefined,
  status: 'closed',
  symbol: undefined,
  type: undefined,
  side: undefined,
  price: undefined,
  cost: undefined,
  amount: undefined,
  filled: NaN,
  remaining: undefined,
  trades:
   [ { id: '54805885',
       info: [Object],
       timestamp: 1518677434427,
       datetime: '2018-02-15T06:50:34.427Z',
       symbol: undefined,
       order: undefined,
       type: undefined,
       side: 'sell',
       price: 187.99,
       amount: undefined,
       fee: [Object] } ],
  fee: undefined,
  info: { status: 'Finished', id: 962455719, transactions: [ [Object] ] } }

أي فكرة بخصوص الطابع الزمني؟ التنسيق الخام هو هذا:

التاريخ والوقت: "2018-02-15 06: 50: 34.427688"

فيما يتعلق بالتحليل ، لا أعرف ما هو الأفضل:
طلب تغيير التحليل للعمل مع fetchOrder ،
أو قم بعمل parseFetchOrder جديد مؤقت (انظر كيف أن التنفيذ الكامل لـ fetchOrder مؤقت أيضًا).

واسمحوا لي أن أعرف كيف تريد مني المضي قدما.

أي فكرة بخصوص الطابع الزمني؟

يتم شرحه بسهولة: لا توجد بيانات طابع زمني للأمر ... الطابع الزمني الذي تنشره هو الطابع الزمني للتجارة (يتم تحليله بشكل صحيح). لا علاقة له بالترميز على الإطلاق. البيانات مفقودة فقط للطلب في هذا الرد المحدد. سوف يصلح لذلك أيضا.

واسمحوا لي أن أعرف كيف تريد مني المضي قدما.

لا داعي للقلق في الوقت الحالي ، فأنا أقوم بإصلاح المحلل اللغوي لإخراج مبالغ التجارة + قيمة تنفيذ الأمر على أقل تقدير.

يتم شرحه بسهولة: لا توجد بيانات طابع زمني للأمر ... الطابع الزمني الذي تنشره هو الطابع الزمني للتجارة.

صحيح ، هذا منطقي. على أي حال ، الطابع الزمني ليس مهمًا بالنسبة لي :-)

لا داعي للقلق في الوقت الحالي ، فأنا أقوم بإصلاح المحلل اللغوي لإخراج مبالغ التجارة + قيمة تنفيذ الأمر على أقل تقدير.

من الناحية المثالية ، يجب أن نعيد المعلومات التالية:
السعر،
كلفة،
مقدار،
مصاريف

يجب أن تكون هذه المعلومات متاحة بسهولة من orderstatus.

يجب أن تكون هذه المعلومات متاحة بسهولة من orderstatus.

ليس حقًا ، ليس كذلك ... لا يزال المبلغ الإجمالي للطلب غير معروف.

من الناحية المثالية ، يجب أن نعيد المعلومات التالية:
السعر،
كلفة،
مقدار،
مصاريف

يمكننا فقط إرجاع هذه المعلومات للتداولات داخل الأمر ، ولكن ليس للأمر نفسه. بالنسبة للأمر نفسه ، يمكننا فقط إرجاع المبلغ المعبأ ، ولكن ليس المبلغ الإجمالي.

{ status: 'Finished',
  id: 962455719,
  transactions:
   [ { fee: '1.18',
       price: '187.99000000',
       datetime: '2018-02-15 06:50:34.427688',
       ltc: '2.50625000',
       tid: 54805885,
       type: 2,
       eur: '471.1499375000000000' } ] }

إذا كانت النتيجة == منتهية ، إجمالي المبلغ = المبلغ المعبأ (في هذه الحالة 2.50625000 LTC)

wannesdemaeght صحيح ، ولكن فقط إذا تم الانتهاء منه (يمكن ملؤه جزئيًا)

صحيح ، ولكن عندما لا ينتهي ، سيعود على النحو التالي:

{الحالة: "فتح" ، المعرف: 963180354 ، المعاملات: []}

لذلك لا يهم حقًا

إذا كانت الحالة == منتهية -> المبلغ = مجموع كل المعاملات. المبلغ (يمتص أنهم وضعوا المبلغ كـ ltc / eth / ...)

صحيح ، ولكن عندما لا ينتهي ، سيعود على النحو التالي:
{الحالة: "فتح" ، المعرف: 963180354 ، المعاملات: []}

هذا ليس هو الحال دائما. في حالة التعبئة الجزئية ، ستُرجع الحالة = "مفتوح" مع معاملات غير فارغة (لست متأكدًا من ذلك ، فقد يتم تخزينها مؤقتًا حتى اللحظة التي يصبح فيها الطلب "منتهيًا"). وفي هذه الحالة لا يمكننا استنتاج المبلغ الإجمالي للأمر من الصفقات ، للأسف. API الخاصة بهم سيئة للغاية.

مجموع المبالغ في المعاملات يتوافق مع الجزء المعبأ من الأمر المفتوح المنفذ جزئيًا. لذلك ، ربما يمكن توفير السمة "معبأ" في حالة الأمر المعبأ جزئيًا

stabilus نعم ، هذا ما أقوله ، يمكننا توفير filled ، لكن ليس إجمالي amount للطلب في هذه الحالة.

سنقوم بتحميل الإصلاح وسنقوم بتحديثك هنا قريبًا.

من المنطقي.
فتح -> شغل = مجموع المبالغ ، المبلغ الإجمالي = غير محدد
مغلق -> شغل = المبلغ الإجمالي = مجموع المبالغ

تضمين التغريدة
"Thx! ومع ذلك ، فإن opencollective لا تقبل BTC٪)) إنهم يقبلون المدفوعات الورقية ... إذا كنت ترغب في المساهمة في العملات المشفرة ، فإن مساهماتك مرحب بها ، وعناوين التشفير هي:"

يبدو أن opencollective قد قبلت BTC (لديهم بوابة دفع لـ BTC). في المرة القادمة سأعرف عنوان BTC المباشر الخاص بك. :)

stabilus wow ، لم أكن أعرف أن٪) Thx مرة أخرى)

https://twitter.com/opencollect/status/943620141430067208

حسنًا ، تم إصلاح هذا في ccxt 1.10.1114 ويجب أن يعمل fetchOrder بشكل طبيعي الآن ، كما هو موضح أعلاه فيما يتعلق بـ amount و filled .

stabilus ، wannesdemaeght اسمحوا لي أن أعرف إذا كنت لا تزال تواجه أي صعوبات في ذلك. أشكركم على مشاركتكم!

{ id: '962455719',
  datetime: undefined,
  timestamp: undefined,
  status: 'closed',
  symbol: 'LTC/EUR',
  type: undefined,
  side: undefined,
  price: undefined,
  cost: undefined,
  amount: 2.50625,
  filled: 2.50625,
  remaining: 0,
  trades:
   [ { id: '54805885',
       info: [Object],
       timestamp: 1518677434427,
       datetime: '2018-02-15T06:50:34.427Z',
       symbol: 'LTC/EUR',
       order: '962455719',
       type: undefined,
       side: undefined,
       price: 187.99,
       amount: 2.50625,
       fee: [Object] } ],
  fee: undefined,
  info: { status: 'Finished', id: 962455719, transactions: [ [Object] ] } }

السعر: إذا كانت الحالة == مغلق -> (سعر الصفقة * المبلغ لكل صفقة) / المبلغ الإجمالي
التكلفة: إذا كانت الحالة == مغلق -> السعر * المبلغ
الرسوم: إذا كانت الحالة == مغلق -> مجموع الرسوم لكل صفقة

wannesdemaeght نعم ، أنت على حق ، ستضيف ذلك أيضًا.

أنا حقًا أحب إخبار الناس بما يجب عليهم فعله: rofl:

يعمل مثل رفيق السحر! لفهمي: fetchOrder يقوم بإجراء مكالمة واحدة للبورصة - وليس 2 ، أليس كذلك؟ وتستدعي طريقة bitstamp orderStatus (التي لا تخزن مؤقتًا لمدة 10 ثوانٍ). صيح؟

تضمين التغريدة

fetchOrder يقوم بإجراء مكالمة واحدة إلى البورصة - وليس 2 ، أليس كذلك؟

بالضبط.

عظيم ، وماذا عن "تستدعي طريقة bitstamp orderStatus (التي لا تخزن مؤقتًا لمدة 10 ثوانٍ). صحيح؟"

يستدعي أسلوب الحالة orderStamp (الذي لا يخزن مؤقتًا لمدة 10 ثوانٍ). صيح؟"

نعم.

السعر الإضافي والتكلفة والرسوم لإحضار الطلب المرتجع بـ ccxt 1.10.1115

شكرا يا رجل! يعمل بشكل مثالي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات