كل منصة تداول تحدّ عدد الطلبات التي يرسلها برنامجك إلى واجهتها البرمجية (API) خلال فترة زمنية. البوت الذي يتجاهل هذه الحدود يتلقى رفضًا مؤقتًا، ثم قد يُحظر عنوانه لفترة، وقد يحدث ذلك وهو بحاجة إلى إغلاق مركز. فهم الحدود، والتعامل الصحيح مع الانقطاعات، وإعادة المحاولة بطريقة لا تكرر الأوامر، هي ثلاث مهارات تشغيلية أساسية لأي مشغّل.
الحدود
كيف تُحسب
المنصات تستخدم أساليب مختلفة، لكن الفكرة العامة واحدة: لكل طلب «تكلفة»، ولك رصيد من التكلفة يتجدد كل فترة.
مثال من وثائق Binance للسوق الفوري، حتى تاريخ كتابة هذا الدليل:
- لكل نقطة نهاية (Endpoint) «وزن» (Weight). الطلبات الثقيلة، مثل جلب دفتر أوامر عميق أو كل الأوامر المفتوحة لكل الأزواج، تستهلك وزنًا أكبر.
- الحدود مبنية على عنوان IP لا على مفتاح API. أي أن بوتين على الخادم نفسه يتشاركان الحد ذاته.
- كل رد يحمل رأسًا (Header) باسم
X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter)يخبرك بالوزن المستهلك حاليًا. - عند تجاوز الحد تعود الاستجابة برمز HTTP 429، ومعها رأس
Retry-Afterبعدد الثواني الواجب انتظارها. - الاستمرار في الإرسال بعد 429 يؤدي إلى حظر آلي للعنوان برمز HTTP 418، تتصاعد مدته مع التكرار من دقيقتين حتى 3 أيام.
- هناك أيضًا حد منفصل لعدد الأوامر المرسلة، وتجاوزه يعيد 429 كذلك.
منصات أخرى تستخدم نماذج مختلفة، مثل عدّاد يتناقص مع الزمن، أو حدود منفصلة لكل مفتاح. القاعدة: اقرأ صفحة الحدود في وثائق منصتك قبل كتابة أي سطر، ولا تفترض أن ما يعمل على منصة يعمل على أخرى.
من أين يأتي تجاوز الحدود عادة
- الاستعلام المتكرر عن السعر. بوت يسأل عن السعر كل ثانية لعشرين زوجًا يرسل 1,200 طلب في الدقيقة. الأفضل الاشتراك في بث الأسعار عبر WebSocket، الذي لا يستهلك وزن الطلبات العادية.
- جلب كل شيء في كل دورة. طلب كل الأوامر المفتوحة لكل الأزواج في كل دقيقة مكلف. اطلب ما تحتاجه فقط، أو استخدم بث بيانات الحساب (User Data Stream) لتصلك تحديثات الأوامر والأرصدة دون استعلام.
- حلقات إعادة المحاولة. خطأ واحد يولّد إعادة فورية، فخطأ آخر، فإعادة أخرى. هذا أسرع طريق إلى الحظر.
- عدة بوتات على عنوان واحد. كل واحد منها ضمن الحد، ومجموعها فوقه.
مثال توضيحي: ميزانية الطلبات
افترض حدًا قدره 6,000 وحدة وزن في الدقيقة (رقم توضيحي؛ راجع منصتك). خطة البوت:
| المهمة | التكرار | الوزن لكل طلب | الوزن في الدقيقة |
|---|---|---|---|
| جلب شموع 5 أزواج | كل دقيقة | 2 | 10 |
| فحص الأوامر المفتوحة | كل 30 ثانية | 6 | 12 |
| فحص الرصيد | كل دقيقة | 20 | 20 |
| إرسال وإلغاء أوامر | بحسب الحاجة | 1 | نحو 10 |
| المجموع | نحو 52 |
52 من 6,000 يعني أقل من 1%. هذا هو الهدف: هامش واسع جدًا، حتى تبقى مساحة لعمليات الطوارئ مثل إلغاء كل الأوامر وإغلاق المراكز. اجعل البوت يقرأ رأس الوزن المستهلك ويبطئ تلقائيًا إن تجاوز مثلًا 50% من الحد.
الانقطاعات
أنواع الانقطاع
| النوع | العَرَض | ما يجب فعله |
|---|---|---|
| مهلة اتصال (Timeout) | لا رد خلال المدة المحددة | الأمر قد يكون نُفّذ أو لا. لا تفترض. استعلم عن حالته |
| خطأ 5xx من المنصة | خطأ داخلي لدى المنصة | الحالة مجهولة كذلك. استعلم قبل إعادة الإرسال |
| 429 | تجاوز الحد | توقف وانتظر مدة Retry-After |
| 418 | حظر العنوان | توقف تمامًا حتى انتهاء المدة، وأرسل تنبيهًا حرجًا |
| 403 | قد يكون قاعدة جدار حماية أو حظرًا أمنيًا | توقف وراجع يدويًا |
| انقطاع WebSocket | توقف تدفق الأسعار دون خطأ صريح | راقب عمر آخر رسالة؛ أعد الاتصال إن تجاوز عتبة |
| صيانة معلنة | أخطاء متوقعة في نافذة زمنية معروفة | لا صفقات جديدة، ولا تنبيهات حرجة |
أخطر حالة: «لا أعرف إن نُفّذ الأمر»
البوت أرسل أمر شراء، ثم انقطع الاتصال قبل الرد. هناك احتمالان: الأمر لم يصل، أو وصل ونُفّذ. إن أعاد البوت إرساله مباشرة، فقد يملك الآن ضعف المركز المقصود.
الحل هو معرّف الأمر من جهة العميل. معظم المنصات تسمح لك بإرسال معرّف خاص بك مع كل أمر؛ في وثائق Binance يسمى newClientOrderId. البوت يولّد معرّفًا فريدًا قبل الإرسال ويحفظه. عند الشك، يستعلم عن الأمر بهذا المعرّف:
- إن وُجد الأمر: لا إعادة إرسال، وتُحدّث الحالة من المنصة.
- إن لم يوجد بعد مهلة كافية: يُرسل من جديد، بالمعرّف نفسه إن كانت المنصة ترفض المعرّف المكرر، فتكون أنت محميًا من الازدواج.
انقطاع بث الأسعار
اتصال WebSocket قد يبقى «مفتوحًا» دون أن تصل رسائل. البوت الذي يعتمد على آخر سعر مستلم سيتخذ قرارات على سعر قديم. القاعدة: سجّل وقت آخر رسالة، وإن مرّ عليه أكثر من مدة محددة، مثلًا 30 ثانية لزوج نشط، اعتبر البيانات قديمة، أوقف القرارات، وأعد الاتصال. بعض المنصات تقطع الاتصالات الطويلة دوريًا، وBinance مثلًا تحدد مدة صلاحية الاتصال الواحد، فيجب أن يتوقع البوت إعادة الاتصال كحدث عادي.
إعادة المحاولة
القواعد الأربع
1. ميّز بين ما يُعاد وما لا يُعاد. أخطاء الشبكة والمهلات و5xx قابلة لإعادة المحاولة بعد التحقق. أخطاء مثل «رصيد غير كافٍ» أو «كمية غير صالحة» لن تنجح بالتكرار؛ إعادتها تستهلك الحد فقط. سجّلها وأرسل تنبيهًا.
2. انتظار متزايد (Exponential Backoff). لا تعد المحاولة فورًا. انتظر ثانية، ثم ثانيتين، ثم 4، ثم 8، بحد أقصى مثل 60 ثانية.
3. عشوائية صغيرة (Jitter). أضف إلى كل انتظار جزءًا عشوائيًا، مثلًا ±20%. إن كان لديك عدة عمليات تعيد المحاولة معًا، فهذا يمنعها من الاصطدام بالحد في اللحظة نفسها مرة أخرى.
4. حد أقصى للمحاولات. بعد 5 محاولات فاشلة مثلًا، توقف وأرسل تنبيهًا. البوت الذي يحاول إلى ما لا نهاية يخفي المشكلة بدل أن يكشفها.
مثال توضيحي: جدول انتظار
| المحاولة | الانتظار الأساسي | مع عشوائية ±20% |
|---|---|---|
| 1 | 1 ثانية | بين 0.8 و1.2 |
| 2 | 2 ثانية | بين 1.6 و2.4 |
| 3 | 4 ثوانٍ | بين 3.2 و4.8 |
| 4 | 8 ثوانٍ | بين 6.4 و9.6 |
| 5 | 16 ثانية | بين 12.8 و19.2 |
| بعدها | توقف + تنبيه |
إن احتوى الرد على Retry-After، فهو يتقدم على جدولك: انتظر المدة التي حددتها المنصة على الأقل.
الأولويات عند الضغط
حين يقترب البوت من الحد أو يعود من انقطاع، ليست كل الطلبات متساوية. رتّبها:
- وضع أوامر وقف الخسارة المفقودة أو إغلاق المراكز.
- إلغاء الأوامر القديمة.
- مزامنة الحالة مع المنصة.
- فتح صفقات جديدة، وهي آخر الأولويات، ويمكن تأجيلها بالكامل.
أمان المفاتيح
حدود الواجهة مرتبطة بأمان المفاتيح، لأن مفتاحًا مسرّبًا يستخدمه طرف آخر يستهلك حدودك أيضًا. القواعد الأساسية التي تتيحها معظم المنصات: صلاحية قراءة وتداول فقط دون سحب، تقييد المفتاح بعنوان IP الخادم، مفتاح منفصل لكل بوت، وتغيير المفاتيح دوريًا.
هذا المحتوى تعليمي وليس نصيحة استثمارية.
قائمة مراجعة
- قرأت صفحة الحدود في وثائق منصتك، وتعرف هل الحد على العنوان أم على المفتاح.
- ميزانية الطلبات أقل من 10% من الحد في التشغيل العادي.
- الأسعار وتحديثات الحساب عبر البث لا الاستعلام المتكرر.
- كل أمر يحمل معرّفًا من جهة العميل، ويُستعلم عنه قبل أي إعادة إرسال.
- إعادة المحاولة بانتظار متزايد وعشوائية وحد أقصى.
- 429 و418 يُحترمان، و418 يرسل تنبيهًا حرجًا.
- مفتاح بلا صلاحية سحب، ومقيّد بعنوان IP.
المصادر
- Binance Spot API Documentation، صفحة Limits (حدود الوزن، HTTP 429 و418، رأس Retry-After).
- Binance Spot API Documentation، أقسام Trading endpoints (المعامل newClientOrderId) وWebSocket Streams وUser Data Stream.
توصيات سوينغو: الإشارة كاملة، والقرار قرارك
كل توصية تأتيك بمنطقة الشراء ووقف الخسارة والهدف الأول ومستوى المخاطرة، على أزواج Spot مقابل USDT ومن غير رافعة. أنت تنفّذ بنفسك على حسابك في المنصة التي تستخدمها.
- سجّل دخولك واختر صفقة مفتوحة
- انسخ منطقة الشراء إلى المنصة
- ضع أمر البيع عند الهدف الأول، ووقف الخسارة كما في التوصية
التداول في العملات الرقمية عالي المخاطرة، ولا توجد توصية تضمن الربح.
منصات متاحة في بلدك
- Bybitلا بيانات: الرسوم، الإيداع والسحب، الدعم بالعربي افتح حساب
تحذير: التداول بالرافعة والعملات الرقمية ينطوي على مخاطر عالية وقد تخسر رأس مالك. روابط «افتح حساب» روابط شراكة، وقد نحصل على عمولة دون أي تكلفة إضافية عليك.