دليل Polymarket Bot · الفصل 17 من 32

استخدم اختلال دفتر أوامر Polymarket كإشارة سعر قصيرة الأجل: نسبة حجم bid إلى ask، احتساب microprice، نصف عمر الإشارة، ومتى تتفوق bots الاختلال على التنفيذ العشوائي.

ما الذي يغطيه هذا الفصل

اختلال دفتر الأوامر هو نسبة عمق جانب الشراء إلى عمق جانب البيع في limit order book. في Polymarket له أفضلية تنبؤية حقيقية لكنها قصيرة العمر - عادةً من 5 إلى 30 ثانية قبل أن يتحرك mid. هذا الفصل يشرح نمط الاحتساب والظروف التي تكون فيها الإشارة مضللة.

  • ما هو اختلال دفتر الأوامر
  • احتساب microprice
  • الاختلال كإشارة اتجاهية
  • نصف عمر الإشارة في Polymarket
  • متى تكون إشارات الاختلال مضللة
  • Code: حساب الاختلال مع كل WS tick

ما هو اختلال دفتر الأوامر

اختلال دفتر الأوامر هو نسبة إجمالي عمق جانب الشراء إلى إجمالي عمق جانب البيع في limit order book. وعند احتسابه على أعلى N مستويات (وغالبًا N=5)، فإنه يلتقط ضغط المتداولين التراكمي الذي لم ينعكس بعد في mid-price.

الصيغة: imbalance = (Σ bid[i].price × bid[i].size for i in [0..N]) − (Σ ask[i].price × ask[i].size) / (Σ both). المجال من -1 إلى +1؛ القيم الموجبة تعني ضغط شراء أكبر، والسالبة تعني ضغط بيع أكبر.

الإشارة حقيقية تجريبيًا على Polymarket لكنها مشوشة. يمكن لحوت واحد أن يصنع انطباعًا زائفًا بالاختلال لمدة 30-60 ثانية قبل أن تتم مراجعته عبر arbitrage. إنها مفيدة كميزة واحدة ضمن عدة ميزات، لكنها خطيرة إذا استُخدمت كمحفّز وحيد.

احتساب microprice

microprice هو تحسين للـ mid البسيط: متوسط مرجح لأفضل bid وأفضل ask، موزونًا بأحجامهما النسبية.

microprice = (best_bid × ask_size + best_ask × bid_size) / (bid_size + ask_size)

عندما يكون صفّ جانب bid أكبر بكثير من جانب ask، يقترب microprice من ask. الفكرة هنا: وجود عدد أكبر من المشترين المنتظرين يعني أن الصفقة التالية يُرجَّح أن ترفع ask، وبالتالي تكون القيمة العادلة أقرب إلى ask.

microprice هو مؤشر متقدم من 5 إلى 30 ثانية للحركة الفعلية في mid. تستخدمه bots الإنتاجية كسعر مرجعي لقرارات جني الربح بدلًا من mid الساذج.

الاختلال كإشارة اتجاهية

من الملاحظة الإنتاجية: عندما يتحول الاختلال من -0.3 إلى +0.5 خلال 10 ثوانٍ من دون حدث إخباري مرافِق، يرتفع mid بمقدار 1-2 سنت خلال 30-60 ثانية التالية في نحو 65% من الحالات.

هذه أفضلية حقيقية لكنها تتلاشى عند أحجام المراكز الصغيرة بعد الرسوم. لتحقيق الربح، يجب على bot أن يحدد حجمًا يكفي لالتقاط الحركة بعد الرسوم، لكن من دون أن يحرك دفتر الأوامر بنفسه. دفاتر Polymarket غالبًا ما تكون رقيقة بما يكفي لأن أي شيء فوق 50 سهمًا قد يحرك السوق.

اجمع الاختلال مع ميزات أخرى: سرعة التداول (كلما زادت الصفقات كانت الإشارة أقرب إلى الحقيقية)، تحرك best-bid فعلًا إلى الأعلى (وليس مجرد انتقال العمق)، وأن يكون السوق ليس في وضع مدفوع بالأخبار.

نصف عمر الإشارة في Polymarket

إشارة الاختلال تتلاشى. بيانات الإنتاج من trader لدينا: اختلال > 0.6 → حركة متوقعة في mid بمقدار 1.2c خلال 60 ثانية، مع نصف عمر يقارب 30 ثانية. بعد 90 ثانية تصبح القيمة التنبؤية معدومة.

النتيجة لتصميم bot: تحرك بسرعة أو تجاهل الإشارة. bot يحتاج 15 ثانية لاتخاذ القرار يستهلك نصف الأفضلية قبل وضع الأمر. يجب أن يكون حد التأخير الزمني لاستراتيجيات الاختلال أقل من 5 ثوانٍ من ظهور الإشارة إلى إطلاق FOK.

الاستراتيجيات التي تحتفظ بالمراكز لفترة أطول من نصف العمر (1-2 دقيقة) تراهن على الإشارة التالية، لا الحالية. كن واضحًا بشأن هذا؛ لا تحتفظ عن طريق الخطأ بمراكز مدفوعة بالاختلال حتى التسوية.

متى تكون إشارات الاختلال مضللة

تكون الإشارة مضللة عندما يتحقق أحد ثلاثة شروط.

  • حركة مدفوعة بالأخبار: يكون الاختلال نتيجةً لخبر لم تره بعد. التداول ضده يخسر؛ أما التداول معه فهو news arbitrage، أي استراتيجية مختلفة.
  • Whale spoofing: أمر كبير يوضع ثم يُلغى بسرعة، فينشئ اختلالًا زائفًا طوال المدة. صفِّ ذلك عبر التحقق من استمرار الاختلال لمدة 10 ثوانٍ أو أكثر قبل التفعيل.
  • إعادة التوازن في نهاية الفترة: صانعو السوق يسحبون quotes لأسباب تتعلق بالمخزون لا بالمعلومة. ينعكس الاختلال بعد دقائق عندما يعيد MM تسعير quotes.

الفلتر المدمج هو: اختلال > threshold AND سرعة التداول > baseline AND لا يوجد حدث إخباري خلال آخر 5 دقائق. كل فلتر منفردًا يولد عددًا كبيرًا من الإيجابيات الكاذبة.

Code: حساب الاختلال مع كل WS tick

مرجع: اشترك في تحديثات WebSocket للدفتر، وأعد حساب الاختلال مع كل tick.

def on_book_message(msg):
    bids = msg.get("bids", [])[:5]
    asks = msg.get("asks", [])[:5]
    bid_usd = sum(float(b["price"]) * float(b["size"]) for b in bids)
    ask_usd = sum(float(a["price"]) * float(a["size"]) for a in asks)
    total = bid_usd + ask_usd
    if total < 100: return  # illiquid
    imb = (bid_usd - ask_usd) / total
    state[msg["asset_id"]] = {
        "imb": imb,
        "best_bid": float(bids[0]["price"]) if bids else 0,
        "best_ask": float(asks[0]["price"]) if asks else 1,
        "ts": time.time()
    }
    # decision logic with cooldown + filters
    if imb > 0.6 and time.time() - last_fired.get(msg["asset_id"], 0) > 60:
        check_filters_and_maybe_fire(msg["asset_id"])

الحالة تكون لكل token على حدة. يَحول cooldown دون الإفراط في الإطلاق على الإشارة نفسها. الفلاتر (التحقق من الأخبار، سرعة التداول) هي التي تسمح بمرور trade الفعلي.

الأسئلة الشائعة

ما هو اختلال دفتر الأوامر؟
هو نسبة حجم bid إلى حجم ask في أعلى دفتر الأوامر. عندما يميل الدفتر بقوة لصالح bid (أي يوجد مشترون أكثر من البائعين قرب السعر الحالي)، فهذا يشير إلى ضغط صعودي على السعر في الأجل القصير جدًا. الإشارة معروفة جيدًا في crypto والأسهم؛ وعلى Polymarket تعمل في الأسواق السائلة لكنها تختفي في الأسواق الرقيقة.
كيف أحسب microprice؟
microprice = (best_ask * bid_size + best_bid * ask_size) / (bid_size + ask_size). إنه نسخة مرجحة بالحجم من mid-price تميل نحو الجهة ذات الحجم الأقل - أي الجهة التي “تنفد” أولًا. تستخدمه bots كتقدير للقيمة العادلة يدمج الاختلال.
ما نصف عمر إشارة الاختلال في Polymarket؟
في الأسواق النشطة، من 5 إلى 30 ثانية. في الأسواق الرقيقة، يكون أطول (لأن الأوامر الجديدة تحتاج وقتًا أطول لتجاوز الاختلال). إذا كان bot الخاص بك يستجيب في أقل من ثانية، يمكنك التقاط جزء منها. إذا استجاب خلال 5 ثوانٍ أو أكثر، فعادةً تكون متأخرًا جدًا.
متى يكون الاختلال مضللاً؟
عندما يكون هناك أمر كبير واحد جالس على أحد الجانبين بانتظار التنفيذ (مثل bid كبير ثابت واحد، من دون نشاط آخر). الاختلال هنا حقيقي لكنه لا يتنبأ بالسعر - بل يُظهر فقط مشتريًا واحدًا لديه دافع قوي. صفِّ ذلك بعدد الأوامر، لا بالحجم فقط: اختلال من N أوامر إلى أمر واحد أكثر إفادة من 5x حجم موزع على أمر واحد لكل صف.
هل يكفي اختلال دفتر الأوامر للتداول وحده؟
عادةً لا. كإشارة مستقلة يكون ضعيفًا ويمكن مراجعته عبر arbitrage. اجمعه مع إشارة أخرى (مثل macroprice mean reversion أو news flag أو حالة حدث رياضي) للحصول على أفضلية أكثر دوامًا. الاختلال وحده يميل إلى الأداء الأضعف من التنفيذ العشوائي بعد الرسوم.
ما مكتبة Python التي يمكنها حساب الاختلال من Polymarket WS؟
لا توجد، بحسب علمنا، مكتبة جاهزة لهذا الغرض - فالأمر لا يتجاوز بضع عشرات من الأسطر. اشترك عبر py-clob-client في market book، وفي كل price_change event أعد حساب أحجام bid/ask في أعلى الدفتر، ثم أخرج metric الخاص بالاختلال. خزّن آخر قيمة ولا تعِد التفعيل إلا عند تغيرات ذات معنى.